{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoFieldSelectors #-}
module Debug.TraceEmbrace.Config.Type
( module E
, YamlConfigG (..)
, YamlConfig
, YamlConfigMaybe
, TraceEmbraceConfig (..)
) where
import Control.Applicative
import Control.Lens hiding (levels)
import Data.Aeson hiding (Error)
import Data.Generics.Labels ()
import Data.RadixTree.Word8.Strict qualified as T
import Debug.TraceEmbrace.Config.Type.Mode as E
import Debug.TraceEmbrace.Config.Type.EnvVar as E
import Debug.TraceEmbrace.Config.Type.Level as E
import Debug.TraceEmbrace.Config.Type.TraceMessage as E
import Debug.TraceEmbrace.Config.Validation
import GHC.Generics
import Refined
data YamlConfigG a
= YamlConfig
{ forall (a :: * -> *).
YamlConfigG a -> Columnar a SinkModeP SinkMode
mode :: Columnar a SinkModeP SinkMode
, forall (a :: * -> *).
YamlConfigG a -> Columnar a (And (GreaterThan 0) (LessThan 2)) Int
version :: Columnar a (And (GreaterThan 0) (LessThan 2)) Int
, forall (a :: * -> *).
YamlConfigG a -> Columnar a IdPred (TraceMessageFormatG a)
traceMessage :: Columnar a IdPred (TraceMessageFormatG a)
, forall (a :: * -> *).
YamlConfigG a
-> Columnar a HaskellModulePrefixP [LeveledModulePrefix]
levels :: Columnar a HaskellModulePrefixP [ LeveledModulePrefix ]
, forall (a :: * -> *).
YamlConfigG a
-> Columnar a EnvironmentVariableP EnvironmentVariable
runtimeLevelsOverrideEnvVar :: Columnar a EnvironmentVariableP EnvironmentVariable
}
type YamlConfig = YamlConfigG Identity
type YamlConfigMaybe = YamlConfigG Maybe
deriving instance Generic YamlConfigMaybe
deriving instance Generic YamlConfig
deriving instance Show YamlConfig
deriving instance Eq YamlConfig
instance ToJSON YamlConfig where
toEncoding :: YamlConfig -> Encoding
toEncoding = Options -> YamlConfig -> Encoding
forall a.
(Generic a, GToJSON' Encoding Zero (Rep a)) =>
Options -> a -> Encoding
genericToEncoding Options
defaultOptions
instance FromJSON YamlConfig
deriving instance Show YamlConfigMaybe
deriving instance Eq YamlConfigMaybe
instance ToJSON YamlConfigMaybe where
toEncoding :: YamlConfigMaybe -> Encoding
toEncoding = Options -> YamlConfigMaybe -> Encoding
forall a.
(Generic a, GToJSON' Encoding Zero (Rep a)) =>
Options -> a -> Encoding
genericToEncoding Options
defaultOptions
instance FromJSON YamlConfigMaybe
instance Semigroup YamlConfigMaybe where
YamlConfigMaybe
a <> :: YamlConfigMaybe -> YamlConfigMaybe -> YamlConfigMaybe
<> YamlConfigMaybe
b =
Columnar Maybe SinkModeP SinkMode
-> Columnar Maybe (And (GreaterThan 0) (LessThan 2)) Int
-> Columnar Maybe IdPred (TraceMessageFormatG Maybe)
-> Columnar Maybe HaskellModulePrefixP [LeveledModulePrefix]
-> Columnar Maybe EnvironmentVariableP EnvironmentVariable
-> YamlConfigMaybe
forall (a :: * -> *).
Columnar a SinkModeP SinkMode
-> Columnar a (And (GreaterThan 0) (LessThan 2)) Int
-> Columnar a IdPred (TraceMessageFormatG a)
-> Columnar a HaskellModulePrefixP [LeveledModulePrefix]
-> Columnar a EnvironmentVariableP EnvironmentVariable
-> YamlConfigG a
YamlConfig
(YamlConfigMaybe
a.mode Maybe SinkMode -> Maybe SinkMode -> Maybe SinkMode
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> YamlConfigMaybe
b.mode)
(YamlConfigMaybe
a.version Maybe Int -> Maybe Int -> Maybe Int
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> YamlConfigMaybe
b.version)
(YamlConfigMaybe
a.traceMessage Maybe (TraceMessageFormatG Maybe)
-> Maybe (TraceMessageFormatG Maybe)
-> Maybe (TraceMessageFormatG Maybe)
forall a. Semigroup a => a -> a -> a
<> YamlConfigMaybe
b.traceMessage)
(YamlConfigMaybe
a.levels Maybe [LeveledModulePrefix]
-> Maybe [LeveledModulePrefix] -> Maybe [LeveledModulePrefix]
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> YamlConfigMaybe
b.levels)
(YamlConfigMaybe
a.runtimeLevelsOverrideEnvVar Maybe EnvironmentVariable
-> Maybe EnvironmentVariable -> Maybe EnvironmentVariable
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> YamlConfigMaybe
b.runtimeLevelsOverrideEnvVar)
data TraceEmbraceConfig
= TraceEmbraceConfig
{ TraceEmbraceConfig -> SinkMode
mode :: SinkMode
, TraceEmbraceConfig -> TraceMessageFormatG Identity
traceMessage :: TraceMessageFormat
, TraceEmbraceConfig -> StrictRadixTree TraceLevel
levels :: T.StrictRadixTree TraceLevel
, TraceEmbraceConfig -> EnvironmentVariable
runtimeLevelsOverrideEnvVar :: EnvironmentVariable
} deriving (TraceEmbraceConfig -> TraceEmbraceConfig -> Bool
(TraceEmbraceConfig -> TraceEmbraceConfig -> Bool)
-> (TraceEmbraceConfig -> TraceEmbraceConfig -> Bool)
-> Eq TraceEmbraceConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TraceEmbraceConfig -> TraceEmbraceConfig -> Bool
== :: TraceEmbraceConfig -> TraceEmbraceConfig -> Bool
$c/= :: TraceEmbraceConfig -> TraceEmbraceConfig -> Bool
/= :: TraceEmbraceConfig -> TraceEmbraceConfig -> Bool
Eq, Int -> TraceEmbraceConfig -> ShowS
[TraceEmbraceConfig] -> ShowS
TraceEmbraceConfig -> String
(Int -> TraceEmbraceConfig -> ShowS)
-> (TraceEmbraceConfig -> String)
-> ([TraceEmbraceConfig] -> ShowS)
-> Show TraceEmbraceConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TraceEmbraceConfig -> ShowS
showsPrec :: Int -> TraceEmbraceConfig -> ShowS
$cshow :: TraceEmbraceConfig -> String
show :: TraceEmbraceConfig -> String
$cshowList :: [TraceEmbraceConfig] -> ShowS
showList :: [TraceEmbraceConfig] -> ShowS
Show, (forall x. TraceEmbraceConfig -> Rep TraceEmbraceConfig x)
-> (forall x. Rep TraceEmbraceConfig x -> TraceEmbraceConfig)
-> Generic TraceEmbraceConfig
forall x. Rep TraceEmbraceConfig x -> TraceEmbraceConfig
forall x. TraceEmbraceConfig -> Rep TraceEmbraceConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TraceEmbraceConfig -> Rep TraceEmbraceConfig x
from :: forall x. TraceEmbraceConfig -> Rep TraceEmbraceConfig x
$cto :: forall x. Rep TraceEmbraceConfig x -> TraceEmbraceConfig
to :: forall x. Rep TraceEmbraceConfig x -> TraceEmbraceConfig
Generic)