packages feed

cfg-0.0.1.0: src/Cfg/Env/Keys.hs

module Cfg.Env.Keys where

import Data.Text (Text)
import Data.Tree (Tree, foldTree)
import Cfg.Source (RootConfig (..))
import Data.List (intersperse)

-- | @since 0.0.1.0
getEnvKey :: Text -> [Text] -> Text
getEnvKey sep = foldr mappend "" . intersperse sep

-- | @since 0.0.1.0
getKeys :: Tree Text -> [[Text]]
getKeys = foldTree f
 where
  f :: Text -> [[[Text]]] -> [[Text]]
  f label [] = [[label]]
  f label xs = concat $ fmap (label :) <$> xs

-- | @since 0.0.1.0
showEnvKeys' :: Text -> Tree Text -> [Text]
showEnvKeys' sep tree = getEnvKey sep <$> getKeys tree

-- | @since 0.0.1.0
showEnvKeys :: forall a. (RootConfig a) => Text -> [Text]
showEnvKeys sep = getEnvKey sep <$> (getKeys $ toRootConfig @a)