-- | -- Module : System.Wlog.Color -- Copyright : (c) Serokell, 2016 -- License : GPL-3 (see the file LICENSE) -- Maintainer : Serokell -- Stability : experimental -- Portability : POSIX, GHC -- -- Colorizing utilities for log messages. -- Messages are colored depending on used serverity. module System.Wlog.Color ( colorizer , colorizerBuilder ) where import qualified Data.Text as T import Data.Text.Lazy.Builder as B import System.Console.ANSI (Color (Blue, Green, Magenta, Red, Yellow), ColorIntensity (Vivid), ConsoleLayer (Foreground), SGR (Reset, SetColor), setSGRCode) import Universum import System.Wlog.Severity (Severity (..)) -- | Defines pre- and post-printed characters for printing colorized text. table :: Severity -> (String, String) table severity = case severity of Error -> (setColor Red , reset) Debug -> (setColor Green , reset) Notice -> (setColor Magenta , reset) Warning -> (setColor Yellow , reset) Info -> (setColor Blue , reset) where setColor color = setSGRCode [SetColor Foreground Vivid color] reset = setSGRCode [Reset] -- | Colorizes "Text". colorizer :: Severity -> Text -> Text colorizer pr s = let (before, after) = table pr in T.pack before <> s <> T.pack after colorizerBuilder :: Severity -> Builder -> Builder colorizerBuilder pr s = let (before, after) = table pr in B.fromText (T.pack before) <> s <> B.fromText (T.pack after)