module Data.Conduit.Shell.Segments where
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
strings :: Segment () -> Segment [String]
strings :: Segment () -> Segment [String]
strings s :: Segment ()
s = Segment ()
s Segment () -> Segment [String] -> Segment [String]
forall b. Segment () -> Segment b -> Segment b
$| ConduitT ByteString ByteString IO [String] -> Segment [String]
forall a (m :: * -> *) r.
(a ~ ByteString, m ~ IO) =>
ConduitT a ByteString m r -> Segment r
conduit (ConduitT ByteString ByteString IO ()
forall (m :: * -> *).
Monad m =>
ConduitT ByteString ByteString m ()
CB.lines ConduitT ByteString ByteString IO ()
-> ConduitT ByteString ByteString IO [String]
-> ConduitT ByteString ByteString IO [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 IO ()
forall (m :: * -> *) a b. Monad m => (a -> b) -> ConduitT a b m ()
CL.map ByteString -> String
S8.unpack ConduitT ByteString String IO ()
-> ConduitM String ByteString IO [String]
-> ConduitT ByteString ByteString IO [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 IO [String]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume)
texts :: Segment () -> Segment [Text]
texts :: Segment () -> Segment [Text]
texts s :: Segment ()
s = Segment ()
s Segment () -> Segment [Text] -> Segment [Text]
forall b. Segment () -> Segment b -> Segment b
$| ConduitT ByteString ByteString IO [Text] -> Segment [Text]
forall a (m :: * -> *) r.
(a ~ ByteString, m ~ IO) =>
ConduitT a ByteString m r -> Segment r
conduit (ConduitT ByteString ByteString IO ()
forall (m :: * -> *).
Monad m =>
ConduitT ByteString ByteString m ()
CB.lines ConduitT ByteString ByteString IO ()
-> ConduitT ByteString ByteString IO [Text]
-> ConduitT ByteString ByteString IO [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 IO ()
forall (m :: * -> *) a b. Monad m => (a -> b) -> ConduitT a b m ()
CL.map ByteString -> Text
T.decodeUtf8 ConduitT ByteString Text IO ()
-> ConduitM Text ByteString IO [Text]
-> ConduitT ByteString ByteString IO [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 IO [Text]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume)
ignore :: Segment () -> Segment ()
ignore :: Segment () -> Segment ()
ignore s :: Segment ()
s = ([ByteString] -> ()) -> Segment [ByteString] -> Segment ()
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (() -> [ByteString] -> ()
forall a b. a -> b -> a
const ()) (Segment ()
s Segment () -> Segment [ByteString] -> Segment [ByteString]
forall b. Segment () -> Segment b -> Segment b
$| ConduitT ByteString ByteString IO [ByteString]
-> Segment [ByteString]
forall a (m :: * -> *) r.
(a ~ ByteString, m ~ IO) =>
ConduitT a ByteString m r -> Segment r
conduit (ConduitT ByteString ByteString IO [ByteString]
forall (m :: * -> *) a o. Monad m => ConduitT a o m [a]
CL.consume))