henforcer-1.0.0.0: src/Henforcer/Rules/ConditionallyEnforced.hs
{- |
Module : Henforcer.Rules.ConditionallyEnforced
Description :
Copyright : (c) Flipstone Technology Partners, 2024-2026
License : MIT
Maintainer : maintainers@flipstone.com
-}
module Henforcer.Rules.ConditionallyEnforced
( ConditionallyEnforced (..)
, conditionallyEnforcedCodec
) where
import qualified Toml
-- | A more expressive 'Maybe'
data ConditionallyEnforced a
= Enforced !a
| NotEnforced
deriving (Eq, Show)
conditionallyEnforcedCodec ::
(Toml.Key -> Toml.TomlCodec a) -> Toml.Key -> Toml.TomlCodec (ConditionallyEnforced a)
{-# INLINEABLE conditionallyEnforcedCodec #-}
conditionallyEnforcedCodec underlyingCodec =
Toml.dimap maybeFromConditionallyEnforced conditionallyEnforcedFromMaybe
. Toml.dioptional
. underlyingCodec
conditionallyEnforcedFromMaybe :: Maybe a -> ConditionallyEnforced a
conditionallyEnforcedFromMaybe Nothing = NotEnforced
conditionallyEnforcedFromMaybe (Just x) = Enforced x
maybeFromConditionallyEnforced :: ConditionallyEnforced a -> Maybe a
maybeFromConditionallyEnforced NotEnforced = Nothing
maybeFromConditionallyEnforced (Enforced x) = Just x