------------------------------------------------------------------------------
-- |
-- Module : Blaze.ByteString.Builder.Enumerator
-- License : BSD3
-- Maintainer : Thomas Sutton <me@thomas-sutton.id.au>
-- Stability : Experimental
-- Portability : Unknown
--
-- Simplify the process of using @blaze-builder@ with @enumerator@ by
-- converting functions that construct 'Builder's into 'Iteratee's.
------------------------------------------------------------------------------
module Blaze.ByteString.Builder.Enumerator where
import Blaze.ByteString.Builder
import qualified Data.ByteString as B
import Data.Enumerator
-- | Convert a function that returns a @blaze-builder@ 'Builder' into an
-- 'Iteratee'. Each incoming value will be converted into a 'ByteString'.
iterBuilder :: Monad m => (a -> Builder) -> Iteratee a m B.ByteString
iterBuilder builder = continue (step builder)
where
step :: Monad m => (a -> Builder) -> Stream a -> Iteratee a m B.ByteString
step b input = case input of
EOF -> yield (B.empty) EOF
Chunks [] -> continue (step b)
Chunks (v:vs) -> yield (toByteString $ b v) (Chunks vs)