module Text.Delimited.Put (
putRow
, putRecord
, putContent
, runPut
) where
import Data.Binary.Put (Put, putByteString, runPut)
import Text.Show.ByteString (putAscii, showp, unlinesP)
import Text.Delimited.Types
intersperseP :: Put -> [Put] -> Put
intersperseP _ [] = return ()
intersperseP _ (x:[]) = showp x
intersperseP d (x:xs) = x >> d >> intersperseP d xs
putRow :: Char -> [Put] -> Put
putRow delim = intersperseP (putAscii delim)
putRecord :: Char -> Record -> Put
putRecord delim = putRow delim . map putByteString
putContent :: Char -> Content -> Put
putContent delim = unlinesP . map (putRecord delim)