36 lines
767 B
Haskell
36 lines
767 B
Haskell
module Siphon.Encoding where
|
|
|
|
import Siphon.Types
|
|
import Colonnade.Types
|
|
import Pipes (Pipe,yield)
|
|
import qualified Pipes.Prelude as Pipes
|
|
import qualified Colonnade.Encoding as Encoding
|
|
|
|
row :: Siphon c
|
|
-> Encoding f c a
|
|
-> a
|
|
-> c
|
|
row (Siphon escape intercalate _ _) e =
|
|
intercalate . Encoding.runRow escape e
|
|
|
|
header :: Siphon c
|
|
-> Encoding Headed c a
|
|
-> c
|
|
header (Siphon escape intercalate _ _) e =
|
|
intercalate (Encoding.runHeader escape e)
|
|
|
|
pipe :: Monad m
|
|
=> Siphon c
|
|
-> Encoding f c a
|
|
-> Pipe a c m x
|
|
pipe siphon encoding = Pipes.map (row siphon encoding)
|
|
|
|
headedPipe :: Monad m
|
|
=> Siphon c
|
|
-> Encoding Headed c a
|
|
-> Pipe a c m x
|
|
headedPipe siphon encoding = do
|
|
yield (header siphon encoding)
|
|
pipe siphon encoding
|
|
|