stack-0.0.1: src/main/Plugins/Commands.hs
-- | Using Plugins with SimpleOptions
module Plugins.Commands
( commandsFromPlugins
, commandFromPlugin
, findPlugins
, PluginException(..)
) where
import Control.Monad.Trans.Either (EitherT)
import Control.Monad.Trans.Writer (Writer)
import Data.Text (unpack)
import Plugins
import Options.Applicative.Simple
-- | Generate the "commands" argument to simpleOptions
-- based on available plugins.
commandsFromPlugins :: Plugins -> (Plugin -> a) -> EitherT a (Writer (Mod CommandFields a)) ()
commandsFromPlugins plugins f =
mapM_ (\p -> commandFromPlugin p (f p)) (listPlugins plugins)
-- | Convert a single plugin into a command.
commandFromPlugin :: Plugin -> a -> EitherT a (Writer (Mod CommandFields a)) ()
commandFromPlugin plugin a = addCommand
(unpack $ pluginName plugin)
(unpack $ pluginSummary plugin)
(const a)
(pure ())