-- | Helpful segment combinators.

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

-- | Extract the 'String' values from a segment.
strings :: Segment () -> Segment [String]
strings s = s $| conduit (CB.lines $= CL.map S8.unpack $= CL.consume)

-- | Extract the 'Text' values from a segment.
texts :: Segment () -> Segment [Text]
texts s = s $| conduit (CB.lines $= CL.map T.decodeUtf8 $= CL.consume)

-- | Ignore any output from a segment.
ignore :: Segment () -> Segment ()
ignore s = fmap (const ()) (s $| conduit (CL.consume))