module HTTPResponseDecoder.BodyReaders where import HTTPResponseDecoder.Prelude import qualified ByteString.TreeBuilder import qualified Data.ByteString import qualified Data.ByteString.Lazy {-# INLINE bytes #-} bytes :: IO ByteString -> IO ByteString bytes = fmap ByteString.TreeBuilder.toByteString . builder {-# INLINE lazyBytes #-} lazyBytes :: IO ByteString -> IO Data.ByteString.Lazy.ByteString lazyBytes = fmap ByteString.TreeBuilder.toLazyByteString . builder {-# INLINABLE builder #-} builder :: IO ByteString -> IO ByteString.TreeBuilder.Builder builder chunk = loop mempty where loop builder = do chunk <- chunk if Data.ByteString.null chunk then return builder else loop (builder <> ByteString.TreeBuilder.byteString chunk)