module Pipes.KeyValueCsv
( breakLines
, parseKeyValueCsv
, module Pipes.KeyValueCsv.Csv
, module Pipes.KeyValueCsv.KeyValue
, module Pipes.KeyValueCsv.Types
, Record (..)
, Validation(..)
) where
import Prelude hiding (lines)
import Pipes.KeyValueCsv.Internal
import Pipes.KeyValueCsv.Internal.Types
import Pipes.KeyValueCsv.Common
import Pipes.KeyValueCsv.Csv
import Pipes.KeyValueCsv.KeyValue
import Pipes.KeyValueCsv.Types
import Control.Lens
import Data.Validation
import Data.Vinyl
import Data.Vinyl.Functor
import Data.Vinyl.Utils.Proxy
breakLines
:: Monad m
=> (Text -> Bool)
-> Lines m r
-> Lines m (Lines m r)
breakLines p (Lines l) = Lines $ Lines <$> breakLines' p l
parseKeyValueCsv
:: forall (m :: * -> *) (f :: k -> *) (g :: j -> *) (hs :: [k]) (rs :: [j]) (r :: *)
. ( Monad m
, Record hs
)
=> Options m f g hs rs
-> Producer Text m r
-> m
( Rec (WithKeyValueError :. f) hs
, Producer (Rec (WithCsvError :. g) rs) m r
)
parseKeyValueCsv options producer = useDelimiter (options^.delimiter) $ do
(hdr, remaining)
<- parseKeyValues (options^.kvOptions)
. breakLines (options^.predicate)
$ lines producer
pure (hdr, parseCsv (options^.csvOptions) remaining)