packages feed

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