{-# 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 :: Delimiter -> AttoParser (Vector ByteString)
dsvRowAtto Delimiter
d =
Word8 -> AttoParser (Vector ByteString)
Cassava.record (Delimiter -> Word8
delimiterWord8 Delimiter
d) AttoParser (Vector ByteString)
-> Parser ByteString () -> AttoParser (Vector ByteString)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
endOfLine
dsvRowPipe ::
forall m .
Monad m
=> Delimiter
-> Pipe ByteString (Vector ByteString) m ParseError
dsvRowPipe :: Delimiter -> Pipe ByteString (Vector ByteString) m ParseError
dsvRowPipe Delimiter
d =
AttoParser (Vector ByteString)
-> Pipe ByteString (Vector ByteString) m ParseError
forall a (m :: * -> *).
Monad m =>
AttoParser a -> Pipe ByteString a m ParseError
attoPipe (Delimiter -> AttoParser (Vector ByteString)
dsvRowAtto Delimiter
d)
csvRowPipe ::
forall m .
Monad m
=> Pipe ByteString (Vector ByteString) m ParseError
csvRowPipe :: Pipe ByteString (Vector ByteString) m ParseError
csvRowPipe =
AttoParser (Vector ByteString)
-> Pipe ByteString (Vector ByteString) m ParseError
forall a (m :: * -> *).
Monad m =>
AttoParser a -> Pipe ByteString a m ParseError
attoPipe (Delimiter -> AttoParser (Vector ByteString)
dsvRowAtto Delimiter
comma)
handleCsvRowProducer ::
forall m .
MonadIO m
=> Handle
-> Producer (Vector ByteString) m ParseStop
handleCsvRowProducer :: Handle -> Producer (Vector ByteString) m ParseStop
handleCsvRowProducer Handle
h =
Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
forall (m :: * -> *).
MonadIO m =>
Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer Delimiter
comma Handle
h
handleDsvRowProducer ::
forall m .
MonadIO m
=> Delimiter
-> Handle
-> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer :: Delimiter -> Handle -> Producer (Vector ByteString) m ParseStop
handleDsvRowProducer Delimiter
d Handle
h =
AttoParser (Vector ByteString)
-> Handle -> Producer (Vector ByteString) m ParseStop
forall a (m :: * -> *).
MonadIO m =>
AttoParser a -> Handle -> Producer a m ParseStop
handleAttoProducer (Delimiter -> AttoParser (Vector ByteString)
dsvRowAtto Delimiter
d) Handle
h