@@ -35,8 +35,9 @@ import qualified Network.HTTP.Client as C
3535import Prelude ()
3636import Prelude.Compat
3737import Servant.API
38− ((:<|>) ((:<|>)), (:>), JSON, NetstringFraming,
39− NewlineFraming, NoFraming, OctetStream, SourceIO, StreamGet)
38+ ((:<|>) ((:<|>)), (:>), JSON, NetstringFraming, StreamBody,
39+ NewlineFraming, NoFraming, OctetStream, SourceIO, StreamGet,
40+ )
4041import Servant.Client.Streaming
4142import Servant.ClientSpec
4243 (Person (..))
@@ -72,13 +73,15 @@ type StreamApi =
7273 "streamGetNewline" :> StreamGet NewlineFraming JSON (SourceIO Person)
7374 :<|> "streamGetNetstring" :> StreamGet NetstringFraming JSON (SourceIO Person)
7475 :<|> "streamALot" :> StreamGet NoFraming OctetStream (SourceIO BS.ByteString)
76+ :<|> "streamBody" :> StreamBody NoFraming OctetStream (SourceIO BS.ByteString) :> StreamGet NoFraming OctetStream (SourceIO BS.ByteString)
7577
7678api :: Proxy StreamApi
7779api = Proxy
7880
7981getGetNL, getGetNS :: ClientM (SourceIO Person)
8082getGetALot :: ClientM (SourceIO BS.ByteString)
81−getGetNL :<|> getGetNS :<|> getGetALot = client api
83+getStreamBody :: SourceT IO BS.ByteString -> ClientM (SourceIO BS.ByteString)
84+getGetNL :<|> getGetNS :<|> getGetALot :<|> getStreamBody = client api
8285
8386alice :: Person
8487alice = Person "Alice" 42
@@ -90,9 +93,9 @@ server :: Application
9093server = serve api
9194 $ return (source [alice, bob, alice])
9295 :<|> return (source [alice, bob, alice])
93−
9496 -- 2 ^ (18 + 10) = 256M
9597 :<|> return (SourceT ($ lots (powerOfTwo 18)))
98+ :<|> return
9699 where
97100 lots n
98101 | n < 0 = Stop
@@ -126,6 +129,12 @@ streamSpec = beforeAll (CS.startWaiApp server) $ afterAll CS.endWaiApp $ do
126129 withClient getGetNS baseUrl $ \(Right res) ->
127130 testRunSourceIO res `shouldReturn` Right [alice, bob, alice]
128131
132+ it "works with Servant.API.StreamBody" $ \(_, baseUrl) -> do
133+ withClient (getStreamBody (source inout)) baseUrl $ \(Right res) ->
134+ testRunSourceIO res `shouldReturn` Right inout
135+ where
136+ inout = ["foo", "bar"]
137+
129138{-
130139 it "streams in constant memory" $ \(_, baseUrl) -> do
131140 Right rs <- runClient getGetALot baseUrl