module Serokell.Util.ANSI
( Color(..)
, colorize
, colorizeDull
, withColoredMessages
) where
import Universum
import System.Console.ANSI (Color (..), ConsoleLayer (Foreground), SGR (Reset, SetColor),
setSGRCode)
import qualified System.Console.ANSI as ANSI
colorize :: Color -> Text -> Text
colorize = colorizeImpl ANSI.Vivid
colorizeDull :: Color -> Text -> Text
colorizeDull = colorizeImpl ANSI.Dull
colorizeImpl :: ANSI.ColorIntensity -> Color -> Text -> Text
colorizeImpl palete color msg =
toText (setSGRCode [SetColor Foreground palete color]) <>
msg <>
toText (setSGRCode [Reset])
withColoredMessages :: MonadIO m => Color -> Text -> m a -> m a
withColoredMessages color activity action = do
putStrLn (colorize color ("Entered " <> activity))
res <- action
putStrLn (colorize color ("Finished " <> activity))
return res