conduit-extra 1.2.0 → 1.2.1
raw patch · 4 files changed
+116/−4 lines, 4 filesdep +typed-processdep +unliftio-coredep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependencies added: typed-process, unliftio-core
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
+ Data.Conduit.Binary: withSinkFile :: (MonadUnliftIO m, MonadIO n) => FilePath -> (ConduitM ByteString o n () -> m a) -> m a
+ Data.Conduit.Binary: withSinkFileBuilder :: (MonadUnliftIO m, MonadIO n) => FilePath -> (ConduitM Builder o n () -> m a) -> m a
+ Data.Conduit.Binary: withSourceFile :: (MonadUnliftIO m, MonadIO n) => FilePath -> (ConduitM i ByteString n () -> m a) -> m a
+ Data.Conduit.Process.Typed: createSink :: MonadIO m => StreamSpec STInput (ConduitM ByteString o m ())
+ Data.Conduit.Process.Typed: createSource :: MonadIO m => StreamSpec STOutput (ConduitM i ByteString m ())
+ Data.Conduit.Process.Typed: withProcess :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a
+ Data.Conduit.Process.Typed: withProcess_ :: MonadUnliftIO m => ProcessConfig stdin stdout stderr -> (Process stdin stdout stderr -> m a) -> m a
Files
- ChangeLog.md +5/−0
- Data/Conduit/Binary.hs +45/−0
- Data/Conduit/Process/Typed.hs +59/−0
- conduit-extra.cabal +7/−4
ChangeLog.md view
@@ -1,3 +1,8 @@+## 1.2.1++* `Data.Conduit.Process.Typed`+* `withSourceFile`, `withSinkFile`, and `withSinkFileBuilder`+ ## 1.2.0 * Added the `posOffset` field to the
Data/Conduit/Binary.hs view
@@ -20,6 +20,7 @@ , sourceFileRange , sourceHandleRange , sourceHandleRangeWithBuffer+ , withSourceFile -- ** Sinks , sinkFile , sinkFileCautious@@ -27,6 +28,8 @@ , sinkSystemTempFile , sinkHandle , sinkIOHandle+ , withSinkFile+ , withSinkFileBuilder -- ** Conduits , conduitFile , conduitHandle@@ -57,9 +60,11 @@ import qualified Data.ByteString.Lazy as L import Data.Conduit import Data.Conduit.List (sourceList, consume)+import qualified Data.Conduit.List as CL import Control.Exception (assert, finally) import Control.Monad (unless, when) import Control.Monad.IO.Class (liftIO, MonadIO)+import Control.Monad.IO.Unlift import Control.Monad.Trans.Resource (allocate, release) import Control.Monad.Trans.Class (lift) import qualified System.IO as IO@@ -88,6 +93,7 @@ import System.IO (hClose, openBinaryTempFile) import Control.Exception (throwIO, catch) import System.IO.Error (isDoesNotExistError)+import qualified Data.ByteString.Builder as BB -- | Stream the contents of a file as binary data. --@@ -589,3 +595,42 @@ data SinkStorableException = SinkStorableInsufficientBytes deriving (Show, Typeable) instance Exception SinkStorableException++-- | Like 'IO.withBinaryFile', but provides a source to read bytes from.+--+-- @since 1.2.1+withSourceFile+ :: (MonadUnliftIO m, MonadIO n)+ => FilePath+ -> (ConduitM i ByteString n () -> m a)+ -> m a+withSourceFile fp inner =+ withRunInIO $ \run ->+ IO.withBinaryFile fp IO.ReadMode $+ run . inner . sourceHandle++-- | Like 'IO.withBinaryFile', but provides a sink to write bytes to.+--+-- @since 1.2.1+withSinkFile+ :: (MonadUnliftIO m, MonadIO n)+ => FilePath+ -> (ConduitM ByteString o n () -> m a)+ -> m a+withSinkFile fp inner =+ withRunInIO $ \run ->+ IO.withBinaryFile fp IO.ReadMode $+ run . inner . sinkHandle++-- | Same as 'withSinkFile', but lets you use a 'BB.Builder'.+--+-- @since 1.2.1+withSinkFileBuilder+ :: (MonadUnliftIO m, MonadIO n)+ => FilePath+ -> (ConduitM BB.Builder o n () -> m a)+ -> m a+withSinkFileBuilder fp inner =+ withRunInIO $ \run ->+ IO.withBinaryFile fp IO.ReadMode $ \h ->+ run $ inner $ CL.mapM_ (liftIO . BB.hPutBuilder h)
+ Data/Conduit/Process/Typed.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE DataKinds #-}++-- | The "System.Process.Typed" module from @typed-process@, but with+-- added conduit helpers.+module Data.Conduit.Process.Typed+ ( -- * Conduit specific stuff+ createSink+ , createSource+ -- * Generalized functions+ , withProcess+ , withProcess_+ -- * Reexports+ , module System.Process.Typed+ ) where++import System.Process.Typed hiding (withProcess, withProcess_)+import qualified System.Process.Typed as P+import Data.Conduit (ConduitM)+import qualified Data.Conduit as C+import qualified Data.Conduit.Binary as CB+import Control.Monad.IO.Unlift+import qualified Data.ByteString as S+import System.IO (hClose)++-- | Provide input to a process by writing to a conduit.+--+-- @since 1.2.1+createSink :: MonadIO m => StreamSpec 'STInput (ConduitM S.ByteString o m ())+createSink =+ (\h -> C.addCleanup (\_ -> liftIO $ hClose h) (CB.sinkHandle h))+ `fmap` createPipe++-- | Read output from a process by read from a conduit.+--+-- @since 1.2.1+createSource :: MonadIO m => StreamSpec 'STOutput (ConduitM i S.ByteString m ())+createSource =+ (\h -> C.addCleanup (\_ -> liftIO $ hClose h) (CB.sourceHandle h))+ `fmap` createPipe++-- | Same as 'P.withProcess', but generalized to 'MonadUnliftIO'.+--+-- @since 1.2.1+withProcess+ :: MonadUnliftIO m+ => ProcessConfig stdin stdout stderr+ -> (Process stdin stdout stderr -> m a)+ -> m a+withProcess pc f = withRunInIO $ \run -> P.withProcess pc (run . f)++-- | Same as 'P.withProcess_', but generalized to 'MonadUnliftIO'.+--+-- @since 1.2.1+withProcess_+ :: MonadUnliftIO m+ => ProcessConfig stdin stdout stderr+ -> (Process stdin stdout stderr -> m a)+ -> m a+withProcess_ pc f = withRunInIO $ \run -> P.withProcess pc (run . f)
conduit-extra.cabal view
@@ -1,5 +1,5 @@ Name: conduit-extra-Version: 1.2.0+Version: 1.2.1 Synopsis: Batteries included conduit: adapters for common libraries. Description: The conduit package itself maintains relative small dependencies. The purpose of this package is to collect commonly used utility functions wrapping other library dependencies, without depending on heavier-weight dependencies. The basic idea is that this package should only depend on haskell-platform packages and conduit.@@ -33,6 +33,8 @@ Data.Conduit.Zlib if !os(windows) Exposed-modules: Data.Conduit.Network.Unix+ if impl(ghc >= 7.8)+ Exposed-modules: Data.Conduit.Process.Typed if arch(x86_64) || arch(i386) -- These architectures are able to perform unaligned memory accesses@@ -41,9 +43,7 @@ Build-depends: base >= 4.5 && < 5 , conduit >= 1.1 && < 1.3 - -- No version bounds necessary, since they're inherited- -- from conduit.- , bytestring+ , bytestring >= 0.10.2 , exceptions , monad-control , text@@ -61,6 +61,9 @@ , resourcet >= 1.1 , stm , streaming-commons >= 0.1.16+ , unliftio-core+ if impl(ghc >= 7.8)+ build-depends: typed-process >= 0.2 ghc-options: -Wall