module Data.Conduit.Shell.Segments where
import Control.Monad (void)
import qualified Data.ByteString.Char8 as S8
import Data.Conduit
import qualified Data.Conduit.List as CL
import qualified Data.Conduit.Binary as CB
import Data.Conduit.Shell.Process
import Data.Text (Text)
import qualified Data.Text.Encoding as T
import UnliftIO (MonadUnliftIO)
strings :: MonadUnliftIO m => Segment m () -> Segment m [String]
strings :: forall (m :: * -> *).
MonadUnliftIO m =>
Segment m () -> Segment m [String]
strings Segment m ()
s = Segment m ()
s Segment m () -> Segment m [String] -> Segment m [String]
forall (m :: * -> *) b.
MonadUnliftIO m =>
Segment m () -> Segment m b -> Segment m b
$| ConduitT ByteString ByteString m [String] -> Segment m [String]
forall a (m :: * -> *) r.
(a ~ ByteString, Monad m) =>
ConduitT a ByteString m r -> Segment m r
conduit (ConduitT ByteString ByteString m ()
forall (m :: * -> *).
Monad m =>
ConduitT ByteString ByteString m ()
CB.lines ConduitT ByteString ByteString m ()
-> ConduitT ByteString ByteString m [String]
-> ConduitT ByteString ByteString m [String]
forall (m :: * -> *) a b c r.
Monad m =>
ConduitM a b m () -> ConduitM b c m r -> ConduitM a c m r
.| (ByteString -> String) -> ConduitT ByteString String m ()
forall (m :: * -> *) a b. Monad m => (a -> b) -> ConduitT a b m ()
CL.map ByteString -> String
S8.unpack ConduitT ByteString String m ()
-> ConduitM String ByteString m [String]
-> ConduitT ByteString ByteString m [String]
forall (m :: * -> *) a b c r.
Monad m =>
ConduitM a b m () -> ConduitM b c m r -> ConduitM a c m r
.| ConduitM String ByteString m [String]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume)
texts :: MonadUnliftIO m => Segment m () -> Segment m [Text]
texts :: forall (m :: * -> *).
MonadUnliftIO m =>
Segment m () -> Segment m [Text]
texts Segment m ()
s = Segment m ()
s Segment m () -> Segment m [Text] -> Segment m [Text]
forall (m :: * -> *) b.
MonadUnliftIO m =>
Segment m () -> Segment m b -> Segment m b
$| ConduitT ByteString ByteString m [Text] -> Segment m [Text]
forall a (m :: * -> *) r.
(a ~ ByteString, Monad m) =>
ConduitT a ByteString m r -> Segment m r
conduit (ConduitT ByteString ByteString m ()
forall (m :: * -> *).
Monad m =>
ConduitT ByteString ByteString m ()
CB.lines ConduitT ByteString ByteString m ()
-> ConduitT ByteString ByteString m [Text]
-> ConduitT ByteString ByteString m [Text]
forall (m :: * -> *) a b c r.
Monad m =>
ConduitM a b m () -> ConduitM b c m r -> ConduitM a c m r
.| (ByteString -> Text) -> ConduitT ByteString Text m ()
forall (m :: * -> *) a b. Monad m => (a -> b) -> ConduitT a b m ()
CL.map ByteString -> Text
T.decodeUtf8 ConduitT ByteString Text m ()
-> ConduitM Text ByteString m [Text]
-> ConduitT ByteString ByteString m [Text]
forall (m :: * -> *) a b c r.
Monad m =>
ConduitM a b m () -> ConduitM b c m r -> ConduitM a c m r
.| ConduitM Text ByteString m [Text]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume)
ignore :: MonadUnliftIO m => Segment m () -> Segment m ()
ignore :: forall (m :: * -> *).
MonadUnliftIO m =>
Segment m () -> Segment m ()
ignore Segment m ()
s = Segment m [ByteString] -> Segment m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Segment m ()
s Segment m () -> Segment m [ByteString] -> Segment m [ByteString]
forall (m :: * -> *) b.
MonadUnliftIO m =>
Segment m () -> Segment m b -> Segment m b
$| ConduitT ByteString ByteString m [ByteString]
-> Segment m [ByteString]
forall a (m :: * -> *) r.
(a ~ ByteString, Monad m) =>
ConduitT a ByteString m r -> Segment m r
conduit ConduitT ByteString ByteString m [ByteString]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume)