module Distribution.Client.BuildReports.Lens (
    BuildReport,
    module Distribution.Client.BuildReports.Lens,
) where

import Distribution.Client.Compat.Prelude
import Distribution.Compat.Lens
import Prelude ()

import Distribution.Client.BuildReports.Types (BuildReport, InstallOutcome, Outcome)
import Distribution.Compiler                  (CompilerId)
import Distribution.System                    (Arch, OS)
import Distribution.Types.Flag                (FlagAssignment)
import Distribution.Types.PackageId           (PackageIdentifier)

import qualified Distribution.Client.BuildReports.Types as T

package :: Lens' BuildReport PackageIdentifier
package f s = fmap (\x -> s { T.package = x }) (f (T.package s))

os :: Lens' BuildReport OS
os f s = fmap (\x -> s { T.os = x }) (f (T.os s))

arch :: Lens' BuildReport Arch
arch f s = fmap (\x -> s { T.arch = x }) (f (T.arch s))

compiler :: Lens' BuildReport CompilerId
compiler f s = fmap (\x -> s { T.compiler = x }) (f (T.compiler s))

client :: Lens' BuildReport PackageIdentifier
client f s = fmap (\x -> s { T.client = x }) (f (T.client s))

flagAssignment :: Lens' BuildReport FlagAssignment
flagAssignment f s = fmap (\x -> s { T.flagAssignment = x }) (f (T.flagAssignment s))

dependencies :: Lens' BuildReport [PackageIdentifier]
dependencies f s = fmap (\x -> s { T.dependencies = x }) (f (T.dependencies s))

installOutcome :: Lens' BuildReport InstallOutcome
installOutcome f s = fmap (\x -> s { T.installOutcome = x }) (f (T.installOutcome s))

docsOutcome :: Lens' BuildReport Outcome
docsOutcome f s = fmap (\x -> s { T.docsOutcome = x }) (f (T.docsOutcome s))

testsOutcome :: Lens' BuildReport Outcome
testsOutcome f s = fmap (\x -> s { T.testsOutcome = x }) (f (T.testsOutcome s))
