{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NoFieldSelectors #-}
-- {-# OPTIONS_GHC -ddump-splices #-}
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)