{- | Module : HCovGuard.Config.ForAnyModule Description : Configuration that applies to all modules by default Copyright : (c) Trevis Elser, 2026 License : MIT Maintainer : oss@treviselser.com -} module HCovGuard.Config.ForAnyModule ( ForAnyModule (..) , emptyForAnyModule , forAnyModuleCodec ) where import qualified Toml import qualified HCovGuard.Config.Threshold as Threshold import qualified TomlHelper {- | Default coverage thresholds that apply to all modules unless overridden @since 0.1.0.0 -} data ForAnyModule = ForAnyModule { expressionThreshold :: !Threshold.CoverageThreshold , topLevelThreshold :: !Threshold.CoverageThreshold , alternativeThreshold :: !Threshold.CoverageThreshold , localThreshold :: !Threshold.CoverageThreshold } emptyForAnyModule :: ForAnyModule emptyForAnyModule = ForAnyModule { expressionThreshold = Threshold.CoverageThreshold Nothing Nothing , topLevelThreshold = Threshold.CoverageThreshold Nothing Nothing , alternativeThreshold = Threshold.CoverageThreshold Nothing Nothing , localThreshold = Threshold.CoverageThreshold Nothing Nothing } forAnyModuleCodec :: Toml.TomlCodec ForAnyModule forAnyModuleCodec = let emptyThreshold = Threshold.CoverageThreshold Nothing Nothing in ForAnyModule <$> TomlHelper.addField "expression" expressionThreshold (TomlHelper.setDefault emptyThreshold thresholdCodec) <*> TomlHelper.addField "topLevel" topLevelThreshold (TomlHelper.setDefault emptyThreshold thresholdCodec) <*> TomlHelper.addField "alternative" alternativeThreshold (TomlHelper.setDefault emptyThreshold thresholdCodec) <*> TomlHelper.addField "local" localThreshold (TomlHelper.setDefault emptyThreshold thresholdCodec) thresholdCodec :: Toml.Key -> Toml.TomlCodec Threshold.CoverageThreshold thresholdCodec = Toml.table thresholdTableCodec thresholdTableCodec :: Toml.TomlCodec Threshold.CoverageThreshold thresholdTableCodec = Threshold.CoverageThreshold <$> TomlHelper.addField "minimumCovered" Threshold.minimumCovered (Toml.dioptional . Toml.int) <*> TomlHelper.addField "maximumUncovered" Threshold.maximumUncovered (Toml.dioptional . Toml.int)