{-# LANGUAGE OverloadedStrings #-} ----------------------------------------------------------------------------- -- | -- Copyright : (c) 2014 Ricky Elrod -- License : BSD3 -- -- Maintainer : Ricky Elrod -- Stability : experimental -- -- Provides functions and datatypes for getting release information about Fedora -- packages. ---------------------------------------------------------------------------- module Fedora.Packages.Releases ( Release (..) , releases , releases' ) where import Fedora.Packages.API import Fedora.Packages.Config import Control.Applicative import Control.Monad (mzero) import Data.Aeson import qualified Data.ByteString.Lazy as LS import Data.Monoid import qualified Data.Text as T data Release = Release { _release :: T.Text , _stableVersion :: T.Text , _testingVersion :: T.Text } deriving (Eq, Show) instance FromJSON Release where parseJSON (Object v) = Release <$> v .: "release" <*> v .: "stable_version" <*> v .: "testing_version" parseJSON _ = mzero data ReleasesFilter = ReleasesFilter { _rfPackage :: T.Text } deriving (Eq, Show) instance ToJSON ReleasesFilter where toJSON (ReleasesFilter s) = object [ "package" .= s ] -- | Obtain release information about a package. releases :: PackagesConfig -- ^ The configuration to use. -> T.Text -- ^ The name of the package to look up. -> IO (StandardResults Release) releases c s = let rJson = Query (ReleasesFilter s) 1 0 in apiGet ("bodhi/query/query_active_releases/" <> LS.toStrict (encode rJson)) c -- | Helper method to query for release information without having to worry -- about traversing into 'StandardResults'. -- -- This is provided because this is one of the few places where the paging -- information probably really doesn't matter. -- -- Equivalent to: -- -- > _srRows <$> releases c q releases' :: PackagesConfig -- ^ The configuration to use. -> T.Text -- ^ The name of the package to look up. -> IO [Release] releases' c q = _srRows <$> releases c q