stackctl-1.2.0.0: src/Stackctl/ColorOption.hs
module Stackctl.ColorOption
( ColorOption(..)
, defaultColorOption
, HasColorOption(..)
, colorOption
, colorHandle
) where
import Stackctl.Prelude
import Blammo.Logging.LogSettings
import Data.Semigroup (Last(..))
import Options.Applicative
newtype ColorOption = ColorOption
{ unColorOption :: LogColor
}
deriving Semigroup via Last ColorOption
defaultColorOption :: ColorOption
defaultColorOption = ColorOption LogColorAuto
class HasColorOption env where
colorOptionL :: Lens' env ColorOption
instance HasColorOption ColorOption where
colorOptionL = id
colorOption :: Parser ColorOption
colorOption = option (eitherReader $ fmap ColorOption . readLogColor) $ mconcat
[ long "color"
, help "When to colorize output"
, metavar "auto|always|never"
, value defaultColorOption
, showDefaultWith showColorOption
]
showColorOption :: ColorOption -> String
showColorOption co = case unColorOption co of
LogColorAuto -> "auto"
LogColorAlways -> "always"
LogColorNever -> "never"
colorHandle :: MonadIO m => Handle -> ColorOption -> m Bool
colorHandle h co = shouldColorHandle settings h
where settings = setLogSettingsColor (unColorOption co) defaultLogSettings