{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE LambdaCase #-}
module DSV.FileStrictZipView
( zipViewDsvFileStrict
, zipViewDsvFileStrictIgnoringAllErrors
, zipViewDsvFileStrictThrowFirstError
) where
import DSV.DelimiterType
import DSV.Fold
import DSV.IO
import DSV.ParseStop
import DSV.Parsing
import DSV.Pipes
import DSV.Prelude
import DSV.Validation
import DSV.Vector
import DSV.ZipViewPipe
import DSV.ZipViewStop
import DSV.ZipViewType
zipViewDsvFileStrict ::
forall m headerError rowError row .
MonadIO m
=> Delimiter
-> FilePath
-> ZipView headerError rowError row
-> m (ZipViewStop headerError, Vector (Validation rowError row))
zipViewDsvFileStrict d fp lu =
liftIO $ runSafeT $
do
foldProducerM foldVectorM $
withFile fp ReadMode $ \h ->
readRows h >-> interpretRows
where
readRows h =
fmap
(
\case
(_, ParseIncomplete) -> ZipViewParseError
(0, ParseComplete) -> ZipViewEmpty
(_, ParseComplete) -> ZipViewComplete
)
(count (handleDsvRowProducer d h))
interpretRows =
fmap ZipViewHeaderError (zipViewPipe lu)
zipViewDsvFileStrictIgnoringAllErrors ::
forall m headerError rowError row .
MonadIO m
=> Delimiter
-> FilePath
-> ZipView headerError rowError row
-> m (Vector row)
zipViewDsvFileStrictIgnoringAllErrors d fp lu =
fmap snd $ liftIO $ runSafeT $
do
foldProducerM foldVectorM $
withFile fp ReadMode $ \h ->
void (handleDsvRowProducer d h) >->
zipViewPipeIgnoringAllErrors lu
zipViewDsvFileStrictThrowFirstError ::
forall m headerError rowError row .
( MonadIO m
, Exception headerError
, Show rowError, Typeable rowError
)
=> Delimiter
-> FilePath
-> ZipView headerError rowError row
-> m (Vector row)
zipViewDsvFileStrictThrowFirstError d fp lu =
fmap snd $ liftIO $ runSafeT $
do
foldProducerM foldVectorM $
withFile fp ReadMode $ \h ->
void (handleDsvRowProducer d h) >->
zipViewPipeThrowFirstError lu