module Ronn.Env
( Env (..)
, envToDefinition
, environmentSection
) where
import Prelude
import Data.List (intersperse)
import Data.Maybe (fromMaybe)
import Data.String (IsString (..))
import Ronn.AST
import Ronn.Argument
data Env = Env
{ Env -> [String]
vars :: [String]
, Env -> Maybe String
argument :: Maybe String
, Env -> Maybe String
default_ :: Maybe String
, Env -> Maybe RonnLine
help :: Maybe RonnLine
}
instance HasArgument Env where
getArgument :: Env -> Maybe String
getArgument = (.argument)
envToDefinition :: Env -> RonnDefinition
envToDefinition :: Env -> RonnDefinition
envToDefinition Env
env =
RonnDefinition
{ $sel:name:RonnDefinition :: RonnPart
name =
Text -> Env -> RonnPart -> RonnPart
forall a. HasArgument a => Text -> a -> RonnPart -> RonnPart
addArgument Text
"=" Env
env (RonnPart -> RonnPart) -> RonnPart -> RonnPart
forall a b. (a -> b) -> a -> b
$
[RonnPart] -> RonnPart
RonnConcat ([RonnPart] -> RonnPart) -> [RonnPart] -> RonnPart
forall a b. (a -> b) -> a -> b
$
RonnPart -> [RonnPart] -> [RonnPart]
forall a. a -> [a] -> [a]
intersperse RonnPart
"|" ([RonnPart] -> [RonnPart]) -> [RonnPart] -> [RonnPart]
forall a b. (a -> b) -> a -> b
$
(String -> RonnPart) -> [String] -> [RonnPart]
forall a b. (a -> b) -> [a] -> [b]
map (RonnPart -> RonnPart
RonnCode (RonnPart -> RonnPart)
-> (String -> RonnPart) -> String -> RonnPart
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> RonnPart
forall a. IsString a => String -> a
fromString) Env
env.vars
, $sel:description:RonnDefinition :: RonnLine
description = RonnLine -> Maybe RonnLine -> RonnLine
forall a. a -> Maybe a -> a
fromMaybe ([RonnPart] -> RonnLine
RonnLine []) Env
env.help
, $sel:content:RonnDefinition :: Maybe [RonnContent]
content = Maybe [RonnContent]
forall a. Maybe a
Nothing
}
environmentSection :: [Env] -> RonnSection
environmentSection :: [Env] -> RonnSection
environmentSection [Env]
envs =
RonnSection
{ $sel:name:RonnSection :: Text
name = Text
"ENVIRONMENT"
, $sel:content:RonnSection :: [RonnContent]
content = [[RonnDefinition] -> RonnContent
RonnDefinitions ([RonnDefinition] -> RonnContent)
-> [RonnDefinition] -> RonnContent
forall a b. (a -> b) -> a -> b
$ (Env -> RonnDefinition) -> [Env] -> [RonnDefinition]
forall a b. (a -> b) -> [a] -> [b]
map Env -> RonnDefinition
envToDefinition [Env]
envs]
}