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


-- | Koji buildsystem XML-RPC API bindings
--   
--   This library provides Haskell bindings to the Koji XML RPC API. Koji
--   is a distributed rpm buildsystem used by Fedora, Centos, Red Hat, and
--   other projects. See <a>https://pagure.io/koji/</a>.
@package koji
@version 0.0.2


-- | Low level XMLRPC API based directly on the python API since that is
--   the only available reference documentation:
--   <a>https://koji.fedoraproject.org/koji/api</a>.
--   
--   Note that many of the procedures in this module are untested and
--   experimental: particularly most of those that return a Value.
--   
--   Higher level wrapper procedures live in Distribution.Koji.
--   
--   Fixes and enhancements welcome.
module Distribution.Koji.API

-- | info is either an id or string
data Info
InfoID :: Int -> Info
InfoString :: String -> Info

-- | Low-level variadic XML RPC call to a Koji Hub
koji :: Remote a => String -> String -> a

-- | Say hello to test XMLRPC connection to Koji Hub
hello :: String -> IO String

-- | checkTagAccess(tag_id, user_id=None)
checkTagAccess :: String -> Int -> Int -> IO Value

-- | checkTagPackage(tag, pkg)
checkTagPackage :: String -> Info -> Info -> IO Bool

-- | getAPIVersion()
getAPIVersion :: String -> IO String

-- | getActiveRepos()
getActiveRepos :: String -> IO Value

-- | getAllArches
getAllArches :: String -> IO Value

-- | getAllPerms
getAllPerms :: String -> IO [Struct]

-- | getArchive(archive_id, strict=False)
getArchive :: String -> Int -> IO (Maybe Struct)

-- | getArchiveFile(archive_id, filename, strict=False)
getArchiveFile :: String -> Int -> FilePath -> IO (Maybe Struct)

-- | getArchiveType(filename=None, type_name=None, type_id=None,
--   strict=False)
getArchiveType :: String -> Maybe FilePath -> Maybe String -> Maybe Int -> IO Value

-- | getArchiveTypes()
getArchiveTypes :: String -> IO Value

-- | getAverageBuildDuration pkginfo
getAverageBuildDuration :: String -> Info -> IO Value

-- | getBuild(buildInfo, strict=False)
getBuild :: String -> Info -> IO (Maybe Struct)

-- | getBuildConfig tag
getBuildConfig :: String -> String -> IO Value

-- | getBuildLogs build
getBuildLogs :: String -> Info -> IO Value

-- | getBuildTarget info
getBuildTarget :: String -> String -> IO Value

-- | getBuildTargets info event buildTagID destTagID
getBuildTargets :: String -> Maybe Info -> Maybe Int -> Maybe Int -> Maybe Int -> IO Value

-- | getBuildType buildinfo
getBuildType :: String -> Info -> IO Value

-- | getBuildroot buildrootId
getBuildroot :: String -> Int -> IO Value

-- | getBuildrootListing buildrootId
getBuildrootListing :: String -> Int -> IO Value

-- | getChangelogEntries(buildID=None, taskID=None, filepath=None,
--   author=None, before=None, after=None, queryOpts=None)
getChangelogEntries :: String -> Maybe Int -> Maybe Int -> Maybe FilePath -> Maybe String -> Maybe String -> Maybe String -> IO [Struct]

-- | getChannel channelinfo
getChannel :: String -> Info -> IO Value

-- | getEvent eventid
getEvent :: String -> Int -> IO Struct

-- | getExternalRepo info
getExternalRepo :: String -> Info -> Maybe Int -> IO Struct

-- | getExternalRepoList(tag_info, event=None)
getExternalRepoList :: String -> Info -> Maybe Int -> IO [Struct]

-- | getFullInheritance(tag, event=None, reverse=False, stops=None,
--   jumps=None)
getFullInheritance :: String -> String -> Maybe Int -> Bool -> IO Value

-- | getGlobalInheritance(event=None)
getGlobalInheritance :: String -> Maybe Int -> IO Value

-- | getGroupMembers(group)
getGroupMembers :: String -> String -> IO Value

-- | getHost(hostInfo, strict=False, event=None)
getHost :: String -> Info -> Maybe Int -> IO Struct

-- | getImageArchive(archive_id, strict=False)
getImageArchive :: String -> Int -> IO Struct

-- | getImageBuild(buildInfo, strict=False)
getImageBuild :: String -> Info -> IO Struct

-- | getInheritanceData(tag, event=None)
getInheritanceData :: String -> String -> Maybe Int -> IO Value

-- | getLastEvent(before=None)
getLastEvent :: String -> Maybe Int -> IO Value

-- | getLastHostUpdate(hostID)
getLastHostUpdate :: String -> Int -> IO Value

-- | getLatestBuilds(tag, event=None, package=None, type=None)
--   
--   List latest builds for tag (inheritance enabled)
getLatestBuilds :: String -> Info -> Maybe Int -> Maybe String -> Maybe String -> IO [Struct]

-- | getLatestMavenArchives(tag, event=None, inherit=True)
getLatestMavenArchives :: String -> String -> Maybe Int -> Bool -> IO Value

-- | getLatestRPMS(tag, package=None, arch=None, event=None, rpmsigs=False,
--   type=None)
getLatestRPMS :: String -> String -> Maybe String -> Maybe String -> Maybe Int -> Bool -> Maybe String -> IO Value

-- | getMavenArchive(archive_id, strict=False)
getMavenArchive :: String -> Int -> IO Struct

-- | getMavenBuild(buildInfo, strict=False)
getMavenBuild :: String -> Info -> IO Struct

-- | getNextRelease(build_info)
--   
--   find the last successful or deleted build of this N-V. If building is
--   specified, skip also builds in progress
getNextRelease :: String -> Info -> IO Value

-- | getPackage(info, strict=False, create=False)
--   
--   Get the id,name for package
getPackage :: String -> Info -> IO Value

-- | getPackageConfig(tag, pkg, event=None)
--   
--   Get config for package in tag
getPackageConfig :: String -> String -> String -> Maybe Int -> IO Value

-- | getPackageID(name, strict=False)
--   
--   Get package ID by name.
getPackageID :: String -> String -> IO (Maybe Int)

-- | getRPM(rpminfo, strict=False, multi=False)
getRPM :: String -> Info -> IO Struct

-- | getRPMDeps(rpmID, depType=None, queryOpts=None, strict=False)
getRPMDeps :: String -> Int -> Maybe String -> IO [Struct]

-- | getRPMFile(rpmID, filename, strict=False)
getRPMFile :: String -> Int -> FilePath -> IO Struct

-- | getRPMHeaders(rpmID=None, taskID=None, filepath=None, headers=None)
getRPMHeaders :: String -> Maybe Int -> Maybe Int -> Maybe FilePath -> Maybe Value -> IO Struct

-- | getRepo(tag, state=None, event=None, dist=False)
getRepo :: String -> String -> Maybe Int -> Maybe Int -> Bool -> IO Value

-- | getTag(tagInfo, strict=False, event=None)
getTag :: String -> Info -> Maybe Int -> IO Struct

-- | getTagExternalRepos(tag_info=None, repo_info=None, event=None)
getTagExternalRepos :: String -> Maybe Info -> Maybe Info -> Maybe Int -> IO Struct

-- | getTagGroups(tag, event=None, inherit=True, incl_pkgs=True,
--   incl_reqs=True, incl_blocked=False)
getTagGroups :: String -> String -> Maybe Int -> Bool -> Bool -> Bool -> Bool -> IO Value

-- | getTagID(info, strict=False, create=False)
getTagID :: String -> Info -> IO (Maybe Int)

-- | getTaskChildren(task_id, request=False, strict=False)
getTaskChildren :: String -> Int -> Bool -> IO [Struct]

-- | getTaskDescendents(task_id, request=False)
getTaskDescendents :: String -> Int -> Bool -> IO Struct

-- | getTaskInfo(task_id, request=False, strict=False)
getTaskInfo :: String -> Int -> Bool -> IO (Maybe Struct)

-- | getTaskRequest(taskId)
getTaskRequest :: String -> Int -> IO Value

-- | getTaskResult(taskId, raise_fault=True)
getTaskResult :: String -> Int -> IO Value

-- | getUser(userInfo=None, strict=False, krb_princs=True)
getUser :: String -> Info -> Bool -> IO (Maybe Struct)

-- | getUserPerms(userID=None)
getUserPerms :: String -> Maybe Info -> IO Value

-- | getVolume(volume, strict=False)
getVolume :: String -> Info -> IO Value

-- | getWinArchive(archive_id, strict=False)
getWinArchive :: String -> Int -> IO Struct

-- | getWinBuild(buildInfo, strict=False)
getWinBuild :: String -> Info -> IO (Maybe Struct)

-- | listArchiveFiles(archive_id, queryOpts=None, strict=False)
listArchiveFiles :: String -> Int -> IO [Struct]

-- | listArchives(buildID=None, buildrootID=None,
--   componentBuildrootID=None, hostID=None, type=None, filename=None,
--   size=None, checksum=None, typeInfo=None, queryOpts=None, imageID=None,
--   archiveID=None, strict=False)
listArchives :: String -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe String -> Maybe FilePath -> Maybe Int -> Maybe String -> Maybe Info -> Maybe Int -> Maybe Int -> IO [Struct]

-- | listBTypes(query=None, queryOpts=None)
listBTypes :: String -> Value -> IO Value

-- | listBuildRPMs(build)
listBuildRPMs :: String -> Int -> IO [Struct]

-- | listBuildroots(hostID=None, tagID=None, state=None, rpmID=None,
--   archiveID=None, taskID=None, buildrootID=None, queryOpts=None)
listBuildroots :: String -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> IO Value

-- | listBuilds(packageID=None, userID=None, taskID=None, prefix=None,
--   state=None, volumeID=None, source=None, createdBefore=None,
--   createdAfter=None, completeBefore=None, completeAfter=None, type=None,
--   typeInfo=None, queryOpts=None, pattern=None)
--   
--   Note that pattern is only supported for koji &gt;= 1.24
listBuilds :: String -> Struct -> IO [Struct]

-- | listCGs()
listCGs :: String -> IO Struct

-- | listChannels(hostID=None, event=None)
listChannels :: String -> Maybe Int -> Maybe Int -> IO Value

-- | listExternalRepos(info=None, url=None, event=None, queryOpts=None)
listExternalRepos :: String -> Maybe Info -> Maybe String -> Maybe Int -> IO Value

-- | listHosts(arches=None, channelID=None, ready=None, enabled=None,
--   userID=None, queryOpts=None)
listHosts :: String -> Maybe Value -> Maybe Int -> Bool -> Bool -> Maybe Int -> IO Value

-- | listPackages(tagID=None, userID=None, pkgID=None, prefix=None,
--   inherited=False, with_dups=False, event=None, queryOpts=None)
listPackages :: String -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe String -> Bool -> Bool -> Maybe Int -> IO [Struct]

-- | listPackagesSimple prefix
listPackagesSimple :: String -> String -> IO [Struct]

-- | listRPMFiles(rpmID, queryOpts=None)
listRPMFiles :: String -> Int -> IO [Struct]

-- | listRPMs(buildID=None, buildrootID=None, imageID=None,
--   componentBuildrootID=None, hostID=None, arches=None, queryOpts=None)
listRPMs :: String -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> Maybe Value -> IO [Struct]

-- | listSideTags(basetag=None, user=None, queryOpts=None)
listSideTags :: String -> Maybe Info -> Maybe Info -> IO Value

-- | listTagged(tag, event=None, inherit=False, prefix=None, latest=False,
--   package=None, owner=None, type=None)
listTagged :: String -> String -> Maybe Int -> Bool -> Maybe String -> Bool -> Maybe String -> Maybe String -> Maybe String -> IO [Struct]

-- | listTaggedArchives(tag, event=None, inherit=False, latest=False,
--   package=None, type=None)
listTaggedArchives :: String -> String -> Maybe Int -> Bool -> Bool -> Maybe String -> Maybe String -> IO Value

-- | listTaggedRPMS(tag, event=None, inherit=False, latest=False,
--   package=None, arch=None, rpmsigs=False, owner=None, type=None)
listTaggedRPMS :: String -> String -> Maybe Int -> Bool -> Bool -> Maybe String -> Maybe String -> Bool -> Maybe String -> Maybe String -> IO Value

-- | listTags(build=None, package=None, perms=True, queryOpts=None)
listTags :: String -> Maybe Info -> Maybe Info -> Bool -> IO [Struct]

-- | listTaskOutput(taskID, stat=False, all_volumes=False, strict=False)
listTaskOutput :: String -> Int -> Bool -> Bool -> Bool -> IO Struct

-- | listTasks(opts=None, queryOpts=None)
listTasks :: String -> Struct -> Struct -> IO [Struct]

-- | listUsers(userType=0, prefix=None, queryOpts=None)
listUsers :: String -> Maybe Int -> Maybe String -> IO [Struct]

-- | listVolumes()
listVolumes :: String -> IO Value

-- | repoInfo(repo_id, strict=False)
repoInfo :: String -> Int -> IO Value

-- | resubmitTask(taskID)
resubmitTask :: String -> Int -> IO Value

-- | tagChangedSinceEvent(event, taglist)
tagChangedSinceEvent :: String -> Int -> Value -> IO Bool

-- | tagHistory(build=None, tag=None, package=None, active=None,
--   queryOpts=None)
tagHistory :: String -> Maybe Info -> Maybe Info -> Maybe Info -> Bool -> IO Value

-- | taskFinished(taskId)
taskFinished :: String -> Int -> IO Bool

-- | taskReport(owner=None)
taskReport :: String -> Maybe String -> IO Value
data () => Value
ValueInt :: Int -> Value
ValueBool :: Bool -> Value
ValueString :: String -> Value
ValueUnwrapped :: String -> Value
ValueDouble :: Double -> Value
ValueDateTime :: LocalTime -> Value
ValueBase64 :: ByteString -> Value
ValueStruct :: [(String, Value)] -> Value
ValueArray :: [Value] -> Value
ValueNil :: Value
type Struct = [(String, Value)]

-- | Lookup a key in a XML result
lookupStruct :: XmlRpcType a => String -> Struct -> Maybe a
maybeStruct :: Value -> Maybe Struct
structArray :: Value -> [Struct]
getValue :: XmlRpcType a => Value -> Maybe a


-- | A library for accessing a Koji hub via its XMLRPC API.
module Distribution.Koji
newtype BuildID
BuildId :: Int -> BuildID
data BuildInfo
BuildInfoID :: Int -> BuildInfo
BuildInfoNVR :: String -> BuildInfo

-- | map a buildid into a buildinfo
buildIDInfo :: BuildID -> BuildInfo

-- | main Fedora Koji Hub
fedoraKojiHub :: String

-- | Centos Koji mbox Hub
centosKojiHub :: String

-- | Get the tags of a build
kojiBuildTags :: String -> BuildInfo -> IO [String]

-- | Get the build and dest tags for a target.
kojiBuildTarget :: String -> String -> IO (Maybe (String, String))

-- | Get the buildid of an nvr build
kojiGetBuildID :: String -> String -> IO (Maybe BuildID)

-- | Get the state of a build
kojiGetBuildState :: String -> BuildInfo -> IO (Maybe BuildState)

-- | Get the task of an nvr build
kojiGetBuildTaskID :: String -> String -> IO (Maybe TaskID)

-- | Get current repo info for tag
kojiGetCurrentRepo :: String -> String -> IO (Maybe Struct)

-- | Get repo info for tag
kojiGetRepo :: String -> String -> Maybe RepoState -> Maybe Int -> IO (Maybe Struct)

-- | Get info about a task
kojiGetTaskInfo :: String -> TaskID -> IO (Maybe Struct)

-- | Get the children tasks of a task
kojiGetTaskChildren :: String -> TaskID -> Bool -> IO [Struct]

-- | Get the state of a taskid
kojiGetTaskState :: String -> TaskID -> IO (Maybe TaskState)

-- | Get the userid for the named user
kojiGetUserID :: String -> String -> IO (Maybe UserID)

-- | Get the latest build of a package in a tag
kojiLatestBuild :: String -> String -> String -> IO (Maybe Struct)

-- | Get latest build in a tag for package at a time event.
--   
--   Used for example to implement waitrepo
kojiLatestBuildRepo :: String -> String -> Int -> String -> IO (Maybe Struct)

-- | List sidetags (preferably for user and/or basetag)
kojiListSideTags :: String -> Maybe String -> Maybe String -> IO [String]

-- | List tasks filtered by query options
kojiListTaskIDs :: String -> Struct -> Struct -> IO [TaskID]

-- | List the open tasks of a user (matching source/target)
kojiUserBuildTasks :: String -> UserID -> Maybe String -> Maybe String -> IO [TaskID]

-- | Build metadata
data KojiBuild
KojiBuild :: Int -> Int -> String -> String -> KojiBuild
[kbBuildId] :: KojiBuild -> Int
[kbPackageId] :: KojiBuild -> Int
[kbOwnerName] :: KojiBuild -> String
[kbNvr] :: KojiBuild -> String

-- | List builds in a tag
kojiListTaggedBuilds :: String -> Bool -> String -> IO [KojiBuild]
newtype PackageID
PackageId :: Int -> PackageID
newtype TagID
TagId :: Int -> TagID
newtype TaskID
TaskId :: Int -> TaskID
newtype UserID
UserId :: Int -> UserID
displayID :: ID a => a -> String
getID :: ID a => a -> Int
readID :: ID a => Struct -> Maybe a
readID' :: Struct -> Maybe Int

-- | The state of a task
data TaskState
TaskFree :: TaskState
TaskOpen :: TaskState
TaskClosed :: TaskState
TaskCanceled :: TaskState
TaskAssigned :: TaskState
TaskFailed :: TaskState
getTaskState :: Struct -> Maybe TaskState

-- | Open task states
openTaskStates :: [TaskState]
openTaskValues :: Value
readTaskState :: Value -> TaskState

-- | The state of a build
data BuildState
BuildBuilding :: BuildState
BuildComplete :: BuildState
BuildDeleted :: BuildState
BuildFailed :: BuildState
BuildCanceled :: BuildState
readBuildState :: Value -> BuildState
type Struct = [(String, Value)]

-- | Lookup a key in a XML result
lookupStruct :: XmlRpcType a => String -> Struct -> Maybe a
data () => Value
ValueInt :: Int -> Value
ValueBool :: Bool -> Value
ValueString :: String -> Value
ValueUnwrapped :: String -> Value
ValueDouble :: Double -> Value
ValueDateTime :: LocalTime -> Value
ValueBase64 :: ByteString -> Value
ValueStruct :: [(String, Value)] -> Value
ValueArray :: [Value] -> Value
ValueNil :: Value
getInt :: Value -> Maybe Int
getString :: Value -> Maybe String

-- | Repo state
data RepoState
RepoInit :: RepoState
RepoReady :: RepoState
RepoExpired :: RepoState
RepoDeleted :: RepoState
RepoProblem :: RepoState
readRepoState :: Value -> RepoState
instance GHC.Show.Show Distribution.Koji.TaskID
instance GHC.Show.Show Distribution.Koji.TagID
instance GHC.Show.Show Distribution.Koji.UserID
instance GHC.Show.Show Distribution.Koji.BuildState
instance GHC.Enum.Enum Distribution.Koji.BuildState
instance GHC.Classes.Eq Distribution.Koji.BuildState
instance GHC.Show.Show Distribution.Koji.TaskState
instance GHC.Enum.Enum Distribution.Koji.TaskState
instance GHC.Classes.Eq Distribution.Koji.TaskState
instance GHC.Show.Show Distribution.Koji.KojiBuild
instance GHC.Show.Show Distribution.Koji.RepoState
instance GHC.Enum.Enum Distribution.Koji.RepoState
instance GHC.Classes.Eq Distribution.Koji.RepoState
instance Distribution.Koji.ID Distribution.Koji.BuildrootID
instance Distribution.Koji.ID Distribution.Koji.PackageID
instance Distribution.Koji.ID Distribution.Koji.BuildID
instance Distribution.Koji.ID Distribution.Koji.UserID
instance Distribution.Koji.ID Distribution.Koji.TagID
instance Distribution.Koji.ID Distribution.Koji.TaskID
