Add NoFraming
strategy
This commit is contained in:
parent
0ba09c999b
commit
b80a3e6279
3 changed files with 17 additions and 4 deletions
|
@ -41,7 +41,8 @@ import Test.QuickCheck
|
|||
import Servant.API ((:<|>) ((:<|>)), (:>), JSON,
|
||||
NetstringFraming, NewlineFraming,
|
||||
OctetStream, ResultStream (..),
|
||||
StreamGenerator (..), StreamGet)
|
||||
StreamGenerator (..), StreamGet,
|
||||
NoFraming)
|
||||
import Servant.Client
|
||||
import Servant.ClientSpec (Person (..))
|
||||
import qualified Servant.ClientSpec as CS
|
||||
|
@ -55,7 +56,7 @@ spec = describe "Servant.Stream" $ do
|
|||
type StreamApi f =
|
||||
"streamGetNewline" :> StreamGet NewlineFraming JSON (f Person)
|
||||
:<|> "streamGetNetstring" :> StreamGet NetstringFraming JSON (f Person)
|
||||
:<|> "streamALot" :> StreamGet NewlineFraming OctetStream (f BS.ByteString)
|
||||
:<|> "streamALot" :> StreamGet NoFraming OctetStream (f BS.ByteString)
|
||||
|
||||
|
||||
capi :: Proxy (StreamApi ResultStream)
|
||||
|
|
|
@ -117,8 +117,8 @@ import Servant.API.Stream
|
|||
(BoundaryStrategy (..), BuildFromStream (..),
|
||||
ByteStringParser (..), FramingRender (..),
|
||||
FramingUnrender (..), NetstringFraming, NewlineFraming,
|
||||
ResultStream (..), Stream, StreamGenerator (..), StreamGet,
|
||||
StreamPost, ToStreamGenerator (..))
|
||||
NoFraming, ResultStream (..), Stream, StreamGenerator (..),
|
||||
StreamGet, StreamPost, ToStreamGenerator (..))
|
||||
import Servant.API.Sub
|
||||
((:>))
|
||||
import Servant.API.Vault
|
||||
|
|
|
@ -81,6 +81,18 @@ data ByteStringParser a = ByteStringParser {
|
|||
class FramingUnrender strategy a where
|
||||
unrenderFrames :: Proxy strategy -> Proxy a -> ByteStringParser (ByteStringParser (Either String ByteString))
|
||||
|
||||
-- | A framing strategy that does not do any framing at all, it just passes the input data
|
||||
-- This will be used most of the time with binary data, such as files
|
||||
data NoFraming
|
||||
|
||||
instance FramingRender NoFraming a where
|
||||
header _ _ = empty
|
||||
boundary _ _ = BoundaryStrategyGeneral id
|
||||
trailer _ _ = empty
|
||||
|
||||
instance FramingUnrender NoFraming a where
|
||||
unrenderFrames _ _ = ByteStringParser (Just . (go,)) (go,)
|
||||
where go = ByteStringParser (Just . (, empty) . Right) ((, empty) . Right)
|
||||
|
||||
-- | A simple framing strategy that has no header or termination, and inserts a newline character between each frame.
|
||||
-- This assumes that it is used with a Content-Type that encodes without newlines (e.g. JSON).
|
||||
|
|
Loading…
Reference in a new issue