使用requestBodySourceIO时跟踪长度

时间:2016-06-19 12:25:02

标签: haskell conduit

Network.HTTP.Conduit中,requestBodySourceIO具有此类型签名:

Prelude Network.HTTP.Conduit Data.Conduit Control.Monad.Trans.Resource> :t requestBodySourceIO
requestBodySourceIO
  :: GHC.Int.Int64
     -> Source IO Data.ByteString.Internal.ByteString -> RequestBody

第一个参数是body的长度(以字节为单位)。将ByteString的来源传递给Bytestring同时跟踪到目前为止的Bytestring的运行总和有什么好方法?这将有助于在请求结束时确定传递给它的长度与传递给它的model.save() 的总长度相匹配。

1 个答案:

答案 0 :(得分:1)

您将获得一些字节来源 - 请调用此source。 要构建源,您将传递给requestBodySourceIO,只需追加一个跟踪长度的管道段:

mySource = source =$= processor 0
  where processor sz = do bs <- await
                          let sz' = sz + BS.length bs
                          ...
                          processor sz'

然后使用requestBodySourceIO致电mySource