ronn-opt-env-conf-1.0.1.1: src/Ronn/OptEnvConf/Env.hs
-- |
--
-- Module : Ronn.OptEnvConf.Env
-- Copyright : (c) 2024 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Ronn.OptEnvConf.Env
( envDefinitions
) where
import Prelude
import Data.Foldable (toList)
import Data.List (intersperse)
import Data.String (IsString (..))
import OptEnvConf (Parser)
import OptEnvConf.Doc (AnyDocs (..), EnvDoc (..), parserEnvDocs)
import Ronn.AST
envDefinitions :: Parser a -> [Definition]
envDefinitions = go . parserEnvDocs
where
go :: AnyDocs EnvDoc -> [Definition]
go = \case
AnyDocsCommands {} -> [] -- TODO
AnyDocsAnd ds -> concatMap go ds
AnyDocsOr ds -> concatMap go ds
AnyDocsSingle d -> [envDocDefinition d]
envDocDefinition :: EnvDoc -> Definition
envDocDefinition doc =
Definition
{ name
, description = maybe [] (pure . fromString) $ envDocHelp doc
, content = Nothing
}
where
name =
Concat
$ addArgument
$ intersperse "|"
$ map (Code . fromString)
$ toList
$ envDocVars doc
addArgument = case envDocMetavar doc of
Nothing -> id
Just arg -> (<> ["=", Variable $ fromString arg])