{-# LANGUAGE FlexibleContexts #-}
module Iris.Colour.Formatting
( putStdoutColouredLn
, putStderrColouredLn
) where
import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.Reader (MonadReader)
import Data.ByteString (ByteString)
import System.IO (stderr)
import Iris.Colour.Mode (ColourMode (..))
import Iris.Env (CliEnv (..), asksCliEnv)
import qualified Data.ByteString.Char8 as BS8
putStdoutColouredLn
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (ByteString -> ByteString)
-> ByteString
-> m ()
putStdoutColouredLn :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(ByteString -> ByteString) -> ByteString -> m ()
putStdoutColouredLn ByteString -> ByteString
formatWithColour ByteString
str = do
ColourMode
colourMode <- forall cmd appEnv (m :: * -> *) field.
MonadReader (CliEnv cmd appEnv) m =>
(CliEnv cmd appEnv -> field) -> m field
asksCliEnv forall cmd appEnv. CliEnv cmd appEnv -> ColourMode
cliEnvStdoutColourMode
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ ByteString -> IO ()
BS8.putStrLn forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> ByteString
str
ColourMode
EnableColour -> ByteString -> ByteString
formatWithColour ByteString
str
putStderrColouredLn
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (ByteString -> ByteString)
-> ByteString
-> m ()
putStderrColouredLn :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(ByteString -> ByteString) -> ByteString -> m ()
putStderrColouredLn ByteString -> ByteString
formatWithColour ByteString
str = do
ColourMode
colourMode <- forall cmd appEnv (m :: * -> *) field.
MonadReader (CliEnv cmd appEnv) m =>
(CliEnv cmd appEnv -> field) -> m field
asksCliEnv forall cmd appEnv. CliEnv cmd appEnv -> ColourMode
cliEnvStderrColourMode
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Handle -> ByteString -> IO ()
BS8.hPutStrLn Handle
stderr forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> ByteString
str
ColourMode
EnableColour -> ByteString -> ByteString
formatWithColour ByteString
str