on master help sign in
warp: support blaze-builder >= 0.4
commita35895aaffc24309685f740036f2b1b7b90646ae authorEmanuel Borsboom <manny@fpcomplete.com> dateSun 22 Feb 2015, 07:20 (12 years ago) parent583bd6a
3 files changed+37−7
warp/Network/Wai/Handler/Warp/Buffer.hs+1−1 warp/Network/Wai/Handler/Warp/IO.hs+32−2 warp/warp.cabal+4−4
warp/Network/Wai/Handler/Warp/Buffer.hs+1−1
@@ -1,6 +1,6 @@
11module Network.Wai.Handler.Warp.Buffer where
22
3−import qualified Blaze.ByteString.Builder.Internal.Buffer as B (Buffer (..))
3+import qualified Data.Streaming.ByteString.Builder.Buffer as B (Buffer (..))
44import Data.Word (Word8)
55import Foreign.ForeignPtr (newForeignPtr_)
66import Foreign.Marshal.Alloc (mallocBytes, free)
warp/Network/Wai/Handler/Warp/IO.hs+32−2
@@ -1,13 +1,41 @@
11{-# LANGUAGE BangPatterns #-}
2+{-# LANGUAGE CPP #-}
23
34module Network.Wai.Handler.Warp.IO where
45
5−import Blaze.ByteString.Builder.Internal.Types (Builder(..), BuildSignal(..), BufRange(..), runBuildStep, buildStep)
66import Data.ByteString.Internal (ByteString(..))
77import Foreign.ForeignPtr (newForeignPtr_)
8−import Foreign.Ptr (plusPtr, minusPtr)
98import Network.Wai.Handler.Warp.Buffer
109
10+#if MIN_VERSION_blaze_builder(0,4,0)
11+
12+import Blaze.ByteString.Builder (Builder)
13+import Data.ByteString.Builder.Extra (runBuilder, Next(Done, More, Chunk))
14+
15+toBufIOWith :: Buffer -> BufSize -> (ByteString -> IO ()) -> Builder -> IO ()
16+toBufIOWith buf !size io builder = loop firstWriter
17+ where
18+ firstWriter = runBuilder builder
19+ runIO len = toBS buf len >>= io
20+ loop writer = do
21+ (len, signal) <- writer buf size
22+ case signal of
23+ Done -> runIO len
24+ More minSize next
25+ | size < minSize -> error "toBufIOWith: BufferFull: minSize"
26+ | otherwise -> do
27+ runIO len
28+ loop next
29+ Chunk bs next -> do
30+ runIO len
31+ io bs
32+ loop next
33+
34+#else /* !MIN_VERSION_blaze_builder(0,4,0) */
35+
36+import Blaze.ByteString.Builder.Internal.Types (Builder(..), BuildSignal(..), BufRange(..), runBuildStep, buildStep)
37+import Foreign.Ptr (plusPtr, minusPtr)
38+
1139toBufIOWith :: Buffer -> BufSize -> (ByteString -> IO ()) -> Builder -> IO ()
1240toBufIOWith buf !size io (Builder build) = loop firstStep
1341 where
@@ -29,6 +57,8 @@ toBufIOWith buf !size io (Builder build) = loop firstStep
2957 io bs
3058 loop next
3159
60+#endif /* !MIN_VERSION_blaze_builder(0,4,0) */
61+
3262toBS :: Buffer -> Int -> IO ByteString
3363toBS ptr siz = do
3464 fptr <- newForeignPtr_ ptr
warp/warp.cabal+4−4
@@ -30,7 +30,7 @@ Library
3030 Build-Depends: base >= 3 && < 5
3131 , array
3232 , auto-update >= 0.1.1 && < 0.2
33− , blaze-builder >= 0.3.3 && < 0.4
33+ , blaze-builder >= 0.3.3 && < 0.5
3434 , bytestring >= 0.9.1.4
3535 , case-insensitive >= 0.2
3636 , ghc-prim
@@ -41,7 +41,7 @@ Library
4141 , void
4242 , wai >= 3.0 && < 3.1
4343 , text
44− , streaming-commons >= 0.1.2
44+ , streaming-commons >= 0.1.10
4545 if flag(network-bytestring)
4646 Build-Depends: network >= 2.2.1.5 && < 2.2.3
4747 , network-bytestring >= 0.1.3 && < 0.1.4
@@ -112,7 +112,7 @@ Test-Suite spec
112112 Build-Depends: base >= 4 && < 5
113113 , array
114114 , auto-update
115− , blaze-builder >= 0.3.3 && < 0.4
115+ , blaze-builder >= 0.3.3 && < 0.5
116116 , bytestring >= 0.9.1.4
117117 , case-insensitive >= 0.2
118118 , ghc-prim
@@ -132,7 +132,7 @@ Test-Suite spec
132132 , time
133133 , old-locale
134134 , text
135− , streaming-commons >= 0.1.1
135+ , streaming-commons >= 0.1.10
136136 , async
137137
138138 if (os(linux) || os(freebsd) || os(darwin)) && flag(allow-sendfilefd)