cab-0.0.0: Types.hs
module Types where
import Data.Maybe
----------------------------------------------------------------
data Command = Sync
| Install
| Uninstall
| Installed
| Configure
| Build
| Clean
| Outdated
| Sdist
| Unpack
| Info
| Deps
| RevDeps
| Check
| Search
| Help
deriving (Eq,Show)
data CommandSpec = CommandSpec {
command :: Command
, commandNames :: [String]
, document :: String
, routing :: Route
, options :: [(Option, Maybe String)]
, manual :: Maybe String
}
type CommandDB = [CommandSpec]
----------------------------------------------------------------
data Option = OptNoHarm
| OptRecursive
| OptAll
deriving (Eq,Show)
data OptionSpec = OptionSpec {
option :: Option
, optionNames :: [String]
, optionDesc :: String
}
type OptionDB = [OptionSpec]
data Flags = Flags {
noHarmFlag :: Bool
, noHarmOption :: Maybe String
, recursiveFlag :: Bool
, recursiveOption :: Maybe String
, allFlag :: Bool
, allOption :: Maybe String
}
defaultFlags :: Flags
defaultFlags = Flags {
noHarmFlag = False
, noHarmOption = Nothing
, recursiveFlag = False
, recursiveOption = Nothing
, allFlag = False
, allOption = Nothing
}
updateFlags :: Option -> Maybe String -> Flags -> Flags
updateFlags OptNoHarm val flg = flg {
noHarmFlag = True
, noHarmOption = val
}
updateFlags OptRecursive val flg = flg {
recursiveFlag = True
, recursiveOption = val
}
updateFlags OptAll val flg = flg {
allFlag = True
, allOption = val
}
flagsToOptions :: Flags -> [String]
flagsToOptions flags = catMaybes [
noHarmOption flags
, recursiveOption flags
, allOption flags
]
----------------------------------------------------------------
type FunctionCommand = CommandSpec -> [String] -> Flags -> IO ()
data Route = RouteFunc FunctionCommand
| RouteProc String [String]
----------------------------------------------------------------