packages feed

trace-embrace-1.0.2: src/Debug/TraceEmbrace/Config/Type.hs

{-# 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
    { mode :: Columnar a SinkModeP SinkMode
    , version :: Columnar a (And (GreaterThan 0) (LessThan 2)) Int
    , traceMessage :: Columnar a IdPred (TraceMessageFormatG a)
    , levels :: Columnar a HaskellModulePrefixP [ LeveledModulePrefix ]
    , 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 = genericToEncoding defaultOptions
instance FromJSON YamlConfig
deriving instance Show YamlConfigMaybe
deriving instance Eq YamlConfigMaybe
instance ToJSON YamlConfigMaybe where
  toEncoding = genericToEncoding defaultOptions
instance FromJSON YamlConfigMaybe

instance Semigroup YamlConfigMaybe where
  a <> b =
    YamlConfig
    (a.mode <|> b.mode)
    (a.version <|> b.version)
    (a.traceMessage <> b.traceMessage)
    (a.levels <|> b.levels)
    (a.runtimeLevelsOverrideEnvVar <|> b.runtimeLevelsOverrideEnvVar)

data TraceEmbraceConfig
  = TraceEmbraceConfig
    { mode :: SinkMode
    , traceMessage :: TraceMessageFormat
    , levels :: T.StrictRadixTree TraceLevel
    , runtimeLevelsOverrideEnvVar :: EnvironmentVariable
    } deriving (Eq, Show, Generic)