packages feed

haskell-updater-1.4.1.0: Distribution/Gentoo/Types/HUMode.hs

{- |
   Module      : Distribution.Gentoo.Types.HUMode
   Description : Valid modes for haskell-updater

   This module houses a complex ADT which represents valid modes for
   haskell-updater. This is converted from @CmdLineArgs@ (in
   @Distribution.Gentoo.CmdLine.Types@), which represents
   possible options given on the command line.
 -}

module Distribution.Gentoo.Types.HUMode
    ( HUMode(..)
    , PkgManager(..)
    , RunMode(..)
    , runMode
    , Target(..)
    , ReinstallAtomsMode(..)
    , ReinstallAtomsTarget(..)
    ) where

import Distribution.Gentoo.Types

data HUMode
    = HelpMode
    | VersionMode
    | RunMode RunModifier PkgManager
    deriving (Eq, Ord, Show)

data PkgManager
    = Portage (Either RunMode ReinstallAtomsMode)
    | PkgCore RunMode
    | Paludis RunMode
    | CustomPM String RunMode
    deriving (Eq, Ord, Show)

data RunMode
    = BasicMode Target
    | ListMode Target
    deriving (Eq, Ord, Show)

data Target
    = OnlyInvalid
    | AllInstalled
    deriving (Eq, Ord, Show)

newtype ReinstallAtomsMode
    = ReinstallAtomsMode (Either Target ReinstallAtomsTarget)
    deriving (Eq, Ord, Show)

data ReinstallAtomsTarget
    = WorldTarget
    | CustomTargets CustomTargets
    deriving (Eq, Ord, Show)

runMode :: PkgManager -> Either RunMode ReinstallAtomsMode
runMode (Portage rm) = rm
runMode (PkgCore rm) = Left rm
runMode (Paludis rm) = Left rm
runMode (CustomPM _ rm) = Left rm