packages feed

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 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