{-# LANGUAGE ApplicativeDo, OverloadedStrings #-}
module Client.Configuration.Macros
( macroMapSpec
, macroCommandSpec
) where
import Config.Schema.Spec
import Client.Commands.Interpolation
import Client.Commands.Recognizer
import Data.Maybe (fromMaybe)
import Data.Text (Text)
macroMapSpec :: ValueSpec (Recognizer Macro)
macroMapSpec = fromCommands <$> listSpec macroValueSpec
macroValueSpec :: ValueSpec (Text, Macro)
macroValueSpec = sectionsSpec "macro" $
do name <- reqSection "name" ""
spec <- fromMaybe noMacroArguments
<$> optSection' "arguments" macroArgumentsSpec ""
commands <- reqSection' "commands" (oneOrList macroCommandSpec) ""
return (name, Macro spec commands)
macroArgumentsSpec :: ValueSpec MacroSpec
macroArgumentsSpec = customSpec "macro-arguments" anySpec parseMacroSpecs
macroCommandSpec :: ValueSpec [ExpansionChunk]
macroCommandSpec = customSpec "macro-command" anySpec parseExpansion