azubi-0.2.0.2: src/Azubi/Core/Boot.hs
{-|
Module : Azubi.Core.Boot
Description : Functions to create an Azubi Programm
Copyright : (c) Ingolf Wagner, 2017
License : GPL-3
Maintainer : azubi@ingolf-wagner.de
Stability : experimental
Portability : POSIX
delivers functions you need for starting the
whole azubi process and parsing options from
the command line.
-}
module Azubi.Core.Boot where
import Options
import Azubi.Core.Model
import Azubi.Core.StateExecutor
import Azubi.Core.StateExecutors.LocalUnixStateExecutor hiding (runCommand)
{-|
The function you should use to get you commands running.
-}
azubiMain :: [State] -> IO ()
azubiMain states = do
context <- runCommand extractConfiguration
execute (config context) states
where
config context = check (optSystem context)
where
check Gentoo = (LocalContext $ UnixSystem verbosity)
check Debian = (LocalContext $ UnixSystem verbosity)
check Ubuntu = (LocalContext $ UnixSystem verbosity)
verbosity = if (optVerbose context)
then Verbose
else Silent
extractConfiguration :: AzubiOptions -> [String] -> IO AzubiOptions
extractConfiguration opts _ = return opts
data AzubiOptions = AzubiOptions { optVerbose :: Bool
, optSystem :: System
}
instance Options AzubiOptions where
defineOptions = pure AzubiOptions
<*> simpleOption "verbose" False "shows the commands output"
<*> defineOption (optionType_enum "Target System") systemConfig
descriptionHelper :: (Show a ) => [String] -> [ a ] -> String
descriptionHelper text (x:xs)= unwords $ text ++ ["[" ++ foldl (\a b -> a ++ ", " ++ (show b)) (show x) xs ++ "]" ]
descriptionHelper text [] = unwords text
data System = Gentoo
| Debian
| Ubuntu
deriving (Show, Eq, Bounded, Enum)
systemConfig :: Option System -> Option System
systemConfig opt =
opt{ optionLongFlags = ["system"]
, optionDefault = Gentoo
, optionDescription =
descriptionHelper
[ "The System type the States should"
, "be enforced on. Different Systems have"
, "different commands"]
[Gentoo ..]
}