packages feed

stackctl-1.1.0.0: src/Stackctl/VerboseOption.hs

module Stackctl.VerboseOption
  ( Verbosity
  , verbositySetLogLevels
  , HasVerboseOption(..)
  , verboseOption
  ) where

import Stackctl.Prelude

import Blammo.Logging.LogSettings.LogLevels
import Options.Applicative

newtype Verbosity = Verbosity [()]

verbositySetLogLevels :: Verbosity -> (LogSettings -> LogSettings)
verbositySetLogLevels (Verbosity bs) = case bs of
  [] -> id
  [_] -> setLogSettingsLevels v
  [_, _] -> setLogSettingsLevels vv
  _ -> setLogSettingsLevels vvv
 where
  v = newLogLevels LevelDebug [("Amazonka", LevelInfo)]
  vv = newLogLevels LevelDebug []
  vvv = newLogLevels (LevelOther "trace") []

class HasVerboseOption env where
  verboseOptionL :: Lens' env Verbosity

instance HasVerboseOption Verbosity where
  verboseOptionL = id

verboseOption :: Parser Verbosity
verboseOption = fmap Verbosity $ many $ flag' () $ mconcat
  [ short 'v'
  , long "verbose"
  , help "Increase verbosity (can be passed multiple times)"
  ]