packages feed

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

{- |
Module      : Henforcer.Config.TreeDependencies
Description : Functionality for specifying module trees that depend on other module trees.
Copyright   : (c) Flipstone Technology Partners, 2024-2026
License     : MIT
Maintainer  : maintainers@flipstone.com
-}
module Henforcer.Config.TreeDependencies
  ( TreeDependency (..)
  , treeDependencyCodec
  ) where

import qualified Toml

import qualified Henforcer.CodeStructure as CodeStructure
import qualified Henforcer.Rules as Rules
import qualified TomlHelper

{- | Type to allow us to specify when a subtree depends on other subtrees. Particularly this allows
for a relatively compact expression in the user facing TOML. This expression is why the module is
placed under 'Henforcer.Config' and not elsewhere such as 'Henforcer.Rules'.

@since 1.0.0.0
-}
data TreeDependency = TreeDependency
  { moduleTree :: !CodeStructure.ModuleTree
  , treeDependencies :: ![CodeStructure.ModuleTree]
  , treeDependencyNote :: !Rules.UserNote
  }

treeDependencyCodec :: Toml.TomlCodec TreeDependency
treeDependencyCodec =
  TreeDependency
    <$> TomlHelper.addField "moduleTree" moduleTree CodeStructure.moduleTreeCodec
    <*> TomlHelper.addField "dependencies" treeDependencies CodeStructure.moduleTreeListCodec
    <*> Rules.userNoteField treeDependencyNote