{-# LANGUAGE FlexibleContexts #-}
module Iris.Colour.Formatting (
putStdoutColouredLn,
putStderrColouredLn,
putStdoutColoured,
putStderrColoured,
) where
import Control.Monad.IO.Class (MonadIO (..))
import Control.Monad.Reader (MonadReader)
import Data.Text (Text)
import qualified Data.Text.IO as T
import System.IO (stderr)
import Iris.Colour.Mode (ColourMode (..))
import Iris.Env (CliEnv (..), asksCliEnv)
import qualified Data.Text.IO as TIO
putStdoutColouredLn
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (Text -> Text)
-> Text
-> m ()
putStdoutColouredLn :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(Text -> Text) -> Text -> m ()
putStdoutColouredLn Text -> Text
formatWithColour Text
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
$ Text -> IO ()
T.putStrLn forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> Text
str
ColourMode
EnableColour -> Text -> Text
formatWithColour Text
str
putStderrColouredLn
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (Text -> Text)
-> Text
-> m ()
putStderrColouredLn :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(Text -> Text) -> Text -> m ()
putStderrColouredLn Text -> Text
formatWithColour Text
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 -> Text -> IO ()
T.hPutStrLn Handle
stderr forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> Text
str
ColourMode
EnableColour -> Text -> Text
formatWithColour Text
str
putStdoutColoured
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (Text -> Text)
-> Text
-> m ()
putStdoutColoured :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(Text -> Text) -> Text -> m ()
putStdoutColoured Text -> Text
formatWithColour Text
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
$ Text -> IO ()
TIO.putStr forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> Text
str
ColourMode
EnableColour -> Text -> Text
formatWithColour Text
str
putStderrColoured
:: ( MonadReader (CliEnv cmd appEnv) m
, MonadIO m
)
=> (Text -> Text)
-> Text
-> m ()
putStderrColoured :: forall cmd appEnv (m :: * -> *).
(MonadReader (CliEnv cmd appEnv) m, MonadIO m) =>
(Text -> Text) -> Text -> m ()
putStderrColoured Text -> Text
formatWithColour Text
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 -> Text -> IO ()
TIO.hPutStr Handle
stderr forall a b. (a -> b) -> a -> b
$ case ColourMode
colourMode of
ColourMode
DisableColour -> Text
str
ColourMode
EnableColour -> Text -> Text
formatWithColour Text
str