git.iko.soy/typeable/servant
on master help sign in
Fix issue #1011: NewlineFraming encodes newline after each element
f1eb5f9Oleg Grenrus
servant/src/Servant/API/Stream.hs+3−10
@@ -187,20 +187,13 @@ instance FramingUnrender NoFraming where
187-- NewlineFraming
187-- NewlineFraming
188-------------------------------------------------------------------------------
188-------------------------------------------------------------------------------
189
189
190−-- | A simple framing strategy that has no header or termination, and inserts a
190+-- | A simple framing strategy that has no header, and inserts a
191−-- newline character between each frame. This assumes that it is used with a
191+-- newline character after each frame. This assumes that it is used with a
192-- Content-Type that encodes without newlines (e.g. JSON).
192-- Content-Type that encodes without newlines (e.g. JSON).
193data NewlineFraming
193data NewlineFraming
194
194
195instance FramingRender NewlineFraming where
195instance FramingRender NewlineFraming where
196− framingRender _ f = mapStepT go0 where
196+ framingRender _ f = fmap (\x -> f x <> "\n")
197− go0 Stop = Stop
198− go0 (Error err) = Error err
199− go0 (Skip s) = Skip (go0 s)
200− go0 (Yield x s) = Yield (f x) (go s)
201− go0 (Effect ms) = Effect (fmap go0 ms)
202−
203− go = fmap (\x -> "\n" <> f x)
204
197
205instance FramingUnrender NewlineFraming where
198instance FramingUnrender NewlineFraming where
206 framingUnrender _ f = transformWithAtto $ do
199 framingUnrender _ f = transformWithAtto $ do
servant/test/Servant/API/StreamSpec.hs+1−1
@@ -38,7 +38,7 @@ spec = describe "Servant.API.Stream" $ do
38
38
39 it "framingRender examples" $ do
39 it "framingRender examples" $ do
40 runRenderFrames re [] `shouldBe` Right ""
40 runRenderFrames re [] `shouldBe` Right ""
41− runRenderFrames re ["foo", "bar", "baz"] `shouldBe` Right "foo\nbar\nbaz"
41+ runRenderFrames re ["foo", "bar", "baz"] `shouldBe` Right "foo\nbar\nbaz\n"
42
42
43 it "framingUnrender examples" $ do
43 it "framingUnrender examples" $ do
44 let expected n = map Right [fromString ("foo" ++ show (n :: Int)), "bar", "baz"]
44 let expected n = map Right [fromString ("foo" ++ show (n :: Int)), "bar", "baz"]