{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DSV.Parsing
( dsvRowAtto
, dsvRowPipe, csvRowPipe
, handleCsvRowProducer, handleDsvRowProducer
) where
import DSV.AttoParser
import DSV.AttoPipe
import DSV.ByteString
import DSV.CommonDelimiters
import DSV.IO
import DSV.ParseError
import DSV.ParseStop
import DSV.Pipes
import DSV.Prelude
import DSV.Vector
import Data.Attoparsec.ByteString.Char8 (endOfLine)
import qualified Data.Csv.Parser as Cassava
dsvRowAtto ::
Delimiter
-> AttoParser (Vector ByteString)
dsvRowAtto d =
Cassava.record (delimiterWord8 d) <* endOfLine
dsvRowPipe ::
forall m .
Monad m
=> Delimiter
-> Pipe ByteString (Vector ByteString) m ParseError
dsvRowPipe d =
attoPipe (dsvRowAtto d)
csvRowPipe ::
forall m .
Monad m
=> Pipe ByteString (Vector ByteString) m ParseError
csvRowPipe =
attoPipe (dsvRowAtto comma)
handleCsvRowProducer ::
forall m .
MonadIO m
=> Handle
-> Producer (Vector ByteString) m ParseStop
handleCsvRowProducer h =
handleDsvRowProducer comma h
handleDsvRowProducer ::
forall m .
MonadIO m
=> Delimiter
-> Handle
-> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer d h =
handleAttoProducer (dsvRowAtto d) h