{-# LANGUAGE NoImplicitPrelude   #-}
{-# LANGUAGE NoFieldSelectors    #-}
{-# LANGUAGE OverloadedRecordDot #-}

module Stack.Types.GlobalOpts
  ( GlobalOpts (..)
  , globalOptsBuildOptsMonoidL
  ) where

import          Stack.Prelude
import          Stack.Types.BuildOptsMonoid ( BuildOptsMonoid )
import          Stack.Types.ConfigMonoid ( ConfigMonoid (..) )
import          Stack.Types.DockerEntrypoint ( DockerEntrypoint )
import          Stack.Types.LockFileBehavior ( LockFileBehavior )
import          Stack.Types.Resolver ( AbstractResolver )
import          Stack.Types.StackYamlLoc ( StackYamlLoc )

-- | Parsed global command-line options.

data GlobalOpts = GlobalOpts
  { GlobalOpts -> Maybe String
reExecVersion :: !(Maybe String)
    -- ^ Expected re-exec in container version

  , GlobalOpts -> Maybe DockerEntrypoint
dockerEntrypoint :: !(Maybe DockerEntrypoint)
    -- ^ Data used when Stack is acting as a Docker entrypoint (internal use

    -- only)

  , GlobalOpts -> LogLevel
logLevel     :: !LogLevel -- ^ Log level

  , GlobalOpts -> Bool
timeInLog    :: !Bool -- ^ Whether to include timings in logs.

  , GlobalOpts -> Bool
rslInLog     :: !Bool
    -- ^ Whether to include raw snapshot layer (RSL) in logs.

  , GlobalOpts -> Bool
planInLog :: !Bool
    -- ^ Whether to include debug information about the construction of the

    -- build plan in logs.

  , GlobalOpts -> ConfigMonoid
configMonoid :: !ConfigMonoid
    -- ^ Config monoid, for passing into 'loadConfig'

  , GlobalOpts -> Maybe AbstractResolver
resolver     :: !(Maybe AbstractResolver) -- ^ Resolver override

  , GlobalOpts -> Maybe WantedCompiler
compiler     :: !(Maybe WantedCompiler) -- ^ Compiler override

  , GlobalOpts -> Bool
terminal     :: !Bool -- ^ We're in a terminal?

  , GlobalOpts -> StylesUpdate
stylesUpdate :: !StylesUpdate -- ^ SGR (Ansi) codes for styles

  , GlobalOpts -> Maybe Int
termWidthOpt  :: !(Maybe Int) -- ^ Terminal width override

  , GlobalOpts -> StackYamlLoc
stackYaml    :: !StackYamlLoc -- ^ Override project stack.yaml

  , GlobalOpts -> LockFileBehavior
lockFileBehavior :: !LockFileBehavior
  }
  deriving Int -> GlobalOpts -> ShowS
[GlobalOpts] -> ShowS
GlobalOpts -> String
(Int -> GlobalOpts -> ShowS)
-> (GlobalOpts -> String)
-> ([GlobalOpts] -> ShowS)
-> Show GlobalOpts
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GlobalOpts -> ShowS
showsPrec :: Int -> GlobalOpts -> ShowS
$cshow :: GlobalOpts -> String
show :: GlobalOpts -> String
$cshowList :: [GlobalOpts] -> ShowS
showList :: [GlobalOpts] -> ShowS
Show

globalOptsBuildOptsMonoidL :: Lens' GlobalOpts BuildOptsMonoid
globalOptsBuildOptsMonoidL :: Lens' GlobalOpts BuildOptsMonoid
globalOptsBuildOptsMonoidL =
    (GlobalOpts -> ConfigMonoid)
-> (GlobalOpts -> ConfigMonoid -> GlobalOpts)
-> Lens GlobalOpts GlobalOpts ConfigMonoid ConfigMonoid
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (.configMonoid) (\GlobalOpts
x ConfigMonoid
y -> GlobalOpts
x { configMonoid = y })
  ((ConfigMonoid -> f ConfigMonoid) -> GlobalOpts -> f GlobalOpts)
-> ((BuildOptsMonoid -> f BuildOptsMonoid)
    -> ConfigMonoid -> f ConfigMonoid)
-> (BuildOptsMonoid -> f BuildOptsMonoid)
-> GlobalOpts
-> f GlobalOpts
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ConfigMonoid -> BuildOptsMonoid)
-> (ConfigMonoid -> BuildOptsMonoid -> ConfigMonoid)
-> Lens ConfigMonoid ConfigMonoid BuildOptsMonoid BuildOptsMonoid
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (.buildOpts) (\ConfigMonoid
x BuildOptsMonoid
y -> ConfigMonoid
x { buildOpts = y })