packages feed

henforcer-1.0.0.0: src/Henforcer/Config/Config.hs

{- |
Module      : Henforcer.Config.Config
Description : Haskell representation of the toml configuration file that is used to define the checks to be enforced. As well as related functionality.
Copyright   : (c) Flipstone Technology Partners, 2023-2026
License     : MIT
Maintainer  : maintainers@flipstone.com
-}
module Henforcer.Config.Config
  ( Config (..)
  , loadConfig
  ) where

import qualified Toml

import qualified TomlHelper

import Henforcer.Config.ForAnyModule (ForAnyModule, emptyForAnyModule, forAnyModuleCodec)
import Henforcer.Config.ForPatternModule (ForPatternModules, forPatternModulesCodecField)
import Henforcer.Config.ForSpecifiedModule (ForSpecifiedModules, forSpecifiedModulesCodecField)

data Config = Config
  { forAnyModule :: !ForAnyModule
  , forPatternModules :: !ForPatternModules
  , forSpecifiedModules :: !ForSpecifiedModules
  }

configCodec :: Toml.TomlCodec Config
configCodec =
  Config
    <$> TomlHelper.addField
      "forAnyModule"
      forAnyModule
      (TomlHelper.setDefault emptyForAnyModule (Toml.table forAnyModuleCodec))
    <*> TomlHelper.addField
      "forPatternModules"
      forPatternModules
      forPatternModulesCodecField
    <*> TomlHelper.addField
      "forSpecifiedModules"
      forSpecifiedModules
      forSpecifiedModulesCodecField

loadConfig :: FilePath -> IO Config
loadConfig =
  Toml.decodeFile configCodec