hackage-server-0.5.0: Distribution/Server/Features/BuildReports/State.hs
{-# LANGUAGE DeriveDataTypeable, TypeFamilies, TemplateHaskell,
FlexibleInstances, FlexibleContexts, MultiParamTypeClasses,
TypeOperators, TypeSynonymInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Distribution.Server.Features.BuildReports.State where
import Distribution.Server.Features.BuildReports.BuildReports (BuildReportId, BuildLog, BuildReport, BuildReports)
import qualified Distribution.Server.Features.BuildReports.BuildReports as BuildReports
import Distribution.Package
import Control.Monad.Reader
import qualified Control.Monad.State as State
import Data.Acid (Query, Update, makeAcidic)
initialBuildReports :: BuildReports
initialBuildReports = BuildReports.emptyReports
-- and defined methods
addReport :: PackageId -> (BuildReport, Maybe BuildLog) -> Update BuildReports BuildReportId
addReport pkgid report = do
buildReports <- State.get
let (reports, reportId) = BuildReports.addReport pkgid report buildReports
State.put reports
return reportId
setBuildLog :: PackageId -> BuildReportId -> Maybe BuildLog -> Update BuildReports Bool
setBuildLog pkgid reportId buildLog = do
buildReports <- State.get
case BuildReports.setBuildLog pkgid reportId buildLog buildReports of
Nothing -> return False
Just reports -> State.put reports >> return True
deleteReport :: PackageId -> BuildReportId -> Update BuildReports Bool --Maybe BuildReports
deleteReport pkgid reportId = do
buildReports <- State.get
case BuildReports.deleteReport pkgid reportId buildReports of
Nothing -> return False
Just reports -> State.put reports >> return True
lookupReport :: PackageId -> BuildReportId -> Query BuildReports (Maybe (BuildReport, Maybe BuildLog))
lookupReport pkgid reportId = asks (BuildReports.lookupReport pkgid reportId)
lookupPackageReports :: PackageId -> Query BuildReports [(BuildReportId, (BuildReport, Maybe BuildLog))]
lookupPackageReports pkgid = asks (BuildReports.lookupPackageReports pkgid)
getBuildReports :: Query BuildReports BuildReports
getBuildReports = ask
replaceBuildReports :: BuildReports -> Update BuildReports ()
replaceBuildReports = State.put
makeAcidic ''BuildReports ['addReport
,'setBuildLog
,'deleteReport
,'lookupReport
,'lookupPackageReports
,'getBuildReports
,'replaceBuildReports
]