module Pipes.KeyValueCsv.IO
( streamIn
, streamInBS
, SafeT
) where
import Prelude hiding (lines)
import Pipes.KeyValueCsv
import Data.Vinyl
import Data.Vinyl.Functor
import Pipes
import Pipes.ByteString (ByteString)
import qualified Pipes.ByteString as Pipes
import Pipes.Safe (SafeT, MonadMask)
import qualified Pipes.Safe as Pipes
import Pipes.Text.Encoding
import System.IO
streamInBS
:: ( MonadIO m
, MonadMask m
)
=> FilePath
-> Producer ByteString (SafeT m) ()
streamInBS path =
Pipes.bracket
( liftIO $ openFile path ReadMode )
( liftIO . hClose )
Pipes.fromHandle
streamIn
:: forall (m :: * -> *) (f :: k -> *) (g :: j -> *) (hs :: [k]) (rs :: [j])
. ( MonadIO m
, MonadMask m
, Record hs
)
=> Codec
-> FilePath
-> Options (SafeT m) f g hs rs
-> SafeT m
( Rec (WithKeyValueError :. f) hs
, Producer (Rec (WithCsvError :. g) rs) (SafeT m)
( Producer ByteString (SafeT m) () )
)
streamIn codec path options =
parseKeyValueCsv options
. decode codec
$ streamInBS path