-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Select a subset of RPM packages
--   
--   A library for selecting a subset of RPM (sub)packages.
@package select-rpms
@version 0.2.0

module SelectRPMs

-- | The Select type specifies the subpackage selection
data Select

-- | all packages
All :: Select

-- | interactive prompting
Ask :: Select
PkgsReq :: [String] -> [String] -> [String] -> [String] -> Select

-- | default package selection
selectDefault :: Select

-- | optparse-applicative Parser for Select
selectRpmsOptions :: Parser Select

-- | alternative CLI args option parsing to Select packages
installArgs :: String -> Select

-- | check package Select is not empty
checkSelection :: Monad m => Select -> m ()

-- | converts a list of RPM files to NVRA's, filtering out debug
--   subpackages
rpmsToNVRAs :: [String] -> [NVRA]

-- | current state of a package NVR
data Existence

-- | NVR is already installed
ExistingNVR :: Existence

-- | NVR is different to installed package
ChangedNVR :: Existence

-- | package is not currently installed
NotInstalled :: Existence

-- | combines Existence state with an NVRA
type ExistNVRA = (Existence, NVRA)

-- | sets prompt default behaviour for yes/no questions
data Yes
No :: Yes
Yes :: Yes

-- | how to handle already installed packages: re-install, skip, or default
--   update
--   
--   The default strategy is to select existing subpackages, otherwise all.
data ExistingStrategy
ExistingNoReinstall :: ExistingStrategy
ExistingSkip :: ExistingStrategy
ExistingOnly :: ExistingStrategy
existingStrategyOption :: Parser ExistingStrategy

-- | decide list of NVRs based on a Select selection (using a package
--   prefix)
decideRPMs :: Yes -> Bool -> Maybe ExistingStrategy -> Select -> String -> [NVRA] -> IO [ExistNVRA]

-- | render a NVRA as rpm file
nvraToRPM :: NVRA -> FilePath

-- | group rpms by arch (subdirs)
groupOnArch :: FilePath -> [ExistNVRA] -> [(FilePath, [ExistNVRA])]

-- | package manager
data PkgMgr
DNF3 :: PkgMgr
DNF5 :: PkgMgr
RPM :: PkgMgr
OSTREE :: PkgMgr

-- | do installation of packages
installRPMs :: Bool -> Bool -> Maybe PkgMgr -> Yes -> [(FilePath, [ExistNVRA])] -> IO ()
instance GHC.Classes.Eq SelectRPMs.Select
instance GHC.Classes.Eq SelectRPMs.ExistingStrategy
instance GHC.Classes.Eq SelectRPMs.Yes
instance GHC.Show.Show SelectRPMs.Existence
instance GHC.Classes.Ord SelectRPMs.Existence
instance GHC.Classes.Eq SelectRPMs.Existence
instance GHC.Classes.Eq SelectRPMs.PkgMgr
