packages feed

wai 0.4.3 → 1.0.0

raw patch · 2 files changed

+51/−26 lines, 2 filesdep +conduitdep +vaultdep −enumeratorPVP ok

version bump matches the API change (PVP)

Dependencies added: conduit, vault

Dependencies removed: enumerator

API changes (from Hackage documentation)

- Network.Wai: ResponseEnumerator :: (forall a. ResponseEnumerator a) -> Response
- Network.Wai: instance Show Request
- Network.Wai: responseEnumerator :: Response -> ResponseEnumerator a
- Network.Wai: type ResponseEnumerator a = (Status -> ResponseHeaders -> Iteratee Builder IO a) -> IO a
+ Network.Wai: ResponseSource :: Status -> ResponseHeaders -> (Source IO Builder) -> Response
+ Network.Wai: requestBody :: Request -> Source IO ByteString
+ Network.Wai: responseSource :: Response -> (Status, ResponseHeaders, Source IO Builder)
+ Network.Wai: vault :: Request -> Vault
- Network.Wai: Request :: Method -> HttpVersion -> ByteString -> ByteString -> ByteString -> Int -> RequestHeaders -> Bool -> SockAddr -> [Text] -> Query -> Request
+ Network.Wai: Request :: Method -> HttpVersion -> ByteString -> ByteString -> ByteString -> Int -> RequestHeaders -> Bool -> SockAddr -> [Text] -> Query -> Source IO ByteString -> Vault -> Request
- Network.Wai: type Application = Request -> Iteratee ByteString IO Response
+ Network.Wai: type Application = Request -> ResourceT IO Response

Files

Network/Wai.hs view
@@ -39,8 +39,7 @@     ( -- * WAI interface       Request (..)     , Response (..)-    , ResponseEnumerator-    , responseEnumerator+    , responseSource     , Application     , Middleware     , FilePart (..)@@ -51,15 +50,17 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import Data.Typeable (Typeable)-import Data.Enumerator (Enumerator, Iteratee (..), ($$), joinI, run_)-import qualified Data.Enumerator as E-import qualified Data.Enumerator.List as EL-import Data.Enumerator.Binary (enumFile, enumFileRange)-import Blaze.ByteString.Builder (Builder, fromByteString, fromLazyByteString)+import Control.Monad.Trans.Resource (ResourceT)+import qualified Data.Conduit as C+import qualified Data.Conduit.List as CL+import qualified Data.Conduit.Binary as CB+import Blaze.ByteString.Builder (Builder, fromLazyByteString) import Network.Socket (SockAddr) import qualified Network.HTTP.Types as H import Data.Text (Text) import Data.ByteString.Lazy.Char8 () -- makes it easier to use responseLBS+import Blaze.ByteString.Builder (fromByteString)+import Data.Vault (Vault)  -- | Information on the request sent by the client. This abstracts away the -- details of the underlying implementation.@@ -94,13 +95,39 @@   ,  pathInfo       :: [Text]   -- | Parsed query string information   ,  queryString    :: H.Query+  ,  requestBody    :: C.Source IO B.ByteString+  -- | A location for arbitrary data to be shared by applications and middleware.+  , vault           :: Vault   }-  deriving (Show, Typeable)+  deriving (Typeable) +-- |+--+-- Some questions and answers about the usage of 'Builder' here:+--+-- Q1. Shouldn't it be at the user's discretion to use Builders internally and+-- then create a stream of ByteStrings?+--+-- A1. That would be less efficient, as we wouldn't get cheap concatenation+-- with the response headers.+--+-- Q2. Isn't it really inefficient to convert from ByteString to Builder, and+-- then right back to ByteString?+--+-- A2. No. If the ByteStrings are small, then they will be copied into a larger+-- buffer, which should be a performance gain overall (less system calls). If+-- they are already large, then blaze-builder uses an InsertByteString+-- instruction to avoid copying.+--+-- Q3. Doesn't this prevent us from creating comet-style servers, since data+-- will be cached?+--+-- A3. You can force blaze-builder to output a ByteString before it is an+-- optimal size by sending a flush command. data Response     = ResponseFile H.Status H.ResponseHeaders FilePath (Maybe FilePart)     | ResponseBuilder H.Status H.ResponseHeaders Builder-    | ResponseEnumerator (forall a. ResponseEnumerator a)+    | ResponseSource H.Status H.ResponseHeaders (C.Source IO Builder)   deriving Typeable  data FilePart = FilePart@@ -108,26 +135,23 @@     , filePartByteCount :: Integer     } deriving Show -type ResponseEnumerator a =-    (H.Status -> H.ResponseHeaders -> Iteratee Builder IO a) -> IO a--responseEnumerator :: Response -> ResponseEnumerator a-responseEnumerator (ResponseEnumerator e) f = e f-responseEnumerator (ResponseFile s h fp mpart) f =-    run_ $ (maybe enumFile enumFilePart) mpart fp $$ joinI-         $ EL.map fromByteString $$ f s h-responseEnumerator (ResponseBuilder s h b) f = run_ $ do-    E.yield () $ E.Chunks [b]-    f s h+responseSource :: Response -> (H.Status, H.ResponseHeaders, C.Source IO Builder) -- FIXME re-analyze usage of Builder+responseSource (ResponseSource s h b) = (s, h, b)+responseSource (ResponseFile s h fp (Just part)) =+    (s, h, sourceFilePart part fp C.$= CL.map fromByteString)+responseSource (ResponseFile s h fp Nothing) =+    (s, h, CB.sourceFile fp C.$= CL.map fromByteString)+responseSource (ResponseBuilder s h b) =+    (s, h, CL.sourceList [b]) -enumFilePart :: FilePart -> FilePath -> Enumerator B.ByteString IO a-enumFilePart (FilePart offset count) fp =-    enumFileRange fp (Just offset) (Just count)+sourceFilePart :: FilePart -> FilePath -> C.Source IO B.ByteString+sourceFilePart (FilePart offset count) fp =+    CB.sourceFileRange fp (Just offset) (Just count)  responseLBS :: H.Status -> H.ResponseHeaders -> L.ByteString -> Response responseLBS s h = ResponseBuilder s h . fromLazyByteString -type Application = Request -> Iteratee B.ByteString IO Response+type Application = Request -> ResourceT IO Response  -- | Middleware is a component that sits between the server and application. It -- can do such tasks as GZIP encoding or response caching. What follows is the
wai.cabal view
@@ -1,5 +1,5 @@ Name:                wai-Version:             0.4.3+Version:             1.0.0 Synopsis:            Web Application Interface. Description:         Provides a common protocol for communication between web applications and web servers. License:             BSD3@@ -20,10 +20,11 @@   Build-Depends:     base                      >= 4        && < 5                    , bytestring                >= 0.9.1.4  && < 0.10                    , blaze-builder             >= 0.2.1.4  && < 0.4-                   , enumerator                >= 0.4.8    && < 0.5+                   , conduit                   >= 0.1                    , network                   >= 2.2.1.5  && < 2.4                    , http-types                >= 0.6      && < 0.7                    , text                      >= 0.7      && < 0.12                    , transformers              >= 0.2.2    && < 0.3+                   , vault                     >= 0.1      && < 0.2   Exposed-modules:   Network.Wai   ghc-options:       -Wall