cfg-0.0.2.2: Type directed application configuration parsing and accessors
Copyright© Jonathan Lorimer 2023
LicenseMIT
Maintainerjonathanlorimer@pm.me
Stabilitystable
Safe HaskellNone
LanguageHaskell2010

Cfg.Env.Keys

Description

This module provides helper functions for manipulating the keys on our internal tree representation of a configuration; KeyTree.

These helper functions are generally oriented towards using environment variables as your configuration source.

Since: 0.0.2.0

Synopsis

Documentation

getEnvKey Source #

Arguments

:: Text

Separator

-> [Text]

List of keys

-> Text 

This function takes a separator and a list of keys and joins them from the end of the list to the beginning, interspersed with the provided separator.

>>> getEnvKey "_" ["A", "B", "C"]
"A_B_C"

Since: 0.0.1.0

getKeys :: KeyTree Text Text -> [[Text]] Source #

Folds a KeyTree from leaf to root, into distinct key paths. This is necessary for the way that hierarchical structures are represented in environment variables (i.e. "KEYA_SUBKEYA", "KEYA_SUBKEYB").

Here is a visual representation of how the keys would get folded

      A
     / \
    B   C

 [ [ A, B ]
 , [ A, C ]
 ]
>>> import KeyTree
>>> import Data.Map qualified as M
>>> getKeys $ Free $ M.singleton "A" $ Free (M.fromList [("B", Free M.empty), ("C", Free M.empty)])
[["A","B"],["A","C"]]

Since: 0.0.1.0

showEnvKeys' Source #

Arguments

:: Text

Separator

-> KeyTree Text Text

Configuration tree

-> [Text] 

Gets all the keys from a configuration tree, and flattens the hierarchy so that each key is prefixed with its path through the tree.

Accepts separator to individuate the key prefixes.

>>> import KeyTree
>>> import Data.Map qualified as M
>>> showEnvKeys' "-" $ Free $ M.singleton "A" $ Free (M.fromList [("B", Free M.empty), ("C", Free M.empty)])
["A-B","A-C"]

Since: 0.0.1.0

showEnvKeys :: forall {k} (a :: k). ConfigSource a => Text -> [Text] Source #

Same as showEnvKeys' but the KeyTree is generated via a configSource

>>> import GHC.Generics (Generic (..))
>>> import Cfg.Source (ConfigSource(..))
>>> import Cfg.Parser (ConfigParser(..))
>>> import Cfg.Deriving.Config (Config(..))
>>> import Cfg.Source.Default (DefaultSource(..))
>>> :{
data Sub = Sub { c :: Int, d :: Bool }
  deriving (Generic, Show, DefaultSource)
  deriving (ConfigSource, ConfigParser) via Config Sub
data TypeCon = DataCon { a :: Sub }
  deriving (Generic, Show, DefaultSource)
  deriving (ConfigSource, ConfigParser) via Config TypeCon
:}
>>> showEnvKeys @TypeCon "_"
["a_c","a_d"]

Since: 0.0.1.0