on master help sign in
Switch to conduits
commit9dbc92c5b589139f417662c561727b57bd68a11b authorMichael Snoyman <michael@snoyman.com> dateThu 5 Jan 2012, 19:37 (15 years ago) parent17b7a07
2 files changed+12−8
Network/Wai/Frontend/MonadCGI.hs+9−5 wai-frontend-monadcgi.cabal+3−3
Network/Wai/Frontend/MonadCGI.hs+9−5
@@ -10,7 +10,8 @@ import Network.HTTP.Types (Status (..))
1010import Control.Monad.IO.Class (liftIO)
1111import Data.CaseInsensitive (original)
1212
13−import qualified Data.Enumerator.List as EL
13+import Data.Conduit
14+import Data.Conduit.Lazy (lazyConsume)
1415
1516import qualified Data.Map as Map
1617import qualified Data.ByteString.Lazy as BS
@@ -28,15 +29,18 @@ safeRead d s = case reads s of
2829cgiToApp :: CGI CGIResult -> Application
2930cgiToApp = cgiToAppGeneric id
3031
32+unbufferSource :: Monad m => BufferedSource m a -> Source m a
33+unbufferSource bsrc = Source $ return $ PreparedSource
34+ { sourcePull = bsourcePull bsrc
35+ , sourceClose = bsourceClose bsrc
36+ }
37+
3138cgiToAppGeneric :: Monad m
3239 => (m (Headers, CGIResult) -> IO (Headers, CGIResult))
3340 -> CGIT m CGIResult
3441 -> Application
3542cgiToAppGeneric toIO cgi env = do
36− -- Note: the next line will read the entire request body into memory.
37− -- This is a flaw in enumerator-based WAI. Conduit-based WAI will allow
38− -- for lazy I/O here.
39− input <- fmap BS.fromChunks EL.consume
43+ input <- fmap BS.fromChunks $ lazyConsume $ unbufferSource $ requestBody env
4044 let vars = map (first fixVarName . go) (requestHeaders env)
4145 ++ getCgiVars env
4246 (inputs, body') = decodeInput vars input
wai-frontend-monadcgi.cabal+3−3
@@ -1,5 +1,5 @@
11name: wai-frontend-monadcgi
2−version: 0.1.0
2+version: 0.2.0
33license: BSD3
44license-file: LICENSE
55author: Michael Snoyman <michael@snoyman.com>
@@ -15,10 +15,10 @@ library
1515 bytestring,
1616 containers >= 0.2,
1717 cgi,
18− enumerator,
18+ conduit,
1919 http-types,
2020 transformers,
2121 case-insensitive,
22− wai >= 0.4 && < 0.5
22+ wai >= 1.0 && < 1.1
2323 exposed-modules: Network.Wai.Frontend.MonadCGI
2424 ghc-options: -Wall