delimited-text-0.3.0: Text/Delimited/Put.hs
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
-- | Intersperse a list of 'Put's with a delimiter.
intersperseP :: Put -> [Put] -> Put
intersperseP _ [] = return ()
intersperseP _ (x:[]) = showp x
intersperseP d (x:xs) = x >> d >> intersperseP d xs
-- | Convert 'Record' fields delimited by 'delim' to 'Put'.
putRow :: Char -> [Put] -> Put
putRow delim = intersperseP (putAscii delim)
-- | Convert 'Record' fields delimited by 'delim' to 'Put'.
putRecord :: Char -> Record -> Put
putRecord delim = putRow delim . map putByteString
-- | Convert 'Content' delimited by 'delim' to a 'Put'.
putContent :: Char -> Content -> Put
putContent delim = unlinesP . map (putRecord delim)