packages feed

gogol-containeranalysis-1.0.0: gen/Gogol/ContainerAnalysis/Internal/Product.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- |
-- Module      : Gogol.ContainerAnalysis.Internal.Product
-- Copyright   : (c) 2015-2025 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
--               Toni Cebrián <toni@tonicebrian.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Gogol.ContainerAnalysis.Internal.Product
  ( -- * AliasContext
    AliasContext (..),
    newAliasContext,

    -- * AnalysisCompleted
    AnalysisCompleted (..),
    newAnalysisCompleted,

    -- * Artifact
    Artifact (..),
    newArtifact,

    -- * Assessment
    Assessment (..),
    newAssessment,

    -- * AttestationNote
    AttestationNote (..),
    newAttestationNote,

    -- * AttestationOccurrence
    AttestationOccurrence (..),
    newAttestationOccurrence,

    -- * BatchCreateNotesRequest
    BatchCreateNotesRequest (..),
    newBatchCreateNotesRequest,

    -- * BatchCreateNotesRequest_Notes
    BatchCreateNotesRequest_Notes (..),
    newBatchCreateNotesRequest_Notes,

    -- * BatchCreateNotesResponse
    BatchCreateNotesResponse (..),
    newBatchCreateNotesResponse,

    -- * BatchCreateOccurrencesRequest
    BatchCreateOccurrencesRequest (..),
    newBatchCreateOccurrencesRequest,

    -- * BatchCreateOccurrencesResponse
    BatchCreateOccurrencesResponse (..),
    newBatchCreateOccurrencesResponse,

    -- * Binding
    Binding (..),
    newBinding,

    -- * BuildDefinition
    BuildDefinition (..),
    newBuildDefinition,

    -- * BuildDefinition_ExternalParameters
    BuildDefinition_ExternalParameters (..),
    newBuildDefinition_ExternalParameters,

    -- * BuildDefinition_InternalParameters
    BuildDefinition_InternalParameters (..),
    newBuildDefinition_InternalParameters,

    -- * BuildMetadata
    BuildMetadata (..),
    newBuildMetadata,

    -- * BuildNote
    BuildNote (..),
    newBuildNote,

    -- * BuildOccurrence
    BuildOccurrence (..),
    newBuildOccurrence,

    -- * BuildProvenance
    BuildProvenance (..),
    newBuildProvenance,

    -- * BuildProvenance_BuildOptions
    BuildProvenance_BuildOptions (..),
    newBuildProvenance_BuildOptions,

    -- * BuildStep
    BuildStep (..),
    newBuildStep,

    -- * BuilderConfig
    BuilderConfig (..),
    newBuilderConfig,

    -- * CVSS
    CVSS (..),
    newCVSS,

    -- * CVSSv3
    CVSSv3 (..),
    newCVSSv3,

    -- * Category
    Category (..),
    newCategory,

    -- * CisBenchmark
    CisBenchmark (..),
    newCisBenchmark,

    -- * CloudRepoSourceContext
    CloudRepoSourceContext (..),
    newCloudRepoSourceContext,

    -- * CloudStorageLocation
    CloudStorageLocation (..),
    newCloudStorageLocation,

    -- * Command
    Command (..),
    newCommand,

    -- * Completeness
    Completeness (..),
    newCompleteness,

    -- * ComplianceNote
    ComplianceNote (..),
    newComplianceNote,

    -- * ComplianceOccurrence
    ComplianceOccurrence (..),
    newComplianceOccurrence,

    -- * ComplianceVersion
    ComplianceVersion (..),
    newComplianceVersion,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
    ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Build
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Build,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
    ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
    ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Dependency,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
    ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
    ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1GitSource,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
    ContaineranalysisGoogleDevtoolsCloudbuildV1Hash (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Hash,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Results
    ContaineranalysisGoogleDevtoolsCloudbuildV1Results (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Results,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Secret,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
    ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Secrets,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Source
    ContaineranalysisGoogleDevtoolsCloudbuildV1Source (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Source,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
    ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage,

    -- * ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
    ContaineranalysisGoogleDevtoolsCloudbuildV1Volume (..),
    newContaineranalysisGoogleDevtoolsCloudbuildV1Volume,

    -- * DSSEAttestationNote
    DSSEAttestationNote (..),
    newDSSEAttestationNote,

    -- * DSSEAttestationOccurrence
    DSSEAttestationOccurrence (..),
    newDSSEAttestationOccurrence,

    -- * DSSEHint
    DSSEHint (..),
    newDSSEHint,

    -- * DeploymentNote
    DeploymentNote (..),
    newDeploymentNote,

    -- * DeploymentOccurrence
    DeploymentOccurrence (..),
    newDeploymentOccurrence,

    -- * Detail
    Detail (..),
    newDetail,

    -- * Digest
    Digest (..),
    newDigest,

    -- * DiscoveryNote
    DiscoveryNote (..),
    newDiscoveryNote,

    -- * DiscoveryOccurrence
    DiscoveryOccurrence (..),
    newDiscoveryOccurrence,

    -- * Distribution
    Distribution (..),
    newDistribution,

    -- * Empty
    Empty (..),
    newEmpty,

    -- * Envelope
    Envelope (..),
    newEnvelope,

    -- * EnvelopeSignature
    EnvelopeSignature (..),
    newEnvelopeSignature,

    -- * ExportSBOMRequest
    ExportSBOMRequest (..),
    newExportSBOMRequest,

    -- * ExportSBOMResponse
    ExportSBOMResponse (..),
    newExportSBOMResponse,

    -- * Expr
    Expr (..),
    newExpr,

    -- * FileHashes
    FileHashes (..),
    newFileHashes,

    -- * Fingerprint
    Fingerprint (..),
    newFingerprint,

    -- * FixableTotalByDigest
    FixableTotalByDigest (..),
    newFixableTotalByDigest,

    -- * GerritSourceContext
    GerritSourceContext (..),
    newGerritSourceContext,

    -- * GetIamPolicyRequest
    GetIamPolicyRequest (..),
    newGetIamPolicyRequest,

    -- * GetPolicyOptions
    GetPolicyOptions (..),
    newGetPolicyOptions,

    -- * GitSourceContext
    GitSourceContext (..),
    newGitSourceContext,

    -- * GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
    GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata (..),
    newGoogleDevtoolsContaineranalysisV1alpha1OperationMetadata,

    -- * GrafeasV1FileLocation
    GrafeasV1FileLocation (..),
    newGrafeasV1FileLocation,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder
    GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaBuilder,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
    GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
    GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
    GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial
    GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
    GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest,

    -- * GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata
    GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata (..),
    newGrafeasV1SlsaProvenanceZeroTwoSlsaMetadata,

    -- * Hash
    Hash (..),
    newHash,

    -- * Hint
    Hint (..),
    newHint,

    -- * Identity
    Identity (..),
    newIdentity,

    -- * ImageNote
    ImageNote (..),
    newImageNote,

    -- * ImageOccurrence
    ImageOccurrence (..),
    newImageOccurrence,

    -- * InTotoProvenance
    InTotoProvenance (..),
    newInTotoProvenance,

    -- * InTotoSlsaProvenanceV1
    InTotoSlsaProvenanceV1 (..),
    newInTotoSlsaProvenanceV1,

    -- * InTotoStatement
    InTotoStatement (..),
    newInTotoStatement,

    -- * Justification
    Justification (..),
    newJustification,

    -- * Jwt
    Jwt (..),
    newJwt,

    -- * KnowledgeBase
    KnowledgeBase (..),
    newKnowledgeBase,

    -- * Layer
    Layer (..),
    newLayer,

    -- * License
    License (..),
    newLicense,

    -- * ListNoteOccurrencesResponse
    ListNoteOccurrencesResponse (..),
    newListNoteOccurrencesResponse,

    -- * ListNotesResponse
    ListNotesResponse (..),
    newListNotesResponse,

    -- * ListOccurrencesResponse
    ListOccurrencesResponse (..),
    newListOccurrencesResponse,

    -- * Location
    Location (..),
    newLocation,

    -- * Material
    Material (..),
    newMaterial,

    -- * Material_Digest
    Material_Digest (..),
    newMaterial_Digest,

    -- * Metadata
    Metadata (..),
    newMetadata,

    -- * NonCompliantFile
    NonCompliantFile (..),
    newNonCompliantFile,

    -- * Note
    Note (..),
    newNote,

    -- * Occurrence
    Occurrence (..),
    newOccurrence,

    -- * PackageIssue
    PackageIssue (..),
    newPackageIssue,

    -- * PackageNote
    PackageNote (..),
    newPackageNote,

    -- * PackageOccurrence
    PackageOccurrence (..),
    newPackageOccurrence,

    -- * Policy
    Policy (..),
    newPolicy,

    -- * Product
    Product (..),
    newProduct,

    -- * ProjectRepoId
    ProjectRepoId (..),
    newProjectRepoId,

    -- * ProvenanceBuilder
    ProvenanceBuilder (..),
    newProvenanceBuilder,

    -- * ProvenanceBuilder_Version
    ProvenanceBuilder_Version (..),
    newProvenanceBuilder_Version,

    -- * Publisher
    Publisher (..),
    newPublisher,

    -- * Recipe
    Recipe (..),
    newRecipe,

    -- * Recipe_ArgumentsItem
    Recipe_ArgumentsItem (..),
    newRecipe_ArgumentsItem,

    -- * Recipe_EnvironmentItem
    Recipe_EnvironmentItem (..),
    newRecipe_EnvironmentItem,

    -- * RelatedUrl
    RelatedUrl (..),
    newRelatedUrl,

    -- * Remediation
    Remediation (..),
    newRemediation,

    -- * RepoId
    RepoId (..),
    newRepoId,

    -- * ResourceDescriptor
    ResourceDescriptor (..),
    newResourceDescriptor,

    -- * ResourceDescriptor_Annotations
    ResourceDescriptor_Annotations (..),
    newResourceDescriptor_Annotations,

    -- * ResourceDescriptor_Digest
    ResourceDescriptor_Digest (..),
    newResourceDescriptor_Digest,

    -- * RunDetails
    RunDetails (..),
    newRunDetails,

    -- * SBOMReferenceNote
    SBOMReferenceNote (..),
    newSBOMReferenceNote,

    -- * SBOMReferenceOccurrence
    SBOMReferenceOccurrence (..),
    newSBOMReferenceOccurrence,

    -- * SBOMStatus
    SBOMStatus (..),
    newSBOMStatus,

    -- * SbomReferenceIntotoPayload
    SbomReferenceIntotoPayload (..),
    newSbomReferenceIntotoPayload,

    -- * SbomReferenceIntotoPredicate
    SbomReferenceIntotoPredicate (..),
    newSbomReferenceIntotoPredicate,

    -- * SbomReferenceIntotoPredicate_Digest
    SbomReferenceIntotoPredicate_Digest (..),
    newSbomReferenceIntotoPredicate_Digest,

    -- * SetIamPolicyRequest
    SetIamPolicyRequest (..),
    newSetIamPolicyRequest,

    -- * Signature
    Signature (..),
    newSignature,

    -- * SlsaBuilder
    SlsaBuilder (..),
    newSlsaBuilder,

    -- * SlsaCompleteness
    SlsaCompleteness (..),
    newSlsaCompleteness,

    -- * SlsaMetadata
    SlsaMetadata (..),
    newSlsaMetadata,

    -- * SlsaProvenance
    SlsaProvenance (..),
    newSlsaProvenance,

    -- * SlsaProvenanceV1
    SlsaProvenanceV1 (..),
    newSlsaProvenanceV1,

    -- * SlsaProvenanceZeroTwo
    SlsaProvenanceZeroTwo (..),
    newSlsaProvenanceZeroTwo,

    -- * SlsaProvenanceZeroTwo_BuildConfig
    SlsaProvenanceZeroTwo_BuildConfig (..),
    newSlsaProvenanceZeroTwo_BuildConfig,

    -- * SlsaRecipe
    SlsaRecipe (..),
    newSlsaRecipe,

    -- * SlsaRecipe_Arguments
    SlsaRecipe_Arguments (..),
    newSlsaRecipe_Arguments,

    -- * SlsaRecipe_Environment
    SlsaRecipe_Environment (..),
    newSlsaRecipe_Environment,

    -- * Source
    Source (..),
    newSource,

    -- * Source_FileHashes
    Source_FileHashes (..),
    newSource_FileHashes,

    -- * SourceContext
    SourceContext (..),
    newSourceContext,

    -- * SourceContext_Labels
    SourceContext_Labels (..),
    newSourceContext_Labels,

    -- * Status
    Status (..),
    newStatus,

    -- * Status_DetailsItem
    Status_DetailsItem (..),
    newStatus_DetailsItem,

    -- * Subject
    Subject (..),
    newSubject,

    -- * Subject_Digest
    Subject_Digest (..),
    newSubject_Digest,

    -- * TestIamPermissionsRequest
    TestIamPermissionsRequest (..),
    newTestIamPermissionsRequest,

    -- * TestIamPermissionsResponse
    TestIamPermissionsResponse (..),
    newTestIamPermissionsResponse,

    -- * TimeSpan
    TimeSpan (..),
    newTimeSpan,

    -- * UpgradeDistribution
    UpgradeDistribution (..),
    newUpgradeDistribution,

    -- * UpgradeNote
    UpgradeNote (..),
    newUpgradeNote,

    -- * UpgradeOccurrence
    UpgradeOccurrence (..),
    newUpgradeOccurrence,

    -- * Version
    Version (..),
    newVersion,

    -- * VexAssessment
    VexAssessment (..),
    newVexAssessment,

    -- * Volume
    Volume (..),
    newVolume,

    -- * VulnerabilityAssessmentNote
    VulnerabilityAssessmentNote (..),
    newVulnerabilityAssessmentNote,

    -- * VulnerabilityNote
    VulnerabilityNote (..),
    newVulnerabilityNote,

    -- * VulnerabilityOccurrence
    VulnerabilityOccurrence (..),
    newVulnerabilityOccurrence,

    -- * VulnerabilityOccurrencesSummary
    VulnerabilityOccurrencesSummary (..),
    newVulnerabilityOccurrencesSummary,

    -- * WindowsDetail
    WindowsDetail (..),
    newWindowsDetail,

    -- * WindowsUpdate
    WindowsUpdate (..),
    newWindowsUpdate,
  )
where

import Gogol.ContainerAnalysis.Internal.Sum
import Gogol.Prelude qualified as Core

-- | An alias to a repo revision.
--
-- /See:/ 'newAliasContext' smart constructor.
data AliasContext = AliasContext
  { -- | The alias kind.
    kind :: (Core.Maybe AliasContext_Kind),
    -- | The alias name.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AliasContext' with the minimum fields required to make a request.
newAliasContext ::
  AliasContext
newAliasContext =
  AliasContext {kind = Core.Nothing, name = Core.Nothing}

instance Core.FromJSON AliasContext where
  parseJSON =
    Core.withObject
      "AliasContext"
      ( \o ->
          AliasContext
            Core.<$> (o Core..:? "kind")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON AliasContext where
  toJSON AliasContext {..} =
    Core.object
      ( Core.catMaybes
          [("kind" Core..=) Core.<$> kind, ("name" Core..=) Core.<$> name]
      )

-- | Indicates which analysis completed successfully. Multiple types of analysis can be performed on a single resource.
--
-- /See:/ 'newAnalysisCompleted' smart constructor.
newtype AnalysisCompleted = AnalysisCompleted
  { analysisType :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AnalysisCompleted' with the minimum fields required to make a request.
newAnalysisCompleted ::
  AnalysisCompleted
newAnalysisCompleted =
  AnalysisCompleted {analysisType = Core.Nothing}

instance Core.FromJSON AnalysisCompleted where
  parseJSON =
    Core.withObject
      "AnalysisCompleted"
      (\o -> AnalysisCompleted Core.<$> (o Core..:? "analysisType"))

instance Core.ToJSON AnalysisCompleted where
  toJSON AnalysisCompleted {..} =
    Core.object
      (Core.catMaybes [("analysisType" Core..=) Core.<$> analysisType])

-- | Artifact describes a build product.
--
-- /See:/ 'newArtifact' smart constructor.
data Artifact = Artifact
  { -- | Hash or checksum value of a binary, or Docker Registry 2.0 digest of a container.
    checksum :: (Core.Maybe Core.Text),
    -- | Artifact ID, if any; for container images, this will be a URL by digest like @gcr.io\/projectID\/imagename\@sha256:123456@.
    id :: (Core.Maybe Core.Text),
    -- | Related artifact names. This may be the path to a binary or jar file, or in the case of a container build, the name used to push the container image to Google Container Registry, as presented to @docker push@. Note that a single Artifact ID can have multiple names, for example if two tags are applied to one image.
    names :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Artifact' with the minimum fields required to make a request.
newArtifact ::
  Artifact
newArtifact =
  Artifact
    { checksum = Core.Nothing,
      id = Core.Nothing,
      names = Core.Nothing
    }

instance Core.FromJSON Artifact where
  parseJSON =
    Core.withObject
      "Artifact"
      ( \o ->
          Artifact
            Core.<$> (o Core..:? "checksum")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "names")
      )

instance Core.ToJSON Artifact where
  toJSON Artifact {..} =
    Core.object
      ( Core.catMaybes
          [ ("checksum" Core..=) Core.<$> checksum,
            ("id" Core..=) Core.<$> id,
            ("names" Core..=) Core.<$> names
          ]
      )

-- | Assessment provides all information that is related to a single vulnerability for this product.
--
-- /See:/ 'newAssessment' smart constructor.
data Assessment = Assessment
  { -- | Holds the MITRE standard Common Vulnerabilities and Exposures (CVE) tracking number for the vulnerability. Deprecated: Use vulnerability_id instead to denote CVEs.
    cve :: (Core.Maybe Core.Text),
    -- | Contains information about the impact of this vulnerability, this will change with time.
    impacts :: (Core.Maybe [Core.Text]),
    -- | Justification provides the justification when the state of the assessment if NOT_AFFECTED.
    justification :: (Core.Maybe Justification),
    -- | A detailed description of this Vex.
    longDescription :: (Core.Maybe Core.Text),
    -- | Holds a list of references associated with this vulnerability item and assessment. These uris have additional information about the vulnerability and the assessment itself. E.g. Link to a document which details how this assessment concluded the state of this vulnerability.
    relatedUris :: (Core.Maybe [RelatedUrl]),
    -- | Specifies details on how to handle (and presumably, fix) a vulnerability.
    remediations :: (Core.Maybe [Remediation]),
    -- | A one sentence description of this Vex.
    shortDescription :: (Core.Maybe Core.Text),
    -- | Provides the state of this Vulnerability assessment.
    state :: (Core.Maybe Assessment_State),
    -- | The vulnerability identifier for this Assessment. Will hold one of common identifiers e.g. CVE, GHSA etc.
    vulnerabilityId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Assessment' with the minimum fields required to make a request.
newAssessment ::
  Assessment
newAssessment =
  Assessment
    { cve = Core.Nothing,
      impacts = Core.Nothing,
      justification = Core.Nothing,
      longDescription = Core.Nothing,
      relatedUris = Core.Nothing,
      remediations = Core.Nothing,
      shortDescription = Core.Nothing,
      state = Core.Nothing,
      vulnerabilityId = Core.Nothing
    }

instance Core.FromJSON Assessment where
  parseJSON =
    Core.withObject
      "Assessment"
      ( \o ->
          Assessment
            Core.<$> (o Core..:? "cve")
            Core.<*> (o Core..:? "impacts")
            Core.<*> (o Core..:? "justification")
            Core.<*> (o Core..:? "longDescription")
            Core.<*> (o Core..:? "relatedUris")
            Core.<*> (o Core..:? "remediations")
            Core.<*> (o Core..:? "shortDescription")
            Core.<*> (o Core..:? "state")
            Core.<*> (o Core..:? "vulnerabilityId")
      )

instance Core.ToJSON Assessment where
  toJSON Assessment {..} =
    Core.object
      ( Core.catMaybes
          [ ("cve" Core..=) Core.<$> cve,
            ("impacts" Core..=) Core.<$> impacts,
            ("justification" Core..=) Core.<$> justification,
            ("longDescription" Core..=) Core.<$> longDescription,
            ("relatedUris" Core..=) Core.<$> relatedUris,
            ("remediations" Core..=) Core.<$> remediations,
            ("shortDescription" Core..=) Core.<$> shortDescription,
            ("state" Core..=) Core.<$> state,
            ("vulnerabilityId" Core..=) Core.<$> vulnerabilityId
          ]
      )

-- | Note kind that represents a logical attestation \"role\" or \"authority\". For example, an organization might have one @Authority@ for \"QA\" and one for \"build\". This note is intended to act strictly as a grouping mechanism for the attached occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an occurrence to a given note. It also provides a single point of lookup to find all attached attestation occurrences, even if they don\'t all live in the same project.
--
-- /See:/ 'newAttestationNote' smart constructor.
newtype AttestationNote = AttestationNote
  { -- | Hint hints at the purpose of the attestation authority.
    hint :: (Core.Maybe Hint)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AttestationNote' with the minimum fields required to make a request.
newAttestationNote ::
  AttestationNote
newAttestationNote = AttestationNote {hint = Core.Nothing}

instance Core.FromJSON AttestationNote where
  parseJSON =
    Core.withObject
      "AttestationNote"
      (\o -> AttestationNote Core.<$> (o Core..:? "hint"))

instance Core.ToJSON AttestationNote where
  toJSON AttestationNote {..} =
    Core.object (Core.catMaybes [("hint" Core..=) Core.<$> hint])

-- | Occurrence that represents a single \"attestation\". The authenticity of an attestation can be verified using the attached signature. If the verifier trusts the public key of the signer, then verifying the signature is sufficient to establish trust. In this circumstance, the authority to which this attestation is attached is primarily useful for lookup (how to find this attestation if you already know the authority and artifact to be verified) and intent (for which authority this attestation was intended to sign.
--
-- /See:/ 'newAttestationOccurrence' smart constructor.
data AttestationOccurrence = AttestationOccurrence
  { -- | One or more JWTs encoding a self-contained attestation. Each JWT encodes the payload that it verifies within the JWT itself. Verifier implementation SHOULD ignore the @serialized_payload@ field when verifying these JWTs. If only JWTs are present on this AttestationOccurrence, then the @serialized_payload@ SHOULD be left empty. Each JWT SHOULD encode a claim specific to the @resource_uri@ of this Occurrence, but this is not validated by Grafeas metadata API implementations. The JWT itself is opaque to Grafeas.
    jwts :: (Core.Maybe [Jwt]),
    -- | Required. The serialized payload that is verified by one or more @signatures@.
    serializedPayload :: (Core.Maybe Core.Base64),
    -- | One or more signatures over @serialized_payload@. Verifier implementations should consider this attestation message verified if at least one @signature@ verifies @serialized_payload@. See @Signature@ in common.proto for more details on signature structure and verification.
    signatures :: (Core.Maybe [Signature])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'AttestationOccurrence' with the minimum fields required to make a request.
newAttestationOccurrence ::
  AttestationOccurrence
newAttestationOccurrence =
  AttestationOccurrence
    { jwts = Core.Nothing,
      serializedPayload = Core.Nothing,
      signatures = Core.Nothing
    }

instance Core.FromJSON AttestationOccurrence where
  parseJSON =
    Core.withObject
      "AttestationOccurrence"
      ( \o ->
          AttestationOccurrence
            Core.<$> (o Core..:? "jwts")
            Core.<*> (o Core..:? "serializedPayload")
            Core.<*> (o Core..:? "signatures")
      )

instance Core.ToJSON AttestationOccurrence where
  toJSON AttestationOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("jwts" Core..=) Core.<$> jwts,
            ("serializedPayload" Core..=) Core.<$> serializedPayload,
            ("signatures" Core..=) Core.<$> signatures
          ]
      )

-- | Request to create notes in batch.
--
-- /See:/ 'newBatchCreateNotesRequest' smart constructor.
newtype BatchCreateNotesRequest = BatchCreateNotesRequest
  { -- | Required. The notes to create. Max allowed length is 1000.
    notes :: (Core.Maybe BatchCreateNotesRequest_Notes)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BatchCreateNotesRequest' with the minimum fields required to make a request.
newBatchCreateNotesRequest ::
  BatchCreateNotesRequest
newBatchCreateNotesRequest =
  BatchCreateNotesRequest {notes = Core.Nothing}

instance Core.FromJSON BatchCreateNotesRequest where
  parseJSON =
    Core.withObject
      "BatchCreateNotesRequest"
      (\o -> BatchCreateNotesRequest Core.<$> (o Core..:? "notes"))

instance Core.ToJSON BatchCreateNotesRequest where
  toJSON BatchCreateNotesRequest {..} =
    Core.object (Core.catMaybes [("notes" Core..=) Core.<$> notes])

-- | Required. The notes to create. Max allowed length is 1000.
--
-- /See:/ 'newBatchCreateNotesRequest_Notes' smart constructor.
newtype BatchCreateNotesRequest_Notes = BatchCreateNotesRequest_Notes
  { additional :: (Core.HashMap Core.Text Note)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BatchCreateNotesRequest_Notes' with the minimum fields required to make a request.
newBatchCreateNotesRequest_Notes ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Note ->
  BatchCreateNotesRequest_Notes
newBatchCreateNotesRequest_Notes additional =
  BatchCreateNotesRequest_Notes {additional = additional}

instance Core.FromJSON BatchCreateNotesRequest_Notes where
  parseJSON =
    Core.withObject
      "BatchCreateNotesRequest_Notes"
      ( \o ->
          BatchCreateNotesRequest_Notes Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON BatchCreateNotesRequest_Notes where
  toJSON BatchCreateNotesRequest_Notes {..} = Core.toJSON additional

-- | Response for creating notes in batch.
--
-- /See:/ 'newBatchCreateNotesResponse' smart constructor.
newtype BatchCreateNotesResponse = BatchCreateNotesResponse
  { -- | The notes that were created.
    notes :: (Core.Maybe [Note])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BatchCreateNotesResponse' with the minimum fields required to make a request.
newBatchCreateNotesResponse ::
  BatchCreateNotesResponse
newBatchCreateNotesResponse =
  BatchCreateNotesResponse {notes = Core.Nothing}

instance Core.FromJSON BatchCreateNotesResponse where
  parseJSON =
    Core.withObject
      "BatchCreateNotesResponse"
      (\o -> BatchCreateNotesResponse Core.<$> (o Core..:? "notes"))

instance Core.ToJSON BatchCreateNotesResponse where
  toJSON BatchCreateNotesResponse {..} =
    Core.object (Core.catMaybes [("notes" Core..=) Core.<$> notes])

-- | Request to create occurrences in batch.
--
-- /See:/ 'newBatchCreateOccurrencesRequest' smart constructor.
newtype BatchCreateOccurrencesRequest = BatchCreateOccurrencesRequest
  { -- | Required. The occurrences to create. Max allowed length is 1000.
    occurrences :: (Core.Maybe [Occurrence])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BatchCreateOccurrencesRequest' with the minimum fields required to make a request.
newBatchCreateOccurrencesRequest ::
  BatchCreateOccurrencesRequest
newBatchCreateOccurrencesRequest =
  BatchCreateOccurrencesRequest {occurrences = Core.Nothing}

instance Core.FromJSON BatchCreateOccurrencesRequest where
  parseJSON =
    Core.withObject
      "BatchCreateOccurrencesRequest"
      ( \o ->
          BatchCreateOccurrencesRequest Core.<$> (o Core..:? "occurrences")
      )

instance Core.ToJSON BatchCreateOccurrencesRequest where
  toJSON BatchCreateOccurrencesRequest {..} =
    Core.object
      (Core.catMaybes [("occurrences" Core..=) Core.<$> occurrences])

-- | Response for creating occurrences in batch.
--
-- /See:/ 'newBatchCreateOccurrencesResponse' smart constructor.
newtype BatchCreateOccurrencesResponse = BatchCreateOccurrencesResponse
  { -- | The occurrences that were created.
    occurrences :: (Core.Maybe [Occurrence])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BatchCreateOccurrencesResponse' with the minimum fields required to make a request.
newBatchCreateOccurrencesResponse ::
  BatchCreateOccurrencesResponse
newBatchCreateOccurrencesResponse =
  BatchCreateOccurrencesResponse {occurrences = Core.Nothing}

instance Core.FromJSON BatchCreateOccurrencesResponse where
  parseJSON =
    Core.withObject
      "BatchCreateOccurrencesResponse"
      ( \o ->
          BatchCreateOccurrencesResponse Core.<$> (o Core..:? "occurrences")
      )

instance Core.ToJSON BatchCreateOccurrencesResponse where
  toJSON BatchCreateOccurrencesResponse {..} =
    Core.object
      (Core.catMaybes [("occurrences" Core..=) Core.<$> occurrences])

-- | Associates @members@, or principals, with a @role@.
--
-- /See:/ 'newBinding' smart constructor.
data Binding = Binding
  { -- | The condition that is associated with this binding. If the condition evaluates to @true@, then this binding applies to the current request. If the condition evaluates to @false@, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the principals in this binding. To learn which resources support conditions in their IAM policies, see the <https://cloud.google.com/iam/help/conditions/resource-policies IAM documentation>.
    condition :: (Core.Maybe Expr),
    -- | Specifies the principals requesting access for a Google Cloud resource. @members@ can have the following values: * @allUsers@: A special identifier that represents anyone who is on the internet; with or without a Google account. * @allAuthenticatedUsers@: A special identifier that represents anyone who is authenticated with a Google account or a service account. Does not include identities that come from external identity providers (IdPs) through identity federation. * @user:{emailid}@: An email address that represents a specific Google account. For example, @alice\@example.com@ . * @serviceAccount:{emailid}@: An email address that represents a Google service account. For example, @my-other-app\@appspot.gserviceaccount.com@. * @serviceAccount:{projectid}.svc.id.goog[{namespace}\/{kubernetes-sa}]@: An identifier for a <https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-service-accounts Kubernetes service account>. For example, @my-project.svc.id.goog[my-namespace\/my-kubernetes-sa]@. *
    -- @group:{emailid}@: An email address that represents a Google group. For example, @admins\@example.com@. * @domain:{domain}@: The G Suite domain (primary) that represents all the users of that domain. For example, @google.com@ or @example.com@. * @principal:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/{pool_id}\/subject\/{subject_attribute_value}@: A single identity in a workforce identity pool. * @principalSet:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/{pool_id}\/group\/{group_id}@: All workforce identities in a group. * @principalSet:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/{pool_id}\/attribute.{attribute_name}\/{attribute_value}@: All workforce identities with a specific attribute value. * @principalSet:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/{pool_id}\/*@: All identities in a workforce identity pool. *
    -- @principal:\/\/iam.googleapis.com\/projects\/{project_number}\/locations\/global\/workloadIdentityPools\/{pool_id}\/subject\/{subject_attribute_value}@: A single identity in a workload identity pool. * @principalSet:\/\/iam.googleapis.com\/projects\/{project_number}\/locations\/global\/workloadIdentityPools\/{pool_id}\/group\/{group_id}@: A workload identity pool group. * @principalSet:\/\/iam.googleapis.com\/projects\/{project_number}\/locations\/global\/workloadIdentityPools\/{pool_id}\/attribute.{attribute_name}\/{attribute_value}@: All identities in a workload identity pool with a certain attribute. * @principalSet:\/\/iam.googleapis.com\/projects\/{project_number}\/locations\/global\/workloadIdentityPools\/{pool_id}\/*@: All identities in a workload identity pool. * @deleted:user:{emailid}?uid={uniqueid}@: An email address (plus unique identifier) representing a user that has been recently deleted. For example, @alice\@example.com?uid=123456789012345678901@. If the user is recovered, this value reverts
    -- to @user:{emailid}@ and the recovered user retains the role in the binding. * @deleted:serviceAccount:{emailid}?uid={uniqueid}@: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, @my-other-app\@appspot.gserviceaccount.com?uid=123456789012345678901@. If the service account is undeleted, this value reverts to @serviceAccount:{emailid}@ and the undeleted service account retains the role in the binding. * @deleted:group:{emailid}?uid={uniqueid}@: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, @admins\@example.com?uid=123456789012345678901@. If the group is recovered, this value reverts to @group:{emailid}@ and the recovered group retains the role in the binding. * @deleted:principal:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/{pool_id}\/subject\/{subject_attribute_value}@: Deleted single identity in a workforce identity pool. For example,
    -- @deleted:principal:\/\/iam.googleapis.com\/locations\/global\/workforcePools\/my-pool-id\/subject\/my-subject-attribute-value@.
    members :: (Core.Maybe [Core.Text]),
    -- | Role that is assigned to the list of @members@, or principals. For example, @roles\/viewer@, @roles\/editor@, or @roles\/owner@. For an overview of the IAM roles and permissions, see the <https://cloud.google.com/iam/docs/roles-overview IAM documentation>. For a list of the available pre-defined roles, see <https://cloud.google.com/iam/docs/understanding-roles here>.
    role' :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Binding' with the minimum fields required to make a request.
newBinding ::
  Binding
newBinding =
  Binding
    { condition = Core.Nothing,
      members = Core.Nothing,
      role' = Core.Nothing
    }

instance Core.FromJSON Binding where
  parseJSON =
    Core.withObject
      "Binding"
      ( \o ->
          Binding
            Core.<$> (o Core..:? "condition")
            Core.<*> (o Core..:? "members")
            Core.<*> (o Core..:? "role")
      )

instance Core.ToJSON Binding where
  toJSON Binding {..} =
    Core.object
      ( Core.catMaybes
          [ ("condition" Core..=) Core.<$> condition,
            ("members" Core..=) Core.<$> members,
            ("role" Core..=) Core.<$> role'
          ]
      )

--
-- /See:/ 'newBuildDefinition' smart constructor.
data BuildDefinition = BuildDefinition
  { buildType :: (Core.Maybe Core.Text),
    externalParameters :: (Core.Maybe BuildDefinition_ExternalParameters),
    internalParameters :: (Core.Maybe BuildDefinition_InternalParameters),
    resolvedDependencies :: (Core.Maybe [ResourceDescriptor])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildDefinition' with the minimum fields required to make a request.
newBuildDefinition ::
  BuildDefinition
newBuildDefinition =
  BuildDefinition
    { buildType = Core.Nothing,
      externalParameters = Core.Nothing,
      internalParameters = Core.Nothing,
      resolvedDependencies = Core.Nothing
    }

instance Core.FromJSON BuildDefinition where
  parseJSON =
    Core.withObject
      "BuildDefinition"
      ( \o ->
          BuildDefinition
            Core.<$> (o Core..:? "buildType")
            Core.<*> (o Core..:? "externalParameters")
            Core.<*> (o Core..:? "internalParameters")
            Core.<*> (o Core..:? "resolvedDependencies")
      )

instance Core.ToJSON BuildDefinition where
  toJSON BuildDefinition {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildType" Core..=) Core.<$> buildType,
            ("externalParameters" Core..=) Core.<$> externalParameters,
            ("internalParameters" Core..=) Core.<$> internalParameters,
            ("resolvedDependencies" Core..=) Core.<$> resolvedDependencies
          ]
      )

--
-- /See:/ 'newBuildDefinition_ExternalParameters' smart constructor.
newtype BuildDefinition_ExternalParameters = BuildDefinition_ExternalParameters
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildDefinition_ExternalParameters' with the minimum fields required to make a request.
newBuildDefinition_ExternalParameters ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  BuildDefinition_ExternalParameters
newBuildDefinition_ExternalParameters additional =
  BuildDefinition_ExternalParameters {additional = additional}

instance Core.FromJSON BuildDefinition_ExternalParameters where
  parseJSON =
    Core.withObject
      "BuildDefinition_ExternalParameters"
      ( \o ->
          BuildDefinition_ExternalParameters
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON BuildDefinition_ExternalParameters where
  toJSON BuildDefinition_ExternalParameters {..} =
    Core.toJSON additional

--
-- /See:/ 'newBuildDefinition_InternalParameters' smart constructor.
newtype BuildDefinition_InternalParameters = BuildDefinition_InternalParameters
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildDefinition_InternalParameters' with the minimum fields required to make a request.
newBuildDefinition_InternalParameters ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  BuildDefinition_InternalParameters
newBuildDefinition_InternalParameters additional =
  BuildDefinition_InternalParameters {additional = additional}

instance Core.FromJSON BuildDefinition_InternalParameters where
  parseJSON =
    Core.withObject
      "BuildDefinition_InternalParameters"
      ( \o ->
          BuildDefinition_InternalParameters
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON BuildDefinition_InternalParameters where
  toJSON BuildDefinition_InternalParameters {..} =
    Core.toJSON additional

--
-- /See:/ 'newBuildMetadata' smart constructor.
data BuildMetadata = BuildMetadata
  { finishedOn :: (Core.Maybe Core.DateTime),
    invocationId :: (Core.Maybe Core.Text),
    startedOn :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildMetadata' with the minimum fields required to make a request.
newBuildMetadata ::
  BuildMetadata
newBuildMetadata =
  BuildMetadata
    { finishedOn = Core.Nothing,
      invocationId = Core.Nothing,
      startedOn = Core.Nothing
    }

instance Core.FromJSON BuildMetadata where
  parseJSON =
    Core.withObject
      "BuildMetadata"
      ( \o ->
          BuildMetadata
            Core.<$> (o Core..:? "finishedOn")
            Core.<*> (o Core..:? "invocationId")
            Core.<*> (o Core..:? "startedOn")
      )

instance Core.ToJSON BuildMetadata where
  toJSON BuildMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("finishedOn" Core..=) Core.<$> finishedOn,
            ("invocationId" Core..=) Core.<$> invocationId,
            ("startedOn" Core..=) Core.<$> startedOn
          ]
      )

-- | Note holding the version of the provider\'s builder and the signature of the provenance message in the build details occurrence.
--
-- /See:/ 'newBuildNote' smart constructor.
newtype BuildNote = BuildNote
  { -- | Required. Immutable. Version of the builder which produced this build.
    builderVersion :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildNote' with the minimum fields required to make a request.
newBuildNote ::
  BuildNote
newBuildNote = BuildNote {builderVersion = Core.Nothing}

instance Core.FromJSON BuildNote where
  parseJSON =
    Core.withObject
      "BuildNote"
      (\o -> BuildNote Core.<$> (o Core..:? "builderVersion"))

instance Core.ToJSON BuildNote where
  toJSON BuildNote {..} =
    Core.object
      ( Core.catMaybes
          [("builderVersion" Core..=) Core.<$> builderVersion]
      )

-- | Details of a build occurrence.
--
-- /See:/ 'newBuildOccurrence' smart constructor.
data BuildOccurrence = BuildOccurrence
  { -- | In-Toto Slsa Provenance V1 represents a slsa provenance meeting the slsa spec, wrapped in an in-toto statement. This allows for direct jsonification of a to-spec in-toto slsa statement with a to-spec slsa provenance.
    inTotoSlsaProvenanceV1 :: (Core.Maybe InTotoSlsaProvenanceV1),
    -- | Deprecated. See InTotoStatement for the replacement. In-toto Provenance representation as defined in spec.
    intotoProvenance :: (Core.Maybe InTotoProvenance),
    -- | In-toto Statement representation as defined in spec. The intoto_statement can contain any type of provenance. The serialized payload of the statement can be stored and signed in the Occurrence\'s envelope.
    intotoStatement :: (Core.Maybe InTotoStatement),
    -- | The actual provenance for the build.
    provenance :: (Core.Maybe BuildProvenance),
    -- | Serialized JSON representation of the provenance, used in generating the build signature in the corresponding build note. After verifying the signature, @provenance_bytes@ can be unmarshalled and compared to the provenance to confirm that it is unchanged. A base64-encoded string representation of the provenance bytes is used for the signature in order to interoperate with openssl which expects this format for signature verification. The serialized form is captured both to avoid ambiguity in how the provenance is marshalled to json as well to prevent incompatibilities with future changes.
    provenanceBytes :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildOccurrence' with the minimum fields required to make a request.
newBuildOccurrence ::
  BuildOccurrence
newBuildOccurrence =
  BuildOccurrence
    { inTotoSlsaProvenanceV1 = Core.Nothing,
      intotoProvenance = Core.Nothing,
      intotoStatement = Core.Nothing,
      provenance = Core.Nothing,
      provenanceBytes = Core.Nothing
    }

instance Core.FromJSON BuildOccurrence where
  parseJSON =
    Core.withObject
      "BuildOccurrence"
      ( \o ->
          BuildOccurrence
            Core.<$> (o Core..:? "inTotoSlsaProvenanceV1")
            Core.<*> (o Core..:? "intotoProvenance")
            Core.<*> (o Core..:? "intotoStatement")
            Core.<*> (o Core..:? "provenance")
            Core.<*> (o Core..:? "provenanceBytes")
      )

instance Core.ToJSON BuildOccurrence where
  toJSON BuildOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("inTotoSlsaProvenanceV1" Core..=)
              Core.<$> inTotoSlsaProvenanceV1,
            ("intotoProvenance" Core..=) Core.<$> intotoProvenance,
            ("intotoStatement" Core..=) Core.<$> intotoStatement,
            ("provenance" Core..=) Core.<$> provenance,
            ("provenanceBytes" Core..=) Core.<$> provenanceBytes
          ]
      )

-- | Provenance of a build. Contains all information needed to verify the full details about the build from source to completion.
--
-- /See:/ 'newBuildProvenance' smart constructor.
data BuildProvenance = BuildProvenance
  { -- | Special options applied to this build. This is a catch-all field where build providers can enter any desired additional details.
    buildOptions :: (Core.Maybe BuildProvenance_BuildOptions),
    -- | Version string of the builder at the time this build was executed.
    builderVersion :: (Core.Maybe Core.Text),
    -- | Output of the build.
    builtArtifacts :: (Core.Maybe [Artifact]),
    -- | Commands requested by the build.
    commands :: (Core.Maybe [Command]),
    -- | Time at which the build was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | E-mail address of the user who initiated this build. Note that this was the user\'s e-mail address at the time the build was initiated; this address may not represent the same end-user for all time.
    creator :: (Core.Maybe Core.Text),
    -- | Time at which execution of the build was finished.
    endTime :: (Core.Maybe Core.DateTime),
    -- | Required. Unique identifier of the build.
    id :: (Core.Maybe Core.Text),
    -- | URI where any logs for this provenance were written.
    logsUri :: (Core.Maybe Core.Text),
    -- | ID of the project.
    projectId :: (Core.Maybe Core.Text),
    -- | Details of the Source input to the build.
    sourceProvenance :: (Core.Maybe Source),
    -- | Time at which execution of the build was started.
    startTime :: (Core.Maybe Core.DateTime),
    -- | Trigger identifier if the build was triggered automatically; empty if not.
    triggerId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildProvenance' with the minimum fields required to make a request.
newBuildProvenance ::
  BuildProvenance
newBuildProvenance =
  BuildProvenance
    { buildOptions = Core.Nothing,
      builderVersion = Core.Nothing,
      builtArtifacts = Core.Nothing,
      commands = Core.Nothing,
      createTime = Core.Nothing,
      creator = Core.Nothing,
      endTime = Core.Nothing,
      id = Core.Nothing,
      logsUri = Core.Nothing,
      projectId = Core.Nothing,
      sourceProvenance = Core.Nothing,
      startTime = Core.Nothing,
      triggerId = Core.Nothing
    }

instance Core.FromJSON BuildProvenance where
  parseJSON =
    Core.withObject
      "BuildProvenance"
      ( \o ->
          BuildProvenance
            Core.<$> (o Core..:? "buildOptions")
            Core.<*> (o Core..:? "builderVersion")
            Core.<*> (o Core..:? "builtArtifacts")
            Core.<*> (o Core..:? "commands")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "creator")
            Core.<*> (o Core..:? "endTime")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "logsUri")
            Core.<*> (o Core..:? "projectId")
            Core.<*> (o Core..:? "sourceProvenance")
            Core.<*> (o Core..:? "startTime")
            Core.<*> (o Core..:? "triggerId")
      )

instance Core.ToJSON BuildProvenance where
  toJSON BuildProvenance {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildOptions" Core..=) Core.<$> buildOptions,
            ("builderVersion" Core..=) Core.<$> builderVersion,
            ("builtArtifacts" Core..=) Core.<$> builtArtifacts,
            ("commands" Core..=) Core.<$> commands,
            ("createTime" Core..=) Core.<$> createTime,
            ("creator" Core..=) Core.<$> creator,
            ("endTime" Core..=) Core.<$> endTime,
            ("id" Core..=) Core.<$> id,
            ("logsUri" Core..=) Core.<$> logsUri,
            ("projectId" Core..=) Core.<$> projectId,
            ("sourceProvenance" Core..=) Core.<$> sourceProvenance,
            ("startTime" Core..=) Core.<$> startTime,
            ("triggerId" Core..=) Core.<$> triggerId
          ]
      )

-- | Special options applied to this build. This is a catch-all field where build providers can enter any desired additional details.
--
-- /See:/ 'newBuildProvenance_BuildOptions' smart constructor.
newtype BuildProvenance_BuildOptions = BuildProvenance_BuildOptions
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildProvenance_BuildOptions' with the minimum fields required to make a request.
newBuildProvenance_BuildOptions ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  BuildProvenance_BuildOptions
newBuildProvenance_BuildOptions additional =
  BuildProvenance_BuildOptions {additional = additional}

instance Core.FromJSON BuildProvenance_BuildOptions where
  parseJSON =
    Core.withObject
      "BuildProvenance_BuildOptions"
      ( \o ->
          BuildProvenance_BuildOptions Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON BuildProvenance_BuildOptions where
  toJSON BuildProvenance_BuildOptions {..} = Core.toJSON additional

-- | A step in the build pipeline. Next ID: 21
--
-- /See:/ 'newBuildStep' smart constructor.
data BuildStep = BuildStep
  { -- | Allow this build step to fail without failing the entire build if and only if the exit code is one of the specified codes. If allow_failure is also specified, this field will take precedence.
    allowExitCodes :: (Core.Maybe [Core.Int32]),
    -- | Allow this build step to fail without failing the entire build. If false, the entire build will fail if this step fails. Otherwise, the build will succeed, but this step will still have a failure status. Error information will be reported in the failure_detail field.
    allowFailure :: (Core.Maybe Core.Bool),
    -- | A list of arguments that will be presented to the step when it is started. If the image used to run the step\'s container has an entrypoint, the @args@ are used as arguments to that entrypoint. If the image does not define an entrypoint, the first element in args is used as the entrypoint, and the remainder will be used as arguments.
    args :: (Core.Maybe [Core.Text]),
    -- | Option to include built-in and custom substitutions as env variables for this build step. This option will override the global option in BuildOption.
    automapSubstitutions :: (Core.Maybe Core.Bool),
    -- | Working directory to use when running this step\'s container. If this value is a relative path, it is relative to the build\'s working directory. If this value is absolute, it may be outside the build\'s working directory, in which case the contents of the path may not be persisted across build step executions, unless a @volume@ for that path is specified. If the build specifies a @RepoSource@ with @dir@ and a step with a @dir@, which specifies an absolute path, the @RepoSource@ @dir@ is ignored for the step\'s execution.
    dir :: (Core.Maybe Core.Text),
    -- | Entrypoint to be used instead of the build step image\'s default entrypoint. If unset, the image\'s default entrypoint is used.
    entrypoint :: (Core.Maybe Core.Text),
    -- | A list of environment variable definitions to be used when running a step. The elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\" being given the value \"VALUE\".
    env :: (Core.Maybe [Core.Text]),
    -- | Output only. Return code from running the step.
    exitCode :: (Core.Maybe Core.Int32),
    -- | Unique identifier for this build step, used in @wait_for@ to reference this build step as a dependency.
    id :: (Core.Maybe Core.Text),
    -- | Required. The name of the container image that will run this particular build step. If the image is available in the host\'s Docker daemon\'s cache, it will be run directly. If not, the host will attempt to pull the image first, using the builder service account\'s credentials if necessary. The Docker daemon\'s cache will already have the latest versions of all of the officially supported build steps (<https://github.com/GoogleCloudPlatform/cloud-builders>). The Docker daemon will also have cached many of the layers for some popular images, like \"ubuntu\", \"debian\", but they will be refreshed at the time you attempt to use them. If you built an image in a previous build step, it will be stored in the host\'s Docker daemon\'s cache and is available to use as the name for a later build step.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Stores timing information for pulling this build step\'s builder image only.
    pullTiming :: (Core.Maybe TimeSpan),
    -- | A shell script to be executed in the step. When script is provided, the user cannot specify the entrypoint or args.
    script :: (Core.Maybe Core.Text),
    -- | A list of environment variables which are encrypted using a Cloud Key Management Service crypto key. These values must be specified in the build\'s @Secret@.
    secretEnv :: (Core.Maybe [Core.Text]),
    -- | Output only. Status of the build step. At this time, build step status is only updated on build completion; step status is not updated in real-time as the build progresses.
    status :: (Core.Maybe BuildStep_Status),
    -- | Time limit for executing this build step. If not defined, the step has no time limit and will be allowed to continue to run until either it completes or the build itself times out.
    timeout :: (Core.Maybe Core.Duration),
    -- | Output only. Stores timing information for executing this build step.
    timing :: (Core.Maybe TimeSpan),
    -- | List of volumes to mount into the build step. Each volume is created as an empty volume prior to execution of the build step. Upon completion of the build, volumes and their contents are discarded. Using a named volume in only one step is not valid as it is indicative of a build request with an incorrect configuration.
    volumes :: (Core.Maybe [Volume]),
    -- | The ID(s) of the step(s) that this build step depends on. This build step will not start until all the build steps in @wait_for@ have completed successfully. If @wait_for@ is empty, this build step will start when all previous build steps in the @Build.Steps@ list have completed successfully.
    waitFor :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuildStep' with the minimum fields required to make a request.
newBuildStep ::
  BuildStep
newBuildStep =
  BuildStep
    { allowExitCodes = Core.Nothing,
      allowFailure = Core.Nothing,
      args = Core.Nothing,
      automapSubstitutions = Core.Nothing,
      dir = Core.Nothing,
      entrypoint = Core.Nothing,
      env = Core.Nothing,
      exitCode = Core.Nothing,
      id = Core.Nothing,
      name = Core.Nothing,
      pullTiming = Core.Nothing,
      script = Core.Nothing,
      secretEnv = Core.Nothing,
      status = Core.Nothing,
      timeout = Core.Nothing,
      timing = Core.Nothing,
      volumes = Core.Nothing,
      waitFor = Core.Nothing
    }

instance Core.FromJSON BuildStep where
  parseJSON =
    Core.withObject
      "BuildStep"
      ( \o ->
          BuildStep
            Core.<$> (o Core..:? "allowExitCodes")
            Core.<*> (o Core..:? "allowFailure")
            Core.<*> (o Core..:? "args")
            Core.<*> (o Core..:? "automapSubstitutions")
            Core.<*> (o Core..:? "dir")
            Core.<*> (o Core..:? "entrypoint")
            Core.<*> (o Core..:? "env")
            Core.<*> (o Core..:? "exitCode")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "pullTiming")
            Core.<*> (o Core..:? "script")
            Core.<*> (o Core..:? "secretEnv")
            Core.<*> (o Core..:? "status")
            Core.<*> (o Core..:? "timeout")
            Core.<*> (o Core..:? "timing")
            Core.<*> (o Core..:? "volumes")
            Core.<*> (o Core..:? "waitFor")
      )

instance Core.ToJSON BuildStep where
  toJSON BuildStep {..} =
    Core.object
      ( Core.catMaybes
          [ ("allowExitCodes" Core..=) Core.<$> allowExitCodes,
            ("allowFailure" Core..=) Core.<$> allowFailure,
            ("args" Core..=) Core.<$> args,
            ("automapSubstitutions" Core..=) Core.<$> automapSubstitutions,
            ("dir" Core..=) Core.<$> dir,
            ("entrypoint" Core..=) Core.<$> entrypoint,
            ("env" Core..=) Core.<$> env,
            ("exitCode" Core..=) Core.<$> exitCode,
            ("id" Core..=) Core.<$> id,
            ("name" Core..=) Core.<$> name,
            ("pullTiming" Core..=) Core.<$> pullTiming,
            ("script" Core..=) Core.<$> script,
            ("secretEnv" Core..=) Core.<$> secretEnv,
            ("status" Core..=) Core.<$> status,
            ("timeout" Core..=) Core.<$> timeout,
            ("timing" Core..=) Core.<$> timing,
            ("volumes" Core..=) Core.<$> volumes,
            ("waitFor" Core..=) Core.<$> waitFor
          ]
      )

--
-- /See:/ 'newBuilderConfig' smart constructor.
newtype BuilderConfig = BuilderConfig
  { id :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'BuilderConfig' with the minimum fields required to make a request.
newBuilderConfig ::
  BuilderConfig
newBuilderConfig = BuilderConfig {id = Core.Nothing}

instance Core.FromJSON BuilderConfig where
  parseJSON =
    Core.withObject
      "BuilderConfig"
      (\o -> BuilderConfig Core.<$> (o Core..:? "id"))

instance Core.ToJSON BuilderConfig where
  toJSON BuilderConfig {..} =
    Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])

-- | Common Vulnerability Scoring System. For details, see https:\/\/www.first.org\/cvss\/specification-document This is a message we will try to use for storing various versions of CVSS rather than making a separate proto for storing a specific version.
--
-- /See:/ 'newCVSS' smart constructor.
data CVSS = CVSS
  { attackComplexity :: (Core.Maybe CVSS_AttackComplexity),
    -- | Base Metrics Represents the intrinsic characteristics of a vulnerability that are constant over time and across user environments.
    attackVector :: (Core.Maybe CVSS_AttackVector),
    authentication :: (Core.Maybe CVSS_Authentication),
    availabilityImpact :: (Core.Maybe CVSS_AvailabilityImpact),
    -- | The base score is a function of the base metric scores.
    baseScore :: (Core.Maybe Core.Double),
    confidentialityImpact :: (Core.Maybe CVSS_ConfidentialityImpact),
    exploitabilityScore :: (Core.Maybe Core.Double),
    impactScore :: (Core.Maybe Core.Double),
    integrityImpact :: (Core.Maybe CVSS_IntegrityImpact),
    privilegesRequired :: (Core.Maybe CVSS_PrivilegesRequired),
    scope :: (Core.Maybe CVSS_Scope),
    userInteraction :: (Core.Maybe CVSS_UserInteraction)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CVSS' with the minimum fields required to make a request.
newCVSS ::
  CVSS
newCVSS =
  CVSS
    { attackComplexity = Core.Nothing,
      attackVector = Core.Nothing,
      authentication = Core.Nothing,
      availabilityImpact = Core.Nothing,
      baseScore = Core.Nothing,
      confidentialityImpact = Core.Nothing,
      exploitabilityScore = Core.Nothing,
      impactScore = Core.Nothing,
      integrityImpact = Core.Nothing,
      privilegesRequired = Core.Nothing,
      scope = Core.Nothing,
      userInteraction = Core.Nothing
    }

instance Core.FromJSON CVSS where
  parseJSON =
    Core.withObject
      "CVSS"
      ( \o ->
          CVSS
            Core.<$> (o Core..:? "attackComplexity")
            Core.<*> (o Core..:? "attackVector")
            Core.<*> (o Core..:? "authentication")
            Core.<*> (o Core..:? "availabilityImpact")
            Core.<*> (o Core..:? "baseScore")
            Core.<*> (o Core..:? "confidentialityImpact")
            Core.<*> (o Core..:? "exploitabilityScore")
            Core.<*> (o Core..:? "impactScore")
            Core.<*> (o Core..:? "integrityImpact")
            Core.<*> (o Core..:? "privilegesRequired")
            Core.<*> (o Core..:? "scope")
            Core.<*> (o Core..:? "userInteraction")
      )

instance Core.ToJSON CVSS where
  toJSON CVSS {..} =
    Core.object
      ( Core.catMaybes
          [ ("attackComplexity" Core..=) Core.<$> attackComplexity,
            ("attackVector" Core..=) Core.<$> attackVector,
            ("authentication" Core..=) Core.<$> authentication,
            ("availabilityImpact" Core..=) Core.<$> availabilityImpact,
            ("baseScore" Core..=) Core.<$> baseScore,
            ("confidentialityImpact" Core..=) Core.<$> confidentialityImpact,
            ("exploitabilityScore" Core..=) Core.<$> exploitabilityScore,
            ("impactScore" Core..=) Core.<$> impactScore,
            ("integrityImpact" Core..=) Core.<$> integrityImpact,
            ("privilegesRequired" Core..=) Core.<$> privilegesRequired,
            ("scope" Core..=) Core.<$> scope,
            ("userInteraction" Core..=) Core.<$> userInteraction
          ]
      )

-- | Common Vulnerability Scoring System version 3. For details, see https:\/\/www.first.org\/cvss\/specification-document
--
-- /See:/ 'newCVSSv3' smart constructor.
data CVSSv3 = CVSSv3
  { attackComplexity :: (Core.Maybe CVSSv3_AttackComplexity),
    -- | Base Metrics Represents the intrinsic characteristics of a vulnerability that are constant over time and across user environments.
    attackVector :: (Core.Maybe CVSSv3_AttackVector),
    availabilityImpact :: (Core.Maybe CVSSv3_AvailabilityImpact),
    -- | The base score is a function of the base metric scores.
    baseScore :: (Core.Maybe Core.Double),
    confidentialityImpact :: (Core.Maybe CVSSv3_ConfidentialityImpact),
    exploitabilityScore :: (Core.Maybe Core.Double),
    impactScore :: (Core.Maybe Core.Double),
    integrityImpact :: (Core.Maybe CVSSv3_IntegrityImpact),
    privilegesRequired :: (Core.Maybe CVSSv3_PrivilegesRequired),
    scope :: (Core.Maybe CVSSv3_Scope),
    userInteraction :: (Core.Maybe CVSSv3_UserInteraction)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CVSSv3' with the minimum fields required to make a request.
newCVSSv3 ::
  CVSSv3
newCVSSv3 =
  CVSSv3
    { attackComplexity = Core.Nothing,
      attackVector = Core.Nothing,
      availabilityImpact = Core.Nothing,
      baseScore = Core.Nothing,
      confidentialityImpact = Core.Nothing,
      exploitabilityScore = Core.Nothing,
      impactScore = Core.Nothing,
      integrityImpact = Core.Nothing,
      privilegesRequired = Core.Nothing,
      scope = Core.Nothing,
      userInteraction = Core.Nothing
    }

instance Core.FromJSON CVSSv3 where
  parseJSON =
    Core.withObject
      "CVSSv3"
      ( \o ->
          CVSSv3
            Core.<$> (o Core..:? "attackComplexity")
            Core.<*> (o Core..:? "attackVector")
            Core.<*> (o Core..:? "availabilityImpact")
            Core.<*> (o Core..:? "baseScore")
            Core.<*> (o Core..:? "confidentialityImpact")
            Core.<*> (o Core..:? "exploitabilityScore")
            Core.<*> (o Core..:? "impactScore")
            Core.<*> (o Core..:? "integrityImpact")
            Core.<*> (o Core..:? "privilegesRequired")
            Core.<*> (o Core..:? "scope")
            Core.<*> (o Core..:? "userInteraction")
      )

instance Core.ToJSON CVSSv3 where
  toJSON CVSSv3 {..} =
    Core.object
      ( Core.catMaybes
          [ ("attackComplexity" Core..=) Core.<$> attackComplexity,
            ("attackVector" Core..=) Core.<$> attackVector,
            ("availabilityImpact" Core..=) Core.<$> availabilityImpact,
            ("baseScore" Core..=) Core.<$> baseScore,
            ("confidentialityImpact" Core..=) Core.<$> confidentialityImpact,
            ("exploitabilityScore" Core..=) Core.<$> exploitabilityScore,
            ("impactScore" Core..=) Core.<$> impactScore,
            ("integrityImpact" Core..=) Core.<$> integrityImpact,
            ("privilegesRequired" Core..=) Core.<$> privilegesRequired,
            ("scope" Core..=) Core.<$> scope,
            ("userInteraction" Core..=) Core.<$> userInteraction
          ]
      )

-- | The category to which the update belongs.
--
-- /See:/ 'newCategory' smart constructor.
data Category = Category
  { -- | The identifier of the category.
    categoryId :: (Core.Maybe Core.Text),
    -- | The localized name of the category.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Category' with the minimum fields required to make a request.
newCategory ::
  Category
newCategory =
  Category {categoryId = Core.Nothing, name = Core.Nothing}

instance Core.FromJSON Category where
  parseJSON =
    Core.withObject
      "Category"
      ( \o ->
          Category
            Core.<$> (o Core..:? "categoryId")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON Category where
  toJSON Category {..} =
    Core.object
      ( Core.catMaybes
          [ ("categoryId" Core..=) Core.<$> categoryId,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | A compliance check that is a CIS benchmark.
--
-- /See:/ 'newCisBenchmark' smart constructor.
data CisBenchmark = CisBenchmark
  { profileLevel :: (Core.Maybe Core.Int32),
    severity :: (Core.Maybe CisBenchmark_Severity)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CisBenchmark' with the minimum fields required to make a request.
newCisBenchmark ::
  CisBenchmark
newCisBenchmark =
  CisBenchmark
    { profileLevel = Core.Nothing,
      severity = Core.Nothing
    }

instance Core.FromJSON CisBenchmark where
  parseJSON =
    Core.withObject
      "CisBenchmark"
      ( \o ->
          CisBenchmark
            Core.<$> (o Core..:? "profileLevel")
            Core.<*> (o Core..:? "severity")
      )

instance Core.ToJSON CisBenchmark where
  toJSON CisBenchmark {..} =
    Core.object
      ( Core.catMaybes
          [ ("profileLevel" Core..=) Core.<$> profileLevel,
            ("severity" Core..=) Core.<$> severity
          ]
      )

-- | A CloudRepoSourceContext denotes a particular revision in a Google Cloud Source Repo.
--
-- /See:/ 'newCloudRepoSourceContext' smart constructor.
data CloudRepoSourceContext = CloudRepoSourceContext
  { -- | An alias, which may be a branch or tag.
    aliasContext :: (Core.Maybe AliasContext),
    -- | The ID of the repo.
    repoId :: (Core.Maybe RepoId),
    -- | A revision ID.
    revisionId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CloudRepoSourceContext' with the minimum fields required to make a request.
newCloudRepoSourceContext ::
  CloudRepoSourceContext
newCloudRepoSourceContext =
  CloudRepoSourceContext
    { aliasContext = Core.Nothing,
      repoId = Core.Nothing,
      revisionId = Core.Nothing
    }

instance Core.FromJSON CloudRepoSourceContext where
  parseJSON =
    Core.withObject
      "CloudRepoSourceContext"
      ( \o ->
          CloudRepoSourceContext
            Core.<$> (o Core..:? "aliasContext")
            Core.<*> (o Core..:? "repoId")
            Core.<*> (o Core..:? "revisionId")
      )

instance Core.ToJSON CloudRepoSourceContext where
  toJSON CloudRepoSourceContext {..} =
    Core.object
      ( Core.catMaybes
          [ ("aliasContext" Core..=) Core.<$> aliasContext,
            ("repoId" Core..=) Core.<$> repoId,
            ("revisionId" Core..=) Core.<$> revisionId
          ]
      )

-- | Empty placeholder to denote that this is a Google Cloud Storage export request.
--
-- /See:/ 'newCloudStorageLocation' smart constructor.
data CloudStorageLocation = CloudStorageLocation
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'CloudStorageLocation' with the minimum fields required to make a request.
newCloudStorageLocation ::
  CloudStorageLocation
newCloudStorageLocation = CloudStorageLocation

instance Core.FromJSON CloudStorageLocation where
  parseJSON =
    Core.withObject
      "CloudStorageLocation"
      (\o -> Core.pure CloudStorageLocation)

instance Core.ToJSON CloudStorageLocation where
  toJSON = Core.const Core.emptyObject

-- | Command describes a step performed as part of the build pipeline.
--
-- /See:/ 'newCommand' smart constructor.
data Command = Command
  { -- | Command-line arguments used when executing this command.
    args :: (Core.Maybe [Core.Text]),
    -- | Working directory (relative to project source root) used when running this command.
    dir :: (Core.Maybe Core.Text),
    -- | Environment variables set before running this command.
    env :: (Core.Maybe [Core.Text]),
    -- | Optional unique identifier for this command, used in wait_for to reference this command as a dependency.
    id :: (Core.Maybe Core.Text),
    -- | Required. Name of the command, as presented on the command line, or if the command is packaged as a Docker container, as presented to @docker pull@.
    name :: (Core.Maybe Core.Text),
    -- | The ID(s) of the command(s) that this command depends on.
    waitFor :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Command' with the minimum fields required to make a request.
newCommand ::
  Command
newCommand =
  Command
    { args = Core.Nothing,
      dir = Core.Nothing,
      env = Core.Nothing,
      id = Core.Nothing,
      name = Core.Nothing,
      waitFor = Core.Nothing
    }

instance Core.FromJSON Command where
  parseJSON =
    Core.withObject
      "Command"
      ( \o ->
          Command
            Core.<$> (o Core..:? "args")
            Core.<*> (o Core..:? "dir")
            Core.<*> (o Core..:? "env")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "waitFor")
      )

instance Core.ToJSON Command where
  toJSON Command {..} =
    Core.object
      ( Core.catMaybes
          [ ("args" Core..=) Core.<$> args,
            ("dir" Core..=) Core.<$> dir,
            ("env" Core..=) Core.<$> env,
            ("id" Core..=) Core.<$> id,
            ("name" Core..=) Core.<$> name,
            ("waitFor" Core..=) Core.<$> waitFor
          ]
      )

-- | Indicates that the builder claims certain fields in this message to be complete.
--
-- /See:/ 'newCompleteness' smart constructor.
data Completeness = Completeness
  { -- | If true, the builder claims that recipe.arguments is complete, meaning that all external inputs are properly captured in the recipe.
    arguments :: (Core.Maybe Core.Bool),
    -- | If true, the builder claims that recipe.environment is claimed to be complete.
    environment :: (Core.Maybe Core.Bool),
    -- | If true, the builder claims that materials are complete, usually through some controls to prevent network access. Sometimes called \"hermetic\".
    materials :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Completeness' with the minimum fields required to make a request.
newCompleteness ::
  Completeness
newCompleteness =
  Completeness
    { arguments = Core.Nothing,
      environment = Core.Nothing,
      materials = Core.Nothing
    }

instance Core.FromJSON Completeness where
  parseJSON =
    Core.withObject
      "Completeness"
      ( \o ->
          Completeness
            Core.<$> (o Core..:? "arguments")
            Core.<*> (o Core..:? "environment")
            Core.<*> (o Core..:? "materials")
      )

instance Core.ToJSON Completeness where
  toJSON Completeness {..} =
    Core.object
      ( Core.catMaybes
          [ ("arguments" Core..=) Core.<$> arguments,
            ("environment" Core..=) Core.<$> environment,
            ("materials" Core..=) Core.<$> materials
          ]
      )

--
-- /See:/ 'newComplianceNote' smart constructor.
data ComplianceNote = ComplianceNote
  { cisBenchmark :: (Core.Maybe CisBenchmark),
    -- | A description about this compliance check.
    description :: (Core.Maybe Core.Text),
    impact :: (Core.Maybe Core.Text),
    -- | A rationale for the existence of this compliance check.
    rationale :: (Core.Maybe Core.Text),
    -- | A description of remediation steps if the compliance check fails.
    remediation :: (Core.Maybe Core.Text),
    -- | Serialized scan instructions with a predefined format.
    scanInstructions :: (Core.Maybe Core.Base64),
    -- | The title that identifies this compliance check.
    title :: (Core.Maybe Core.Text),
    -- | The OS and config versions the benchmark applies to.
    version :: (Core.Maybe [ComplianceVersion])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ComplianceNote' with the minimum fields required to make a request.
newComplianceNote ::
  ComplianceNote
newComplianceNote =
  ComplianceNote
    { cisBenchmark = Core.Nothing,
      description = Core.Nothing,
      impact = Core.Nothing,
      rationale = Core.Nothing,
      remediation = Core.Nothing,
      scanInstructions = Core.Nothing,
      title = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON ComplianceNote where
  parseJSON =
    Core.withObject
      "ComplianceNote"
      ( \o ->
          ComplianceNote
            Core.<$> (o Core..:? "cisBenchmark")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "impact")
            Core.<*> (o Core..:? "rationale")
            Core.<*> (o Core..:? "remediation")
            Core.<*> (o Core..:? "scanInstructions")
            Core.<*> (o Core..:? "title")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON ComplianceNote where
  toJSON ComplianceNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("cisBenchmark" Core..=) Core.<$> cisBenchmark,
            ("description" Core..=) Core.<$> description,
            ("impact" Core..=) Core.<$> impact,
            ("rationale" Core..=) Core.<$> rationale,
            ("remediation" Core..=) Core.<$> remediation,
            ("scanInstructions" Core..=) Core.<$> scanInstructions,
            ("title" Core..=) Core.<$> title,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | An indication that the compliance checks in the associated ComplianceNote were not satisfied for particular resources or a specified reason.
--
-- /See:/ 'newComplianceOccurrence' smart constructor.
data ComplianceOccurrence = ComplianceOccurrence
  { nonComplianceReason :: (Core.Maybe Core.Text),
    nonCompliantFiles :: (Core.Maybe [NonCompliantFile]),
    -- | The OS and config version the benchmark was run on.
    version :: (Core.Maybe ComplianceVersion)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ComplianceOccurrence' with the minimum fields required to make a request.
newComplianceOccurrence ::
  ComplianceOccurrence
newComplianceOccurrence =
  ComplianceOccurrence
    { nonComplianceReason = Core.Nothing,
      nonCompliantFiles = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON ComplianceOccurrence where
  parseJSON =
    Core.withObject
      "ComplianceOccurrence"
      ( \o ->
          ComplianceOccurrence
            Core.<$> (o Core..:? "nonComplianceReason")
            Core.<*> (o Core..:? "nonCompliantFiles")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON ComplianceOccurrence where
  toJSON ComplianceOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("nonComplianceReason" Core..=) Core.<$> nonComplianceReason,
            ("nonCompliantFiles" Core..=) Core.<$> nonCompliantFiles,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | Describes the CIS benchmark version that is applicable to a given OS and os version.
--
-- /See:/ 'newComplianceVersion' smart constructor.
data ComplianceVersion = ComplianceVersion
  { -- | The name of the document that defines this benchmark, e.g. \"CIS Container-Optimized OS\".
    benchmarkDocument :: (Core.Maybe Core.Text),
    -- | The CPE URI (https:\/\/cpe.mitre.org\/specification\/) this benchmark is applicable to.
    cpeUri :: (Core.Maybe Core.Text),
    -- | The version of the benchmark. This is set to the version of the OS-specific CIS document the benchmark is defined in.
    version :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ComplianceVersion' with the minimum fields required to make a request.
newComplianceVersion ::
  ComplianceVersion
newComplianceVersion =
  ComplianceVersion
    { benchmarkDocument = Core.Nothing,
      cpeUri = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON ComplianceVersion where
  parseJSON =
    Core.withObject
      "ComplianceVersion"
      ( \o ->
          ComplianceVersion
            Core.<$> (o Core..:? "benchmarkDocument")
            Core.<*> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON ComplianceVersion where
  toJSON ComplianceVersion {..} =
    Core.object
      ( Core.catMaybes
          [ ("benchmarkDocument" Core..=) Core.<$> benchmarkDocument,
            ("cpeUri" Core..=) Core.<$> cpeUri,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | ApprovalConfig describes configuration for manual approval of a build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig = ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
  { -- | Whether or not approval is needed. If this is set on a build, it will become pending when created, and will need to be explicitly approved to start.
    approvalRequired :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
    { approvalRequired =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
            Core.<$> (o Core..:? "approvalRequired")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig {..} =
      Core.object
        ( Core.catMaybes
            [("approvalRequired" Core..=) Core.<$> approvalRequired]
        )

-- | ApprovalResult describes the decision and associated metadata of a manual approval of a build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult = ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
  { -- | Output only. The time when the approval decision was made.
    approvalTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Email of the user that called the ApproveBuild API to approve or reject a build at the time that the API was called.
    approverAccount :: (Core.Maybe Core.Text),
    -- | Optional. An optional comment for this manual approval result.
    comment :: (Core.Maybe Core.Text),
    -- | Required. The decision of this manual approval.
    decision ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult_Decision
      ),
    -- | Optional. An optional URL tied to this manual approval result. This field is essentially the same as comment, except that it will be rendered by the UI differently. An example use case is a link to an external job that approved this Build.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
newContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
    { approvalTime =
        Core.Nothing,
      approverAccount = Core.Nothing,
      comment = Core.Nothing,
      decision = Core.Nothing,
      url = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
            Core.<$> (o Core..:? "approvalTime")
            Core.<*> (o Core..:? "approverAccount")
            Core.<*> (o Core..:? "comment")
            Core.<*> (o Core..:? "decision")
            Core.<*> (o Core..:? "url")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult {..} =
      Core.object
        ( Core.catMaybes
            [ ("approvalTime" Core..=) Core.<$> approvalTime,
              ("approverAccount" Core..=) Core.<$> approverAccount,
              ("comment" Core..=) Core.<$> comment,
              ("decision" Core..=) Core.<$> decision,
              ("url" Core..=) Core.<$> url
            ]
        )

-- | Artifacts produced by a build that should be uploaded upon successful completion of all build steps.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts = ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
  { -- | Optional. A list of Go modules to be uploaded to Artifact Registry upon successful completion of all build steps. If any objects fail to be pushed, the build is marked FAILURE.
    goModules ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule]
      ),
    -- | A list of images to be pushed upon the successful completion of all build steps. The images will be pushed using the builder service account\'s credentials. The digests of the pushed images will be stored in the Build resource\'s results field. If any of the images fail to be pushed, the build is marked FAILURE.
    images :: (Core.Maybe [Core.Text]),
    -- | A list of Maven artifacts to be uploaded to Artifact Registry upon successful completion of all build steps. Artifacts in the workspace matching specified paths globs will be uploaded to the specified Artifact Registry repository using the builder service account\'s credentials. If any artifacts fail to be pushed, the build is marked FAILURE.
    mavenArtifacts ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact]
      ),
    -- | A list of npm packages to be uploaded to Artifact Registry upon successful completion of all build steps. Npm packages in the specified paths will be uploaded to the specified Artifact Registry repository using the builder service account\'s credentials. If any packages fail to be pushed, the build is marked FAILURE.
    npmPackages ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage]
      ),
    -- | A list of objects to be uploaded to Cloud Storage upon successful completion of all build steps. Files in the workspace matching specified paths globs will be uploaded to the specified Cloud Storage location using the builder service account\'s credentials. The location and generation of the uploaded objects will be stored in the Build resource\'s results field. If any objects fail to be pushed, the build is marked FAILURE.
    objects ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
      ),
    -- | A list of Python packages to be uploaded to Artifact Registry upon successful completion of all build steps. The build service account credentials will be used to perform the upload. If any objects fail to be pushed, the build is marked FAILURE.
    pythonPackages ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage]
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
newContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
    { goModules =
        Core.Nothing,
      images = Core.Nothing,
      mavenArtifacts = Core.Nothing,
      npmPackages = Core.Nothing,
      objects = Core.Nothing,
      pythonPackages = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
            Core.<$> (o Core..:? "goModules")
            Core.<*> (o Core..:? "images")
            Core.<*> (o Core..:? "mavenArtifacts")
            Core.<*> (o Core..:? "npmPackages")
            Core.<*> (o Core..:? "objects")
            Core.<*> (o Core..:? "pythonPackages")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts {..} =
    Core.object
      ( Core.catMaybes
          [ ("goModules" Core..=) Core.<$> goModules,
            ("images" Core..=) Core.<$> images,
            ("mavenArtifacts" Core..=) Core.<$> mavenArtifacts,
            ("npmPackages" Core..=) Core.<$> npmPackages,
            ("objects" Core..=) Core.<$> objects,
            ("pythonPackages" Core..=) Core.<$> pythonPackages
          ]
      )

-- | Files in the workspace to upload to Cloud Storage upon successful completion of all build steps.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects = ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
  { -- | Cloud Storage bucket and optional object path, in the form \"gs:\/\/bucket\/path\/to\/somewhere\/\". (see <https://cloud.google.com/storage/docs/bucket-naming#requirements Bucket Name Requirements>). Files in the workspace matching any path pattern will be uploaded to Cloud Storage with this location as a prefix.
    location :: (Core.Maybe Core.Text),
    -- | Path globs used to match files in the build\'s workspace.
    paths :: (Core.Maybe [Core.Text]),
    -- | Output only. Stores timing information for pushing all artifact objects.
    timing :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
    { location =
        Core.Nothing,
      paths = Core.Nothing,
      timing = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
            Core.<$> (o Core..:? "location")
            Core.<*> (o Core..:? "paths")
            Core.<*> (o Core..:? "timing")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsArtifactObjects {..} =
      Core.object
        ( Core.catMaybes
            [ ("location" Core..=) Core.<$> location,
              ("paths" Core..=) Core.<$> paths,
              ("timing" Core..=) Core.<$> timing
            ]
        )

-- | Go module to upload to Artifact Registry upon successful completion of all build steps. A module refers to all dependencies in a go.mod file.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule = ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
  { -- | Optional. The Go module\'s \"module path\". e.g. example.com\/foo\/v2
    modulePath :: (Core.Maybe Core.Text),
    -- | Optional. The Go module\'s semantic version in the form vX.Y.Z. e.g. v0.1.1 Pre-release identifiers can also be added by appending a dash and dot separated ASCII alphanumeric characters and hyphens. e.g. v0.2.3-alpha.x.12m.5
    moduleVersion :: (Core.Maybe Core.Text),
    -- | Optional. Location of the Artifact Registry repository. i.e. us-east1 Defaults to the build’s location.
    repositoryLocation :: (Core.Maybe Core.Text),
    -- | Optional. Artifact Registry repository name. Specified Go modules will be zipped and uploaded to Artifact Registry with this location as a prefix. e.g. my-go-repo
    repositoryName :: (Core.Maybe Core.Text),
    -- | Optional. Project ID of the Artifact Registry repository. Defaults to the build project.
    repositoryProjectId :: (Core.Maybe Core.Text),
    -- | Optional. Source path of the go.mod file in the build\'s workspace. If not specified, this will default to the current directory. e.g. ~\/code\/go\/mypackage
    sourcePath :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
    { modulePath =
        Core.Nothing,
      moduleVersion = Core.Nothing,
      repositoryLocation = Core.Nothing,
      repositoryName = Core.Nothing,
      repositoryProjectId = Core.Nothing,
      sourcePath = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
            Core.<$> (o Core..:? "modulePath")
            Core.<*> (o Core..:? "moduleVersion")
            Core.<*> (o Core..:? "repositoryLocation")
            Core.<*> (o Core..:? "repositoryName")
            Core.<*> (o Core..:? "repositoryProjectId")
            Core.<*> (o Core..:? "sourcePath")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsGoModule {..} =
      Core.object
        ( Core.catMaybes
            [ ("modulePath" Core..=) Core.<$> modulePath,
              ("moduleVersion" Core..=) Core.<$> moduleVersion,
              ("repositoryLocation" Core..=) Core.<$> repositoryLocation,
              ("repositoryName" Core..=) Core.<$> repositoryName,
              ("repositoryProjectId" Core..=) Core.<$> repositoryProjectId,
              ("sourcePath" Core..=) Core.<$> sourcePath
            ]
        )

-- | A Maven artifact to upload to Artifact Registry upon successful completion of all build steps.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact = ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
  { -- | Maven @artifactId@ value used when uploading the artifact to Artifact Registry.
    artifactId :: (Core.Maybe Core.Text),
    -- | Maven @groupId@ value used when uploading the artifact to Artifact Registry.
    groupId :: (Core.Maybe Core.Text),
    -- | Path to an artifact in the build\'s workspace to be uploaded to Artifact Registry. This can be either an absolute path, e.g. \/workspace\/my-app\/target\/my-app-1.0.SNAPSHOT.jar or a relative path from \/workspace, e.g. my-app\/target\/my-app-1.0.SNAPSHOT.jar.
    path :: (Core.Maybe Core.Text),
    -- | Artifact Registry repository, in the form \"https:\/\/$REGION-maven.pkg.dev\/$PROJECT\/$REPOSITORY\" Artifact in the workspace specified by path will be uploaded to Artifact Registry with this location as a prefix.
    repository :: (Core.Maybe Core.Text),
    -- | Maven @version@ value used when uploading the artifact to Artifact Registry.
    version :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
    { artifactId =
        Core.Nothing,
      groupId = Core.Nothing,
      path = Core.Nothing,
      repository = Core.Nothing,
      version = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
            Core.<$> (o Core..:? "artifactId")
            Core.<*> (o Core..:? "groupId")
            Core.<*> (o Core..:? "path")
            Core.<*> (o Core..:? "repository")
            Core.<*> (o Core..:? "version")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsMavenArtifact {..} =
      Core.object
        ( Core.catMaybes
            [ ("artifactId" Core..=) Core.<$> artifactId,
              ("groupId" Core..=) Core.<$> groupId,
              ("path" Core..=) Core.<$> path,
              ("repository" Core..=) Core.<$> repository,
              ("version" Core..=) Core.<$> version
            ]
        )

-- | Npm package to upload to Artifact Registry upon successful completion of all build steps.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage = ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
  { -- | Path to the package.json. e.g. workspace\/path\/to\/package
    packagePath :: (Core.Maybe Core.Text),
    -- | Artifact Registry repository, in the form \"https:\/\/$REGION-npm.pkg.dev\/$PROJECT\/$REPOSITORY\" Npm package in the workspace specified by path will be zipped and uploaded to Artifact Registry with this location as a prefix.
    repository :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
    { packagePath =
        Core.Nothing,
      repository = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
            Core.<$> (o Core..:? "packagePath")
            Core.<*> (o Core..:? "repository")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsNpmPackage {..} =
      Core.object
        ( Core.catMaybes
            [ ("packagePath" Core..=) Core.<$> packagePath,
              ("repository" Core..=) Core.<$> repository
            ]
        )

-- | Python package to upload to Artifact Registry upon successful completion of all build steps. A package can encapsulate multiple objects to be uploaded to a single repository.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage = ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
  { -- | Path globs used to match files in the build\'s workspace. For Python\/ Twine, this is usually @dist\/*@, and sometimes additionally an @.asc@ file.
    paths :: (Core.Maybe [Core.Text]),
    -- | Artifact Registry repository, in the form \"https:\/\/$REGION-python.pkg.dev\/$PROJECT\/$REPOSITORY\" Files in the workspace matching any path pattern will be uploaded to Artifact Registry with this location as a prefix.
    repository :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
newContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
    { paths =
        Core.Nothing,
      repository = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
            Core.<$> (o Core..:? "paths")
            Core.<*> (o Core..:? "repository")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ArtifactsPythonPackage {..} =
      Core.object
        ( Core.catMaybes
            [ ("paths" Core..=) Core.<$> paths,
              ("repository" Core..=) Core.<$> repository
            ]
        )

-- | A build resource in the Cloud Build API. At a high level, a @Build@ describes where to find source code, how to build it (for example, the builder image to run on the source), and where to store the built artifacts. Fields can include the following variables, which will be expanded when the build is created: - $PROJECT/ID: the project ID of the build. - $PROJECT/NUMBER: the project number of the build. - $LOCATION: the location\/region of the build. - $BUILD/ID: the autogenerated ID of the build. - $REPO/NAME: the source repository name specified by RepoSource. - $BRANCH/NAME: the branch name specified by RepoSource. - $TAG/NAME: the tag name specified by RepoSource. - $REVISION/ID or $COMMIT/SHA: the commit SHA specified by RepoSource or resolved from the specified branch or tag. - $SHORT/SHA: first 7 characters of $REVISION/ID or $COMMIT_SHA.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Build' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Build = ContaineranalysisGoogleDevtoolsCloudbuildV1Build
  { -- | Output only. Describes this build\'s approval configuration, status, and result.
    approval ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
      ),
    -- | Artifacts produced by the build that should be uploaded upon successful completion of all build steps.
    artifacts :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1Artifacts),
    -- | Secrets and secret environment variables.
    availableSecrets :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets),
    -- | Output only. The ID of the @BuildTrigger@ that triggered this build, if it was triggered automatically.
    buildTriggerId :: (Core.Maybe Core.Text),
    -- | Output only. Time at which the request to create the build was received.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Optional. Dependencies that the Cloud Build worker will fetch before executing user steps.
    dependencies ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency]
      ),
    -- | Output only. Contains information about the build when status=FAILURE.
    failureInfo ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
      ),
    -- | Output only. Time at which execution of the build was finished. The difference between finish/time and start/time is the duration of the build\'s execution.
    finishTime :: (Core.Maybe Core.DateTime),
    -- | Optional. Configuration for git operations.
    gitConfig :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig),
    -- | Output only. Unique identifier of the build.
    id :: (Core.Maybe Core.Text),
    -- | A list of images to be pushed upon the successful completion of all build steps. The images are pushed using the builder service account\'s credentials. The digests of the pushed images will be stored in the @Build@ resource\'s results field. If any of the images fail to be pushed, the build status is marked @FAILURE@.
    images :: (Core.Maybe [Core.Text]),
    -- | Output only. URL to logs for this build in Google Cloud Console.
    logUrl :: (Core.Maybe Core.Text),
    -- | Cloud Storage bucket where logs should be written (see <https://cloud.google.com/storage/docs/bucket-naming#requirements Bucket Name Requirements>). Logs file names will be of the format @${logs_bucket}\/log-${build_id}.txt@.
    logsBucket :: (Core.Maybe Core.Text),
    -- | Output only. The \'Build\' name with format: @projects\/{project}\/locations\/{location}\/builds\/{build}@, where {build} is a unique identifier generated by the service.
    name :: (Core.Maybe Core.Text),
    -- | Special options for this build.
    options ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
      ),
    -- | Output only. ID of the project.
    projectId :: (Core.Maybe Core.Text),
    -- | TTL in queue for this build. If provided and the build is enqueued longer than this value, the build will expire and the build status will be @EXPIRED@. The TTL starts ticking from create_time.
    queueTtl :: (Core.Maybe Core.Duration),
    -- | Output only. Results of the build.
    results :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1Results),
    -- | Secrets to decrypt using Cloud Key Management Service. Note: Secret Manager is the recommended technique for managing sensitive data with Cloud Build. Use @available_secrets@ to configure builds to access secrets from Secret Manager. For instructions, see: https:\/\/cloud.google.com\/cloud-build\/docs\/securing-builds\/use-secrets
    secrets :: (Core.Maybe [ContaineranalysisGoogleDevtoolsCloudbuildV1Secret]),
    -- | IAM service account whose credentials will be used at build runtime. Must be of the format @projects\/{PROJECT_ID}\/serviceAccounts\/{ACCOUNT}@. ACCOUNT can be email address or uniqueId of the service account.
    serviceAccount :: (Core.Maybe Core.Text),
    -- | Optional. The location of the source files to build.
    source :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1Source),
    -- | Output only. A permanent fixed identifier for source.
    sourceProvenance ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
      ),
    -- | Output only. Time at which execution of the build was started.
    startTime :: (Core.Maybe Core.DateTime),
    -- | Output only. Status of the build.
    status ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Status
      ),
    -- | Output only. Customer-readable message about the current status.
    statusDetail :: (Core.Maybe Core.Text),
    -- | Required. The operations to be performed on the workspace.
    steps :: (Core.Maybe [ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep]),
    -- | Substitutions data for @Build@ resource.
    substitutions ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
      ),
    -- | Tags for annotation of a @Build@. These are not docker tags.
    tags :: (Core.Maybe [Core.Text]),
    -- | Amount of time that this build should be allowed to run, to second granularity. If this amount of time elapses, work on the build will cease and the build status will be @TIMEOUT@. @timeout@ starts ticking from @startTime@. Default time is 60 minutes.
    timeout :: (Core.Maybe Core.Duration),
    -- | Output only. Stores timing information for phases of the build. Valid keys are: * BUILD: time to execute all build steps. * PUSH: time to push all artifacts including docker images and non docker artifacts. * FETCHSOURCE: time to fetch source. * SETUPBUILD: time to set up build. If the build does not specify source or images, these keys will not be included.
    timing ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
      ),
    -- | Output only. Non-fatal problems encountered during the execution of the build.
    warnings ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning]
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Build' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Build ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Build
newContaineranalysisGoogleDevtoolsCloudbuildV1Build =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Build
    { approval =
        Core.Nothing,
      artifacts = Core.Nothing,
      availableSecrets = Core.Nothing,
      buildTriggerId = Core.Nothing,
      createTime = Core.Nothing,
      dependencies = Core.Nothing,
      failureInfo = Core.Nothing,
      finishTime = Core.Nothing,
      gitConfig = Core.Nothing,
      id = Core.Nothing,
      images = Core.Nothing,
      logUrl = Core.Nothing,
      logsBucket = Core.Nothing,
      name = Core.Nothing,
      options = Core.Nothing,
      projectId = Core.Nothing,
      queueTtl = Core.Nothing,
      results = Core.Nothing,
      secrets = Core.Nothing,
      serviceAccount = Core.Nothing,
      source = Core.Nothing,
      sourceProvenance = Core.Nothing,
      startTime = Core.Nothing,
      status = Core.Nothing,
      statusDetail = Core.Nothing,
      steps = Core.Nothing,
      substitutions = Core.Nothing,
      tags = Core.Nothing,
      timeout = Core.Nothing,
      timing = Core.Nothing,
      warnings = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Build"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build
            Core.<$> (o Core..:? "approval")
            Core.<*> (o Core..:? "artifacts")
            Core.<*> (o Core..:? "availableSecrets")
            Core.<*> (o Core..:? "buildTriggerId")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "dependencies")
            Core.<*> (o Core..:? "failureInfo")
            Core.<*> (o Core..:? "finishTime")
            Core.<*> (o Core..:? "gitConfig")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "images")
            Core.<*> (o Core..:? "logUrl")
            Core.<*> (o Core..:? "logsBucket")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "options")
            Core.<*> (o Core..:? "projectId")
            Core.<*> (o Core..:? "queueTtl")
            Core.<*> (o Core..:? "results")
            Core.<*> (o Core..:? "secrets")
            Core.<*> (o Core..:? "serviceAccount")
            Core.<*> (o Core..:? "source")
            Core.<*> (o Core..:? "sourceProvenance")
            Core.<*> (o Core..:? "startTime")
            Core.<*> (o Core..:? "status")
            Core.<*> (o Core..:? "statusDetail")
            Core.<*> (o Core..:? "steps")
            Core.<*> (o Core..:? "substitutions")
            Core.<*> (o Core..:? "tags")
            Core.<*> (o Core..:? "timeout")
            Core.<*> (o Core..:? "timing")
            Core.<*> (o Core..:? "warnings")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Build {..} =
    Core.object
      ( Core.catMaybes
          [ ("approval" Core..=) Core.<$> approval,
            ("artifacts" Core..=) Core.<$> artifacts,
            ("availableSecrets" Core..=) Core.<$> availableSecrets,
            ("buildTriggerId" Core..=) Core.<$> buildTriggerId,
            ("createTime" Core..=) Core.<$> createTime,
            ("dependencies" Core..=) Core.<$> dependencies,
            ("failureInfo" Core..=) Core.<$> failureInfo,
            ("finishTime" Core..=) Core.<$> finishTime,
            ("gitConfig" Core..=) Core.<$> gitConfig,
            ("id" Core..=) Core.<$> id,
            ("images" Core..=) Core.<$> images,
            ("logUrl" Core..=) Core.<$> logUrl,
            ("logsBucket" Core..=) Core.<$> logsBucket,
            ("name" Core..=) Core.<$> name,
            ("options" Core..=) Core.<$> options,
            ("projectId" Core..=) Core.<$> projectId,
            ("queueTtl" Core..=) Core.<$> queueTtl,
            ("results" Core..=) Core.<$> results,
            ("secrets" Core..=) Core.<$> secrets,
            ("serviceAccount" Core..=) Core.<$> serviceAccount,
            ("source" Core..=) Core.<$> source,
            ("sourceProvenance" Core..=) Core.<$> sourceProvenance,
            ("startTime" Core..=) Core.<$> startTime,
            ("status" Core..=) Core.<$> status,
            ("statusDetail" Core..=) Core.<$> statusDetail,
            ("steps" Core..=) Core.<$> steps,
            ("substitutions" Core..=) Core.<$> substitutions,
            ("tags" Core..=) Core.<$> tags,
            ("timeout" Core..=) Core.<$> timeout,
            ("timing" Core..=) Core.<$> timing,
            ("warnings" Core..=) Core.<$> warnings
          ]
      )

-- | Substitutions data for @Build@ resource.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions = ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Substitutions {..} =
      Core.toJSON additional

-- | Output only. Stores timing information for phases of the build. Valid keys are: * BUILD: time to execute all build steps. * PUSH: time to push all artifacts including docker images and non docker artifacts. * FETCHSOURCE: time to fetch source. * SETUPBUILD: time to set up build. If the build does not specify source or images, these keys will not be included.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing = ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
  { additional ::
      ( Core.HashMap
          Core.Text
          ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing ::
  -- |  See 'additional'.
  Core.HashMap
    Core.Text
    ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
newContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Build_Timing {..} =
    Core.toJSON additional

-- | BuildApproval describes a build\'s approval configuration, state, and result.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
  { -- | Output only. Configuration for manual approval of this build.
    config ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalConfig
      ),
    -- | Output only. Result of manual approval for this Build.
    result ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ApprovalResult
      ),
    -- | Output only. The state of this build\'s approval.
    state ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval_State
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
    { config =
        Core.Nothing,
      result = Core.Nothing,
      state = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
            Core.<$> (o Core..:? "config")
            Core.<*> (o Core..:? "result")
            Core.<*> (o Core..:? "state")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1BuildApproval {..} =
    Core.object
      ( Core.catMaybes
          [ ("config" Core..=) Core.<$> config,
            ("result" Core..=) Core.<$> result,
            ("state" Core..=) Core.<$> state
          ]
      )

-- | A fatal problem encountered during the execution of the build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
  { -- | Explains the failure issue in more detail using hard-coded text.
    detail :: (Core.Maybe Core.Text),
    -- | The name of the failure.
    type' ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo_Type
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
    { detail =
        Core.Nothing,
      type' = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
            Core.<$> (o Core..:? "detail")
            Core.<*> (o Core..:? "type")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildFailureInfo {..} =
      Core.object
        ( Core.catMaybes
            [ ("detail" Core..=) Core.<$> detail,
              ("type" Core..=) Core.<$> type'
            ]
        )

-- | Optional arguments to enable specific features of builds.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
  { -- | Option to include built-in and custom substitutions as env variables for all build steps.
    automapSubstitutions :: (Core.Maybe Core.Bool),
    -- | Optional. Option to specify how default logs buckets are setup.
    defaultLogsBucketBehavior ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_DefaultLogsBucketBehavior
      ),
    -- | Requested disk size for the VM that runs the build. Note that this is /NOT/ \"disk free\"; some of the space will be used by the operating system and build utilities. Also note that this is the minimum disk size that will be allocated for the build -- the build may run with a larger disk than requested. At present, the maximum disk size is 4000GB; builds that request more than the maximum are rejected with an error.
    diskSizeGb :: (Core.Maybe Core.Int64),
    -- | Option to specify whether or not to apply bash style string operations to the substitutions. NOTE: this is always enabled for triggered builds and cannot be overridden in the build configuration file.
    dynamicSubstitutions :: (Core.Maybe Core.Bool),
    -- | Optional. Option to specify whether structured logging is enabled. If true, JSON-formatted logs are parsed as structured logs.
    enableStructuredLogging :: (Core.Maybe Core.Bool),
    -- | A list of global environment variable definitions that will exist for all build steps in this build. If a variable is defined in both globally and in a build step, the variable will use the build step value. The elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\" being given the value \"VALUE\".
    env :: (Core.Maybe [Core.Text]),
    -- | Option to define build log streaming behavior to Cloud Storage.
    logStreamingOption ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_LogStreamingOption
      ),
    -- | Option to specify the logging mode, which determines if and where build logs are stored.
    logging ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_Logging
      ),
    -- | Compute Engine machine type on which to run the build.
    machineType ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_MachineType
      ),
    -- | Optional. Specification for execution on a @WorkerPool@. See <https://cloud.google.com/build/docs/private-pools/run-builds-in-private-pool running builds in a private pool> for more information.
    pool ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
      ),
    -- | Optional. Option to specify the Pub\/Sub topic to receive build status updates.
    pubsubTopic :: (Core.Maybe Core.Text),
    -- | Requested verifiability options.
    requestedVerifyOption ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_RequestedVerifyOption
      ),
    -- | A list of global environment variables, which are encrypted using a Cloud Key Management Service crypto key. These values must be specified in the build\'s @Secret@. These variables will be available to all build steps in this build.
    secretEnv :: (Core.Maybe [Core.Text]),
    -- | Requested hash for SourceProvenance.
    sourceProvenanceHash ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_SourceProvenanceHashItem]
      ),
    -- | Option to specify behavior when there is an error in the substitution checks. NOTE: this is always set to ALLOW_LOOSE for triggered builds and cannot be overridden in the build configuration file.
    substitutionOption ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions_SubstitutionOption
      ),
    -- | Global list of volumes to mount for ALL build steps Each volume is created as an empty volume prior to starting the build process. Upon completion of the build, volumes and their contents are discarded. Global volume names and paths cannot conflict with the volumes defined a build step. Using a global volume in a build with only one step is not valid as it is indicative of a build request with an incorrect configuration.
    volumes :: (Core.Maybe [ContaineranalysisGoogleDevtoolsCloudbuildV1Volume]),
    -- | This field deprecated; please use @pool.name@ instead.
    workerPool :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
    { automapSubstitutions =
        Core.Nothing,
      defaultLogsBucketBehavior =
        Core.Nothing,
      diskSizeGb = Core.Nothing,
      dynamicSubstitutions = Core.Nothing,
      enableStructuredLogging = Core.Nothing,
      env = Core.Nothing,
      logStreamingOption = Core.Nothing,
      logging = Core.Nothing,
      machineType = Core.Nothing,
      pool = Core.Nothing,
      pubsubTopic = Core.Nothing,
      requestedVerifyOption = Core.Nothing,
      secretEnv = Core.Nothing,
      sourceProvenanceHash = Core.Nothing,
      substitutionOption = Core.Nothing,
      volumes = Core.Nothing,
      workerPool = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
            Core.<$> (o Core..:? "automapSubstitutions")
            Core.<*> (o Core..:? "defaultLogsBucketBehavior")
            Core.<*> (o Core..:? "diskSizeGb" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "dynamicSubstitutions")
            Core.<*> (o Core..:? "enableStructuredLogging")
            Core.<*> (o Core..:? "env")
            Core.<*> (o Core..:? "logStreamingOption")
            Core.<*> (o Core..:? "logging")
            Core.<*> (o Core..:? "machineType")
            Core.<*> (o Core..:? "pool")
            Core.<*> (o Core..:? "pubsubTopic")
            Core.<*> (o Core..:? "requestedVerifyOption")
            Core.<*> (o Core..:? "secretEnv")
            Core.<*> (o Core..:? "sourceProvenanceHash")
            Core.<*> (o Core..:? "substitutionOption")
            Core.<*> (o Core..:? "volumes")
            Core.<*> (o Core..:? "workerPool")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptions {..} =
    Core.object
      ( Core.catMaybes
          [ ("automapSubstitutions" Core..=) Core.<$> automapSubstitutions,
            ("defaultLogsBucketBehavior" Core..=)
              Core.<$> defaultLogsBucketBehavior,
            ("diskSizeGb" Core..=) Core.. Core.AsText Core.<$> diskSizeGb,
            ("dynamicSubstitutions" Core..=) Core.<$> dynamicSubstitutions,
            ("enableStructuredLogging" Core..=)
              Core.<$> enableStructuredLogging,
            ("env" Core..=) Core.<$> env,
            ("logStreamingOption" Core..=) Core.<$> logStreamingOption,
            ("logging" Core..=) Core.<$> logging,
            ("machineType" Core..=) Core.<$> machineType,
            ("pool" Core..=) Core.<$> pool,
            ("pubsubTopic" Core..=) Core.<$> pubsubTopic,
            ("requestedVerifyOption" Core..=) Core.<$> requestedVerifyOption,
            ("secretEnv" Core..=) Core.<$> secretEnv,
            ("sourceProvenanceHash" Core..=) Core.<$> sourceProvenanceHash,
            ("substitutionOption" Core..=) Core.<$> substitutionOption,
            ("volumes" Core..=) Core.<$> volumes,
            ("workerPool" Core..=) Core.<$> workerPool
          ]
      )

-- | Details about how a build should be executed on a @WorkerPool@. See <https://cloud.google.com/build/docs/private-pools/run-builds-in-private-pool running builds in a private pool> for more information.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
  { -- | The @WorkerPool@ resource to execute the build on. You must have @cloudbuild.workerpools.use@ on the project hosting the WorkerPool. Format projects\/{project}\/locations\/{location}\/workerPools\/{workerPoolId}
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
    { name =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
            Core.<$> (o Core..:? "name")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildOptionsPoolOption {..} =
      Core.object (Core.catMaybes [("name" Core..=) Core.<$> name])

-- | A step in the build pipeline.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
  { -- | Allow this build step to fail without failing the entire build if and only if the exit code is one of the specified codes. If allow_failure is also specified, this field will take precedence.
    allowExitCodes :: (Core.Maybe [Core.Int32]),
    -- | Allow this build step to fail without failing the entire build. If false, the entire build will fail if this step fails. Otherwise, the build will succeed, but this step will still have a failure status. Error information will be reported in the failure_detail field.
    allowFailure :: (Core.Maybe Core.Bool),
    -- | A list of arguments that will be presented to the step when it is started. If the image used to run the step\'s container has an entrypoint, the @args@ are used as arguments to that entrypoint. If the image does not define an entrypoint, the first element in args is used as the entrypoint, and the remainder will be used as arguments.
    args :: (Core.Maybe [Core.Text]),
    -- | Option to include built-in and custom substitutions as env variables for this build step. This option will override the global option in BuildOption.
    automapSubstitutions :: (Core.Maybe Core.Bool),
    -- | Working directory to use when running this step\'s container. If this value is a relative path, it is relative to the build\'s working directory. If this value is absolute, it may be outside the build\'s working directory, in which case the contents of the path may not be persisted across build step executions, unless a @volume@ for that path is specified. If the build specifies a @RepoSource@ with @dir@ and a step with a @dir@, which specifies an absolute path, the @RepoSource@ @dir@ is ignored for the step\'s execution.
    dir :: (Core.Maybe Core.Text),
    -- | Entrypoint to be used instead of the build step image\'s default entrypoint. If unset, the image\'s default entrypoint is used.
    entrypoint :: (Core.Maybe Core.Text),
    -- | A list of environment variable definitions to be used when running a step. The elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\" being given the value \"VALUE\".
    env :: (Core.Maybe [Core.Text]),
    -- | Output only. Return code from running the step.
    exitCode :: (Core.Maybe Core.Int32),
    -- | Unique identifier for this build step, used in @wait_for@ to reference this build step as a dependency.
    id :: (Core.Maybe Core.Text),
    -- | Required. The name of the container image that will run this particular build step. If the image is available in the host\'s Docker daemon\'s cache, it will be run directly. If not, the host will attempt to pull the image first, using the builder service account\'s credentials if necessary. The Docker daemon\'s cache will already have the latest versions of all of the officially supported build steps (<https://github.com/GoogleCloudPlatform/cloud-builders>). The Docker daemon will also have cached many of the layers for some popular images, like \"ubuntu\", \"debian\", but they will be refreshed at the time you attempt to use them. If you built an image in a previous build step, it will be stored in the host\'s Docker daemon\'s cache and is available to use as the name for a later build step.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Stores timing information for pulling this build step\'s builder image only.
    pullTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | A shell script to be executed in the step. When script is provided, the user cannot specify the entrypoint or args.
    script :: (Core.Maybe Core.Text),
    -- | A list of environment variables which are encrypted using a Cloud Key Management Service crypto key. These values must be specified in the build\'s @Secret@.
    secretEnv :: (Core.Maybe [Core.Text]),
    -- | Output only. Status of the build step. At this time, build step status is only updated on build completion; step status is not updated in real-time as the build progresses.
    status ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep_Status
      ),
    -- | Time limit for executing this build step. If not defined, the step has no time limit and will be allowed to continue to run until either it completes or the build itself times out.
    timeout :: (Core.Maybe Core.Duration),
    -- | Output only. Stores timing information for executing this build step.
    timing :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | List of volumes to mount into the build step. Each volume is created as an empty volume prior to execution of the build step. Upon completion of the build, volumes and their contents are discarded. Using a named volume in only one step is not valid as it is indicative of a build request with an incorrect configuration.
    volumes :: (Core.Maybe [ContaineranalysisGoogleDevtoolsCloudbuildV1Volume]),
    -- | The ID(s) of the step(s) that this build step depends on. This build step will not start until all the build steps in @wait_for@ have completed successfully. If @wait_for@ is empty, this build step will start when all previous build steps in the @Build.Steps@ list have completed successfully.
    waitFor :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
    { allowExitCodes =
        Core.Nothing,
      allowFailure = Core.Nothing,
      args = Core.Nothing,
      automapSubstitutions = Core.Nothing,
      dir = Core.Nothing,
      entrypoint = Core.Nothing,
      env = Core.Nothing,
      exitCode = Core.Nothing,
      id = Core.Nothing,
      name = Core.Nothing,
      pullTiming = Core.Nothing,
      script = Core.Nothing,
      secretEnv = Core.Nothing,
      status = Core.Nothing,
      timeout = Core.Nothing,
      timing = Core.Nothing,
      volumes = Core.Nothing,
      waitFor = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
            Core.<$> (o Core..:? "allowExitCodes")
            Core.<*> (o Core..:? "allowFailure")
            Core.<*> (o Core..:? "args")
            Core.<*> (o Core..:? "automapSubstitutions")
            Core.<*> (o Core..:? "dir")
            Core.<*> (o Core..:? "entrypoint")
            Core.<*> (o Core..:? "env")
            Core.<*> (o Core..:? "exitCode")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "pullTiming")
            Core.<*> (o Core..:? "script")
            Core.<*> (o Core..:? "secretEnv")
            Core.<*> (o Core..:? "status")
            Core.<*> (o Core..:? "timeout")
            Core.<*> (o Core..:? "timing")
            Core.<*> (o Core..:? "volumes")
            Core.<*> (o Core..:? "waitFor")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1BuildStep {..} =
    Core.object
      ( Core.catMaybes
          [ ("allowExitCodes" Core..=) Core.<$> allowExitCodes,
            ("allowFailure" Core..=) Core.<$> allowFailure,
            ("args" Core..=) Core.<$> args,
            ("automapSubstitutions" Core..=) Core.<$> automapSubstitutions,
            ("dir" Core..=) Core.<$> dir,
            ("entrypoint" Core..=) Core.<$> entrypoint,
            ("env" Core..=) Core.<$> env,
            ("exitCode" Core..=) Core.<$> exitCode,
            ("id" Core..=) Core.<$> id,
            ("name" Core..=) Core.<$> name,
            ("pullTiming" Core..=) Core.<$> pullTiming,
            ("script" Core..=) Core.<$> script,
            ("secretEnv" Core..=) Core.<$> secretEnv,
            ("status" Core..=) Core.<$> status,
            ("timeout" Core..=) Core.<$> timeout,
            ("timing" Core..=) Core.<$> timing,
            ("volumes" Core..=) Core.<$> volumes,
            ("waitFor" Core..=) Core.<$> waitFor
          ]
      )

-- | A non-fatal problem encountered during the execution of the build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning = ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
  { -- | The priority for this warning.
    priority ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning_Priority
      ),
    -- | Explanation of the warning generated.
    text :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
newContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
    { priority =
        Core.Nothing,
      text = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
            Core.<$> (o Core..:? "priority")
            Core.<*> (o Core..:? "text")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1BuildWarning {..} =
    Core.object
      ( Core.catMaybes
          [ ("priority" Core..=) Core.<$> priority,
            ("text" Core..=) Core.<$> text
          ]
      )

-- | An image built by the pipeline.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage = ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
  { -- | Docker Registry 2.0 digest.
    digest :: (Core.Maybe Core.Text),
    -- | Name used to push the container image to Google Container Registry, as presented to @docker push@.
    name :: (Core.Maybe Core.Text),
    -- | Output only. Stores timing information for pushing the specified image.
    pushTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
newContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage =
  ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
    { digest =
        Core.Nothing,
      name = Core.Nothing,
      pushTiming = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "pushTiming")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage {..} =
    Core.object
      ( Core.catMaybes
          [ ("digest" Core..=) Core.<$> digest,
            ("name" Core..=) Core.<$> name,
            ("pushTiming" Core..=) Core.<$> pushTiming
          ]
      )

-- | Location of the source in a 2nd-gen Google Cloud Build repository resource.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository = ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
  { -- | Optional. Directory, relative to the source root, in which to run the build.
    dir :: (Core.Maybe Core.Text),
    -- | Required. Name of the Google Cloud Build repository, formatted as @projects\/*\/locations\/*\/connections\/*\/repositories\/*@.
    repository :: (Core.Maybe Core.Text),
    -- | Required. The revision to fetch from the Git repository such as a branch, a tag, a commit SHA, or any Git ref.
    revision :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
newContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository =
  ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
    { dir =
        Core.Nothing,
      repository = Core.Nothing,
      revision = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
            Core.<$> (o Core..:? "dir")
            Core.<*> (o Core..:? "repository")
            Core.<*> (o Core..:? "revision")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository {..} =
      Core.object
        ( Core.catMaybes
            [ ("dir" Core..=) Core.<$> dir,
              ("repository" Core..=) Core.<$> repository,
              ("revision" Core..=) Core.<$> revision
            ]
        )

-- | A dependency that the Cloud Build worker will fetch before executing user steps.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Dependency' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency = ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
  { -- | If set to true disable all dependency fetching (ignoring the default source as well).
    empty :: (Core.Maybe Core.Bool),
    -- | Represents a git repository as a build dependency.
    gitSource ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Dependency ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
newContaineranalysisGoogleDevtoolsCloudbuildV1Dependency =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
    { empty =
        Core.Nothing,
      gitSource = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
            Core.<$> (o Core..:? "empty")
            Core.<*> (o Core..:? "gitSource")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Dependency {..} =
    Core.object
      ( Core.catMaybes
          [ ("empty" Core..=) Core.<$> empty,
            ("gitSource" Core..=) Core.<$> gitSource
          ]
      )

-- | Represents a git repository as a build dependency.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency = ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
  { -- | Optional. How much history should be fetched for the build (default 1, -1 for all history).
    depth :: (Core.Maybe Core.Int64),
    -- | Required. Where should the files be placed on the worker.
    destPath :: (Core.Maybe Core.Text),
    -- | Optional. True if submodules should be fetched too (default false).
    recurseSubmodules :: (Core.Maybe Core.Bool),
    -- | Required. The kind of repo (url or dev connect).
    repository ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
      ),
    -- | Required. The revision that we will fetch the repo at.
    revision :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency =
  ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
    { depth =
        Core.Nothing,
      destPath =
        Core.Nothing,
      recurseSubmodules =
        Core.Nothing,
      repository =
        Core.Nothing,
      revision =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
            Core.<$> (o Core..:? "depth" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "destPath")
            Core.<*> (o Core..:? "recurseSubmodules")
            Core.<*> (o Core..:? "repository")
            Core.<*> (o Core..:? "revision")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceDependency {..} =
      Core.object
        ( Core.catMaybes
            [ ("depth" Core..=) Core.. Core.AsText Core.<$> depth,
              ("destPath" Core..=) Core.<$> destPath,
              ("recurseSubmodules" Core..=) Core.<$> recurseSubmodules,
              ("repository" Core..=) Core.<$> repository,
              ("revision" Core..=) Core.<$> revision
            ]
        )

-- | A repository for a git source.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository = ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
  { -- | The Developer Connect Git repository link or the url that matches a repository link in the current project, formatted as @projects\/*\/locations\/*\/connections\/*\/gitRepositoryLink\/*@
    developerConnect :: (Core.Maybe Core.Text),
    -- | Location of the Git repository.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
newContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository =
  ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
    { developerConnect =
        Core.Nothing,
      url = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
            Core.<$> (o Core..:? "developerConnect")
            Core.<*> (o Core..:? "url")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DependencyGitSourceRepository {..} =
      Core.object
        ( Core.catMaybes
            [ ("developerConnect" Core..=) Core.<$> developerConnect,
              ("url" Core..=) Core.<$> url
            ]
        )

-- | This config defines the location of a source through Developer Connect.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig = ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
  { -- | Required. Directory, relative to the source root, in which to run the build.
    dir :: (Core.Maybe Core.Text),
    -- | Required. The Developer Connect Git repository link, formatted as @projects\/*\/locations\/*\/connections\/*\/gitRepositoryLink\/*@.
    gitRepositoryLink :: (Core.Maybe Core.Text),
    -- | Required. The revision to fetch from the Git repository such as a branch, a tag, a commit SHA, or any Git ref.
    revision :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
newContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig =
  ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
    { dir =
        Core.Nothing,
      gitRepositoryLink =
        Core.Nothing,
      revision = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
            Core.<$> (o Core..:? "dir")
            Core.<*> (o Core..:? "gitRepositoryLink")
            Core.<*> (o Core..:? "revision")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig {..} =
      Core.object
        ( Core.catMaybes
            [ ("dir" Core..=) Core.<$> dir,
              ("gitRepositoryLink" Core..=) Core.<$> gitRepositoryLink,
              ("revision" Core..=) Core.<$> revision
            ]
        )

-- | Container message for hashes of byte content of files, used in SourceProvenance messages to verify integrity of source input to the build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes = ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
  { -- | Collection of file hashes.
    fileHash :: (Core.Maybe [ContaineranalysisGoogleDevtoolsCloudbuildV1Hash])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
newContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes =
  ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
    { fileHash =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
            Core.<$> (o Core..:? "fileHash")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes {..} =
    Core.object
      (Core.catMaybes [("fileHash" Core..=) Core.<$> fileHash])

-- | GitConfig is a configuration for git operations.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig = ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
  { -- | Configuration for HTTP related git operations.
    http ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig =
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
    { http =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
            Core.<$> (o Core..:? "http")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfig {..} =
    Core.object (Core.catMaybes [("http" Core..=) Core.<$> http])

-- | HttpConfig is a configuration for HTTP related git operations.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig = ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
  { -- | SecretVersion resource of the HTTP proxy URL. The Service Account used in the build (either the default Service Account or user-specified Service Account) should have @secretmanager.versions.access@ permissions on this secret. The proxy URL should be in format @protocol:\/\/\@]proxyhost[:port]@.
    proxySecretVersionName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
newContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig =
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
    { proxySecretVersionName =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
            Core.<$> (o Core..:? "proxySecretVersionName")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitConfigHttpConfig {..} =
      Core.object
        ( Core.catMaybes
            [ ("proxySecretVersionName" Core..=)
                Core.<$> proxySecretVersionName
            ]
        )

-- | Location of the source in any accessible Git repository.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1GitSource' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource = ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
  { -- | Optional. Directory, relative to the source root, in which to run the build. This must be a relative path. If a step\'s @dir@ is specified and is an absolute path, this value is ignored for that step\'s execution.
    dir :: (Core.Maybe Core.Text),
    -- | Optional. The revision to fetch from the Git repository such as a branch, a tag, a commit SHA, or any Git ref. Cloud Build uses @git fetch@ to fetch the revision from the Git repository; therefore make sure that the string you provide for @revision@ is parsable by the command. For information on string values accepted by @git fetch@, see https:\/\/git-scm.com\/docs\/gitrevisions#/specifying/revisions. For information on @git fetch@, see https:\/\/git-scm.com\/docs\/git-fetch.
    revision :: (Core.Maybe Core.Text),
    -- | Required. Location of the Git repo to build. This will be used as a @git remote@, see https:\/\/git-scm.com\/docs\/git-remote.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1GitSource ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
newContaineranalysisGoogleDevtoolsCloudbuildV1GitSource =
  ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
    { dir =
        Core.Nothing,
      revision = Core.Nothing,
      url = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
            Core.<$> (o Core..:? "dir")
            Core.<*> (o Core..:? "revision")
            Core.<*> (o Core..:? "url")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource {..} =
    Core.object
      ( Core.catMaybes
          [ ("dir" Core..=) Core.<$> dir,
            ("revision" Core..=) Core.<$> revision,
            ("url" Core..=) Core.<$> url
          ]
      )

-- | Container message for hash values.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Hash' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Hash = ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
  { -- | The type of hash that was performed.
    type' :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1Hash_Type),
    -- | The hash value.
    value :: (Core.Maybe Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Hash' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Hash ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
newContaineranalysisGoogleDevtoolsCloudbuildV1Hash =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
    { type' =
        Core.Nothing,
      value = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Hash"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
            Core.<$> (o Core..:? "type")
            Core.<*> (o Core..:? "value")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Hash
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Hash {..} =
    Core.object
      ( Core.catMaybes
          [ ("type" Core..=) Core.<$> type',
            ("value" Core..=) Core.<$> value
          ]
      )

-- | Pairs a set of secret environment variables mapped to encrypted values with the Cloud KMS key to use to decrypt the value.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret = ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
  { -- | Map of environment variable name to its encrypted value. Secret environment variables must be unique across all of a build\'s secrets, and must be used by at least one build step. Values can be at most 64 KB in size. There can be at most 100 secret values across all of a build\'s secrets.
    envMap ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
      ),
    -- | Resource name of Cloud KMS crypto key to decrypt the encrypted value. In format: projects\//\/locations\//\/keyRings\//\/cryptoKeys\//
    kmsKeyName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret =
  ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
    { envMap =
        Core.Nothing,
      kmsKeyName = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
            Core.<$> (o Core..:? "envMap")
            Core.<*> (o Core..:? "kmsKeyName")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret {..} =
    Core.object
      ( Core.catMaybes
          [ ("envMap" Core..=) Core.<$> envMap,
            ("kmsKeyName" Core..=) Core.<$> kmsKeyName
          ]
      )

-- | Map of environment variable name to its encrypted value. Secret environment variables must be unique across all of a build\'s secrets, and must be used by at least one build step. Values can be at most 64 KB in size. There can be at most 100 secret values across all of a build\'s secrets.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap = ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
  { additional :: (Core.HashMap Core.Text Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Base64 ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
newContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret_EnvMap {..} =
      Core.toJSON additional

-- | Location of the source in a Google Cloud Source Repository.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource = ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
  { -- | Regex matching branches to build. The syntax of the regular expressions accepted is the syntax accepted by RE2 and described at https:\/\/github.com\/google\/re2\/wiki\/Syntax
    branchName :: (Core.Maybe Core.Text),
    -- | Explicit commit SHA to build.
    commitSha :: (Core.Maybe Core.Text),
    -- | Optional. Directory, relative to the source root, in which to run the build. This must be a relative path. If a step\'s @dir@ is specified and is an absolute path, this value is ignored for that step\'s execution.
    dir :: (Core.Maybe Core.Text),
    -- | Optional. Only trigger a build if the revision regex does NOT match the revision regex.
    invertRegex :: (Core.Maybe Core.Bool),
    -- | Optional. ID of the project that owns the Cloud Source Repository. If omitted, the project ID requesting the build is assumed.
    projectId :: (Core.Maybe Core.Text),
    -- | Required. Name of the Cloud Source Repository.
    repoName :: (Core.Maybe Core.Text),
    -- | Optional. Substitutions to use in a triggered build. Should only be used with RunBuildTrigger
    substitutions ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
      ),
    -- | Regex matching tags to build. The syntax of the regular expressions accepted is the syntax accepted by RE2 and described at https:\/\/github.com\/google\/re2\/wiki\/Syntax
    tagName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource =
  ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
    { branchName =
        Core.Nothing,
      commitSha = Core.Nothing,
      dir = Core.Nothing,
      invertRegex = Core.Nothing,
      projectId = Core.Nothing,
      repoName = Core.Nothing,
      substitutions = Core.Nothing,
      tagName = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
            Core.<$> (o Core..:? "branchName")
            Core.<*> (o Core..:? "commitSha")
            Core.<*> (o Core..:? "dir")
            Core.<*> (o Core..:? "invertRegex")
            Core.<*> (o Core..:? "projectId")
            Core.<*> (o Core..:? "repoName")
            Core.<*> (o Core..:? "substitutions")
            Core.<*> (o Core..:? "tagName")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource {..} =
    Core.object
      ( Core.catMaybes
          [ ("branchName" Core..=) Core.<$> branchName,
            ("commitSha" Core..=) Core.<$> commitSha,
            ("dir" Core..=) Core.<$> dir,
            ("invertRegex" Core..=) Core.<$> invertRegex,
            ("projectId" Core..=) Core.<$> projectId,
            ("repoName" Core..=) Core.<$> repoName,
            ("substitutions" Core..=) Core.<$> substitutions,
            ("tagName" Core..=) Core.<$> tagName
          ]
      )

-- | Optional. Substitutions to use in a triggered build. Should only be used with RunBuildTrigger
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions = ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions ::
  -- |  See 'additional'.
  Core.HashMap
    Core.Text
    Core.Text ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
newContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource_Substitutions {..} =
      Core.toJSON additional

-- | Artifacts created by the build pipeline.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Results' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Results = ContaineranalysisGoogleDevtoolsCloudbuildV1Results
  { -- | Path to the artifact manifest for non-container artifacts uploaded to Cloud Storage. Only populated when artifacts are uploaded to Cloud Storage.
    artifactManifest :: (Core.Maybe Core.Text),
    -- | Time to push all non-container artifacts to Cloud Storage.
    artifactTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | List of build step digests, in the order corresponding to build step indices.
    buildStepImages :: (Core.Maybe [Core.Text]),
    -- | List of build step outputs, produced by builder images, in the order corresponding to build step indices. <https://cloud.google.com/cloud-build/docs/cloud-builders Cloud Builders> can produce this output by writing to @$BUILDER_OUTPUT\/output@. Only the first 50KB of data is stored. Note that the @$BUILDER_OUTPUT@ variable is read-only and can\'t be substituted.
    buildStepOutputs :: (Core.Maybe [Core.Base64]),
    -- | Optional. Go module artifacts uploaded to Artifact Registry at the end of the build.
    goModules ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule]
      ),
    -- | Container images that were built as a part of the build.
    images ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1BuiltImage]
      ),
    -- | Maven artifacts uploaded to Artifact Registry at the end of the build.
    mavenArtifacts ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact]
      ),
    -- | Npm packages uploaded to Artifact Registry at the end of the build.
    npmPackages ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage]
      ),
    -- | Number of non-container artifacts uploaded to Cloud Storage. Only populated when artifacts are uploaded to Cloud Storage.
    numArtifacts :: (Core.Maybe Core.Int64),
    -- | Python artifacts uploaded to Artifact Registry at the end of the build.
    pythonPackages ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage]
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Results' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Results ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Results
newContaineranalysisGoogleDevtoolsCloudbuildV1Results =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Results
    { artifactManifest =
        Core.Nothing,
      artifactTiming = Core.Nothing,
      buildStepImages = Core.Nothing,
      buildStepOutputs = Core.Nothing,
      goModules = Core.Nothing,
      images = Core.Nothing,
      mavenArtifacts = Core.Nothing,
      npmPackages = Core.Nothing,
      numArtifacts = Core.Nothing,
      pythonPackages = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Results
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Results"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Results
            Core.<$> (o Core..:? "artifactManifest")
            Core.<*> (o Core..:? "artifactTiming")
            Core.<*> (o Core..:? "buildStepImages")
            Core.<*> (o Core..:? "buildStepOutputs")
            Core.<*> (o Core..:? "goModules")
            Core.<*> (o Core..:? "images")
            Core.<*> (o Core..:? "mavenArtifacts")
            Core.<*> (o Core..:? "npmPackages")
            Core.<*> (o Core..:? "numArtifacts" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "pythonPackages")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Results
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Results {..} =
    Core.object
      ( Core.catMaybes
          [ ("artifactManifest" Core..=) Core.<$> artifactManifest,
            ("artifactTiming" Core..=) Core.<$> artifactTiming,
            ("buildStepImages" Core..=) Core.<$> buildStepImages,
            ("buildStepOutputs" Core..=) Core.<$> buildStepOutputs,
            ("goModules" Core..=) Core.<$> goModules,
            ("images" Core..=) Core.<$> images,
            ("mavenArtifacts" Core..=) Core.<$> mavenArtifacts,
            ("npmPackages" Core..=) Core.<$> npmPackages,
            ("numArtifacts" Core..=) Core.. Core.AsText Core.<$> numArtifacts,
            ("pythonPackages" Core..=) Core.<$> pythonPackages
          ]
      )

-- | Pairs a set of secret environment variables containing encrypted values with the Cloud KMS key to use to decrypt the value. Note: Use @kmsKeyName@ with @available_secrets@ instead of using @kmsKeyName@ with @secret@. For instructions see: https:\/\/cloud.google.com\/cloud-build\/docs\/securing-builds\/use-encrypted-credentials.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Secret' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Secret = ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
  { -- | Cloud KMS key name to use to decrypt these envs.
    kmsKeyName :: (Core.Maybe Core.Text),
    -- | Map of environment variable name to its encrypted value. Secret environment variables must be unique across all of a build\'s secrets, and must be used by at least one build step. Values can be at most 64 KB in size. There can be at most 100 secret values across all of a build\'s secrets.
    secretEnv ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Secret' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Secret ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
newContaineranalysisGoogleDevtoolsCloudbuildV1Secret =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
    { kmsKeyName =
        Core.Nothing,
      secretEnv = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Secret"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
            Core.<$> (o Core..:? "kmsKeyName")
            Core.<*> (o Core..:? "secretEnv")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Secret {..} =
    Core.object
      ( Core.catMaybes
          [ ("kmsKeyName" Core..=) Core.<$> kmsKeyName,
            ("secretEnv" Core..=) Core.<$> secretEnv
          ]
      )

-- | Map of environment variable name to its encrypted value. Secret environment variables must be unique across all of a build\'s secrets, and must be used by at least one build step. Values can be at most 64 KB in size. There can be at most 100 secret values across all of a build\'s secrets.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv = ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
  { additional :: (Core.HashMap Core.Text Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Base64 ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
newContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secret_SecretEnv {..} =
      Core.toJSON additional

-- | Pairs a secret environment variable with a SecretVersion in Secret Manager.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret = ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
  { -- | Environment variable name to associate with the secret. Secret environment variables must be unique across all of a build\'s secrets, and must be used by at least one build step.
    env :: (Core.Maybe Core.Text),
    -- | Resource name of the SecretVersion. In format: projects\//\/secrets\//\/versions\/*
    versionName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
newContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret =
  ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
    { env =
        Core.Nothing,
      versionName = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
            Core.<$> (o Core..:? "env")
            Core.<*> (o Core..:? "versionName")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret {..} =
      Core.object
        ( Core.catMaybes
            [ ("env" Core..=) Core.<$> env,
              ("versionName" Core..=) Core.<$> versionName
            ]
        )

-- | Secrets and secret environment variables.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Secrets' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets = ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
  { -- | Secrets encrypted with KMS key and the associated secret environment variable.
    inline ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1InlineSecret]
      ),
    -- | Secrets in Secret Manager and associated secret environment variable.
    secretManager ::
      ( Core.Maybe
          [ContaineranalysisGoogleDevtoolsCloudbuildV1SecretManagerSecret]
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Secrets ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
newContaineranalysisGoogleDevtoolsCloudbuildV1Secrets =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
    { inline =
        Core.Nothing,
      secretManager = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
            Core.<$> (o Core..:? "inline")
            Core.<*> (o Core..:? "secretManager")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Secrets {..} =
    Core.object
      ( Core.catMaybes
          [ ("inline" Core..=) Core.<$> inline,
            ("secretManager" Core..=) Core.<$> secretManager
          ]
      )

-- | Location of the source in a supported storage service.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Source' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Source = ContaineranalysisGoogleDevtoolsCloudbuildV1Source
  { -- | Optional. If provided, get the source from this 2nd-gen Google Cloud Build repository resource.
    connectedRepository ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
      ),
    -- | If provided, get the source from this Developer Connect config.
    developerConnectConfig ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1DeveloperConnectConfig
      ),
    -- | If provided, get the source from this Git repository.
    gitSource :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource),
    -- | If provided, get the source from this location in a Cloud Source Repository.
    repoSource :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource),
    -- | If provided, get the source from this location in Cloud Storage.
    storageSource ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
      ),
    -- | If provided, get the source from this manifest in Cloud Storage. This feature is in Preview; see description <https://github.com/GoogleCloudPlatform/cloud-builders/tree/master/gcs-fetcher here>.
    storageSourceManifest ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Source' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Source ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Source
newContaineranalysisGoogleDevtoolsCloudbuildV1Source =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Source
    { connectedRepository =
        Core.Nothing,
      developerConnectConfig = Core.Nothing,
      gitSource = Core.Nothing,
      repoSource = Core.Nothing,
      storageSource = Core.Nothing,
      storageSourceManifest = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Source
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Source"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Source
            Core.<$> (o Core..:? "connectedRepository")
            Core.<*> (o Core..:? "developerConnectConfig")
            Core.<*> (o Core..:? "gitSource")
            Core.<*> (o Core..:? "repoSource")
            Core.<*> (o Core..:? "storageSource")
            Core.<*> (o Core..:? "storageSourceManifest")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Source
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Source {..} =
    Core.object
      ( Core.catMaybes
          [ ("connectedRepository" Core..=) Core.<$> connectedRepository,
            ("developerConnectConfig" Core..=) Core.<$> developerConnectConfig,
            ("gitSource" Core..=) Core.<$> gitSource,
            ("repoSource" Core..=) Core.<$> repoSource,
            ("storageSource" Core..=) Core.<$> storageSource,
            ("storageSourceManifest" Core..=) Core.<$> storageSourceManifest
          ]
      )

-- | Provenance of the source. Ways to find the original source, or verify that some source was used for this build.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance = ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
  { -- | Output only. Hash(es) of the build source, which can be used to verify that the original source integrity was maintained in the build. Note that @FileHashes@ will only be populated if @BuildOptions@ has requested a @SourceProvenanceHash@. The keys to this map are file paths used as build source and the values contain the hash values for those files. If the build source came in a single package such as a gzipped tarfile (@.tar.gz@), the @FileHash@ will be for the single path to that file.
    fileHashes ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
      ),
    -- | Output only. A copy of the build\'s @source.connected_repository@, if exists, with any revisions resolved.
    resolvedConnectedRepository ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1ConnectedRepository
      ),
    -- | Output only. A copy of the build\'s @source.git_source@, if exists, with any revisions resolved.
    resolvedGitSource :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1GitSource),
    -- | A copy of the build\'s @source.repo_source@, if exists, with any revisions resolved.
    resolvedRepoSource :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1RepoSource),
    -- | A copy of the build\'s @source.storage_source@, if exists, with any generations resolved.
    resolvedStorageSource ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
      ),
    -- | A copy of the build\'s @source.storage_source_manifest@, if exists, with any revisions resolved. This feature is in Preview.
    resolvedStorageSourceManifest ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance =
  ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
    { fileHashes =
        Core.Nothing,
      resolvedConnectedRepository =
        Core.Nothing,
      resolvedGitSource = Core.Nothing,
      resolvedRepoSource = Core.Nothing,
      resolvedStorageSource =
        Core.Nothing,
      resolvedStorageSourceManifest =
        Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
            Core.<$> (o Core..:? "fileHashes")
            Core.<*> (o Core..:? "resolvedConnectedRepository")
            Core.<*> (o Core..:? "resolvedGitSource")
            Core.<*> (o Core..:? "resolvedRepoSource")
            Core.<*> (o Core..:? "resolvedStorageSource")
            Core.<*> (o Core..:? "resolvedStorageSourceManifest")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileHashes" Core..=) Core.<$> fileHashes,
              ("resolvedConnectedRepository" Core..=)
                Core.<$> resolvedConnectedRepository,
              ("resolvedGitSource" Core..=) Core.<$> resolvedGitSource,
              ("resolvedRepoSource" Core..=) Core.<$> resolvedRepoSource,
              ("resolvedStorageSource" Core..=) Core.<$> resolvedStorageSource,
              ("resolvedStorageSourceManifest" Core..=)
                Core.<$> resolvedStorageSourceManifest
            ]
        )

-- | Output only. Hash(es) of the build source, which can be used to verify that the original source integrity was maintained in the build. Note that @FileHashes@ will only be populated if @BuildOptions@ has requested a @SourceProvenanceHash@. The keys to this map are file paths used as build source and the values contain the hash values for those files. If the build source came in a single package such as a gzipped tarfile (@.tar.gz@), the @FileHash@ will be for the single path to that file.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes' smart constructor.
newtype ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes = ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
  { additional ::
      ( Core.HashMap
          Core.Text
          ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes ::
  -- |  See 'additional'.
  Core.HashMap
    Core.Text
    ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes ->
  ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
newContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
  additional =
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
      { additional =
          additional
      }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1SourceProvenance_FileHashes {..} =
      Core.toJSON additional

-- | Location of the source in an archive file in Cloud Storage.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource = ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
  { -- | Cloud Storage bucket containing the source (see <https://cloud.google.com/storage/docs/bucket-naming#requirements Bucket Name Requirements>).
    bucket :: (Core.Maybe Core.Text),
    -- | Optional. Cloud Storage generation for the object. If the generation is omitted, the latest generation will be used.
    generation :: (Core.Maybe Core.Int64),
    -- | Required. Cloud Storage object containing the source. This object must be a zipped (@.zip@) or gzipped archive file (@.tar.gz@) containing source to build.
    object :: (Core.Maybe Core.Text),
    -- | Optional. Option to specify the tool to fetch the source file for the build.
    sourceFetcher ::
      ( Core.Maybe
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource_SourceFetcher
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource =
  ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
    { bucket =
        Core.Nothing,
      generation = Core.Nothing,
      object = Core.Nothing,
      sourceFetcher = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
            Core.<$> (o Core..:? "bucket")
            Core.<*> (o Core..:? "generation" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "object")
            Core.<*> (o Core..:? "sourceFetcher")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSource {..} =
    Core.object
      ( Core.catMaybes
          [ ("bucket" Core..=) Core.<$> bucket,
            ("generation" Core..=) Core.. Core.AsText Core.<$> generation,
            ("object" Core..=) Core.<$> object,
            ("sourceFetcher" Core..=) Core.<$> sourceFetcher
          ]
      )

-- | Location of the source manifest in Cloud Storage. This feature is in Preview; see description <https://github.com/GoogleCloudPlatform/cloud-builders/tree/master/gcs-fetcher here>.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest = ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
  { -- | Required. Cloud Storage bucket containing the source manifest (see <https://cloud.google.com/storage/docs/bucket-naming#requirements Bucket Name Requirements>).
    bucket :: (Core.Maybe Core.Text),
    -- | Cloud Storage generation for the object. If the generation is omitted, the latest generation will be used.
    generation :: (Core.Maybe Core.Int64),
    -- | Required. Cloud Storage object containing the source manifest. This object must be a JSON file.
    object :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
newContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest =
  ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
    { bucket =
        Core.Nothing,
      generation = Core.Nothing,
      object = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
            Core.<$> (o Core..:? "bucket")
            Core.<*> (o Core..:? "generation" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "object")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1StorageSourceManifest {..} =
      Core.object
        ( Core.catMaybes
            [ ("bucket" Core..=) Core.<$> bucket,
              ("generation" Core..=) Core.. Core.AsText Core.<$> generation,
              ("object" Core..=) Core.<$> object
            ]
        )

-- | Start and end times for a build execution phase.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan = ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
  { -- | End of time span.
    endTime :: (Core.Maybe Core.DateTime),
    -- | Start of time span.
    startTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
newContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan =
  ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
    { endTime =
        Core.Nothing,
      startTime = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
            Core.<$> (o Core..:? "endTime")
            Core.<*> (o Core..:? "startTime")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan {..} =
    Core.object
      ( Core.catMaybes
          [ ("endTime" Core..=) Core.<$> endTime,
            ("startTime" Core..=) Core.<$> startTime
          ]
      )

-- | A Go module artifact uploaded to Artifact Registry using the GoModule directive.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule = ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
  { -- | Hash types and values of the Go Module Artifact.
    fileHashes :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes),
    -- | Output only. Stores timing information for pushing the specified artifact.
    pushTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | URI of the uploaded artifact.
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule =
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
    { fileHashes =
        Core.Nothing,
      pushTiming = Core.Nothing,
      uri = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
            Core.<$> (o Core..:? "fileHashes")
            Core.<*> (o Core..:? "pushTiming")
            Core.<*> (o Core..:? "uri")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedGoModule {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileHashes" Core..=) Core.<$> fileHashes,
              ("pushTiming" Core..=) Core.<$> pushTiming,
              ("uri" Core..=) Core.<$> uri
            ]
        )

-- | A Maven artifact uploaded using the MavenArtifact directive.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact = ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
  { -- | Hash types and values of the Maven Artifact.
    fileHashes :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes),
    -- | Output only. Stores timing information for pushing the specified artifact.
    pushTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | URI of the uploaded artifact.
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact =
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
    { fileHashes =
        Core.Nothing,
      pushTiming = Core.Nothing,
      uri = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
            Core.<$> (o Core..:? "fileHashes")
            Core.<*> (o Core..:? "pushTiming")
            Core.<*> (o Core..:? "uri")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedMavenArtifact {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileHashes" Core..=) Core.<$> fileHashes,
              ("pushTiming" Core..=) Core.<$> pushTiming,
              ("uri" Core..=) Core.<$> uri
            ]
        )

-- | An npm package uploaded to Artifact Registry using the NpmPackage directive.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage = ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
  { -- | Hash types and values of the npm package.
    fileHashes :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes),
    -- | Output only. Stores timing information for pushing the specified artifact.
    pushTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | URI of the uploaded npm package.
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage =
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
    { fileHashes =
        Core.Nothing,
      pushTiming = Core.Nothing,
      uri = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
            Core.<$> (o Core..:? "fileHashes")
            Core.<*> (o Core..:? "pushTiming")
            Core.<*> (o Core..:? "uri")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedNpmPackage {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileHashes" Core..=) Core.<$> fileHashes,
              ("pushTiming" Core..=) Core.<$> pushTiming,
              ("uri" Core..=) Core.<$> uri
            ]
        )

-- | Artifact uploaded using the PythonPackage directive.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage = ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
  { -- | Hash types and values of the Python Artifact.
    fileHashes :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1FileHashes),
    -- | Output only. Stores timing information for pushing the specified artifact.
    pushTiming :: (Core.Maybe ContaineranalysisGoogleDevtoolsCloudbuildV1TimeSpan),
    -- | URI of the uploaded artifact.
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
newContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage =
  ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
    { fileHashes =
        Core.Nothing,
      pushTiming = Core.Nothing,
      uri = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
            Core.<$> (o Core..:? "fileHashes")
            Core.<*> (o Core..:? "pushTiming")
            Core.<*> (o Core..:? "uri")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage
  where
  toJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1UploadedPythonPackage {..} =
      Core.object
        ( Core.catMaybes
            [ ("fileHashes" Core..=) Core.<$> fileHashes,
              ("pushTiming" Core..=) Core.<$> pushTiming,
              ("uri" Core..=) Core.<$> uri
            ]
        )

-- | Volume describes a Docker container volume which is mounted into build steps in order to persist files across build step execution.
--
-- /See:/ 'newContaineranalysisGoogleDevtoolsCloudbuildV1Volume' smart constructor.
data ContaineranalysisGoogleDevtoolsCloudbuildV1Volume = ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
  { -- | Name of the volume to mount. Volume names must be unique per build step and must be valid names for Docker volumes. Each named volume must be used by at least two build steps.
    name :: (Core.Maybe Core.Text),
    -- | Path at which to mount the volume. Paths must be absolute and cannot conflict with other volume paths on the same build step or with certain reserved volume paths.
    path :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ContaineranalysisGoogleDevtoolsCloudbuildV1Volume' with the minimum fields required to make a request.
newContaineranalysisGoogleDevtoolsCloudbuildV1Volume ::
  ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
newContaineranalysisGoogleDevtoolsCloudbuildV1Volume =
  ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
    { name =
        Core.Nothing,
      path = Core.Nothing
    }

instance
  Core.FromJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
  where
  parseJSON =
    Core.withObject
      "ContaineranalysisGoogleDevtoolsCloudbuildV1Volume"
      ( \o ->
          ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
            Core.<$> (o Core..:? "name")
            Core.<*> (o Core..:? "path")
      )

instance
  Core.ToJSON
    ContaineranalysisGoogleDevtoolsCloudbuildV1Volume
  where
  toJSON ContaineranalysisGoogleDevtoolsCloudbuildV1Volume {..} =
    Core.object
      ( Core.catMaybes
          [("name" Core..=) Core.<$> name, ("path" Core..=) Core.<$> path]
      )

--
-- /See:/ 'newDSSEAttestationNote' smart constructor.
newtype DSSEAttestationNote = DSSEAttestationNote
  { -- | DSSEHint hints at the purpose of the attestation authority.
    hint :: (Core.Maybe DSSEHint)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DSSEAttestationNote' with the minimum fields required to make a request.
newDSSEAttestationNote ::
  DSSEAttestationNote
newDSSEAttestationNote = DSSEAttestationNote {hint = Core.Nothing}

instance Core.FromJSON DSSEAttestationNote where
  parseJSON =
    Core.withObject
      "DSSEAttestationNote"
      (\o -> DSSEAttestationNote Core.<$> (o Core..:? "hint"))

instance Core.ToJSON DSSEAttestationNote where
  toJSON DSSEAttestationNote {..} =
    Core.object (Core.catMaybes [("hint" Core..=) Core.<$> hint])

-- | Deprecated. Prefer to use a regular Occurrence, and populate the Envelope at the top level of the Occurrence.
--
-- /See:/ 'newDSSEAttestationOccurrence' smart constructor.
data DSSEAttestationOccurrence = DSSEAttestationOccurrence
  { -- | If doing something security critical, make sure to verify the signatures in this metadata.
    envelope :: (Core.Maybe Envelope),
    statement :: (Core.Maybe InTotoStatement)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DSSEAttestationOccurrence' with the minimum fields required to make a request.
newDSSEAttestationOccurrence ::
  DSSEAttestationOccurrence
newDSSEAttestationOccurrence =
  DSSEAttestationOccurrence
    { envelope = Core.Nothing,
      statement = Core.Nothing
    }

instance Core.FromJSON DSSEAttestationOccurrence where
  parseJSON =
    Core.withObject
      "DSSEAttestationOccurrence"
      ( \o ->
          DSSEAttestationOccurrence
            Core.<$> (o Core..:? "envelope")
            Core.<*> (o Core..:? "statement")
      )

instance Core.ToJSON DSSEAttestationOccurrence where
  toJSON DSSEAttestationOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("envelope" Core..=) Core.<$> envelope,
            ("statement" Core..=) Core.<$> statement
          ]
      )

-- | This submessage provides human-readable hints about the purpose of the authority. Because the name of a note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from \"readable\" names more suitable for debug output. Note that these hints should not be used to look up authorities in security sensitive contexts, such as when looking up attestations to verify.
--
-- /See:/ 'newDSSEHint' smart constructor.
newtype DSSEHint = DSSEHint
  { -- | Required. The human readable name of this attestation authority, for example \"cloudbuild-prod\".
    humanReadableName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DSSEHint' with the minimum fields required to make a request.
newDSSEHint ::
  DSSEHint
newDSSEHint = DSSEHint {humanReadableName = Core.Nothing}

instance Core.FromJSON DSSEHint where
  parseJSON =
    Core.withObject
      "DSSEHint"
      (\o -> DSSEHint Core.<$> (o Core..:? "humanReadableName"))

instance Core.ToJSON DSSEHint where
  toJSON DSSEHint {..} =
    Core.object
      ( Core.catMaybes
          [("humanReadableName" Core..=) Core.<$> humanReadableName]
      )

-- | An artifact that can be deployed in some runtime.
--
-- /See:/ 'newDeploymentNote' smart constructor.
newtype DeploymentNote = DeploymentNote
  { -- | Required. Resource URI for the artifact being deployed.
    resourceUri :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeploymentNote' with the minimum fields required to make a request.
newDeploymentNote ::
  DeploymentNote
newDeploymentNote = DeploymentNote {resourceUri = Core.Nothing}

instance Core.FromJSON DeploymentNote where
  parseJSON =
    Core.withObject
      "DeploymentNote"
      (\o -> DeploymentNote Core.<$> (o Core..:? "resourceUri"))

instance Core.ToJSON DeploymentNote where
  toJSON DeploymentNote {..} =
    Core.object
      (Core.catMaybes [("resourceUri" Core..=) Core.<$> resourceUri])

-- | The period during which some deployable was active in a runtime.
--
-- /See:/ 'newDeploymentOccurrence' smart constructor.
data DeploymentOccurrence = DeploymentOccurrence
  { -- | Address of the runtime element hosting this deployment.
    address :: (Core.Maybe Core.Text),
    -- | Configuration used to create this deployment.
    config :: (Core.Maybe Core.Text),
    -- | Required. Beginning of the lifetime of this deployment.
    deployTime :: (Core.Maybe Core.DateTime),
    -- | Platform hosting this deployment.
    platform :: (Core.Maybe DeploymentOccurrence_Platform),
    -- | Output only. Resource URI for the artifact being deployed taken from the deployable field with the same name.
    resourceUri :: (Core.Maybe [Core.Text]),
    -- | End of the lifetime of this deployment.
    undeployTime :: (Core.Maybe Core.DateTime),
    -- | Identity of the user that triggered this deployment.
    userEmail :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DeploymentOccurrence' with the minimum fields required to make a request.
newDeploymentOccurrence ::
  DeploymentOccurrence
newDeploymentOccurrence =
  DeploymentOccurrence
    { address = Core.Nothing,
      config = Core.Nothing,
      deployTime = Core.Nothing,
      platform = Core.Nothing,
      resourceUri = Core.Nothing,
      undeployTime = Core.Nothing,
      userEmail = Core.Nothing
    }

instance Core.FromJSON DeploymentOccurrence where
  parseJSON =
    Core.withObject
      "DeploymentOccurrence"
      ( \o ->
          DeploymentOccurrence
            Core.<$> (o Core..:? "address")
            Core.<*> (o Core..:? "config")
            Core.<*> (o Core..:? "deployTime")
            Core.<*> (o Core..:? "platform")
            Core.<*> (o Core..:? "resourceUri")
            Core.<*> (o Core..:? "undeployTime")
            Core.<*> (o Core..:? "userEmail")
      )

instance Core.ToJSON DeploymentOccurrence where
  toJSON DeploymentOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("address" Core..=) Core.<$> address,
            ("config" Core..=) Core.<$> config,
            ("deployTime" Core..=) Core.<$> deployTime,
            ("platform" Core..=) Core.<$> platform,
            ("resourceUri" Core..=) Core.<$> resourceUri,
            ("undeployTime" Core..=) Core.<$> undeployTime,
            ("userEmail" Core..=) Core.<$> userEmail
          ]
      )

-- | A detail for a distro and package affected by this vulnerability and its associated fix (if one is available).
--
-- /See:/ 'newDetail' smart constructor.
data Detail = Detail
  { -- | Required. The <https://cpe.mitre.org/specification/ CPE URI> this vulnerability affects.
    affectedCpeUri :: (Core.Maybe Core.Text),
    -- | Required. The package this vulnerability affects.
    affectedPackage :: (Core.Maybe Core.Text),
    -- | The version number at the end of an interval in which this vulnerability exists. A vulnerability can affect a package between version numbers that are disjoint sets of intervals (example: [1.0.0-1.1.0], [2.4.6-2.4.8] and [4.5.6-4.6.8]) each of which will be represented in its own Detail. If a specific affected version is provided by a vulnerability database, affected/version/start and affected/version/end will be the same in that Detail.
    affectedVersionEnd :: (Core.Maybe Version),
    -- | The version number at the start of an interval in which this vulnerability exists. A vulnerability can affect a package between version numbers that are disjoint sets of intervals (example: [1.0.0-1.1.0], [2.4.6-2.4.8] and [4.5.6-4.6.8]) each of which will be represented in its own Detail. If a specific affected version is provided by a vulnerability database, affected/version/start and affected/version/end will be the same in that Detail.
    affectedVersionStart :: (Core.Maybe Version),
    -- | A vendor-specific description of this vulnerability.
    description :: (Core.Maybe Core.Text),
    -- | The distro recommended <https://cpe.mitre.org/specification/ CPE URI> to update to that contains a fix for this vulnerability. It is possible for this to be different from the affected/cpe/uri.
    fixedCpeUri :: (Core.Maybe Core.Text),
    -- | The distro recommended package to update to that contains a fix for this vulnerability. It is possible for this to be different from the affected_package.
    fixedPackage :: (Core.Maybe Core.Text),
    -- | The distro recommended version to update to that contains a fix for this vulnerability. Setting this to VersionKind.MAXIMUM means no such version is yet available.
    fixedVersion :: (Core.Maybe Version),
    -- | Whether this detail is obsolete. Occurrences are expected not to point to obsolete details.
    isObsolete :: (Core.Maybe Core.Bool),
    -- | The type of package; whether native or non native (e.g., ruby gems, node.js packages, etc.).
    packageType :: (Core.Maybe Core.Text),
    -- | The distro assigned severity of this vulnerability.
    severityName :: (Core.Maybe Core.Text),
    -- | The source from which the information in this Detail was obtained.
    source :: (Core.Maybe Core.Text),
    -- | The time this information was last changed at the source. This is an upstream timestamp from the underlying information source - e.g. Ubuntu security tracker.
    sourceUpdateTime :: (Core.Maybe Core.DateTime),
    -- | The name of the vendor of the product.
    vendor :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Detail' with the minimum fields required to make a request.
newDetail ::
  Detail
newDetail =
  Detail
    { affectedCpeUri = Core.Nothing,
      affectedPackage = Core.Nothing,
      affectedVersionEnd = Core.Nothing,
      affectedVersionStart = Core.Nothing,
      description = Core.Nothing,
      fixedCpeUri = Core.Nothing,
      fixedPackage = Core.Nothing,
      fixedVersion = Core.Nothing,
      isObsolete = Core.Nothing,
      packageType = Core.Nothing,
      severityName = Core.Nothing,
      source = Core.Nothing,
      sourceUpdateTime = Core.Nothing,
      vendor = Core.Nothing
    }

instance Core.FromJSON Detail where
  parseJSON =
    Core.withObject
      "Detail"
      ( \o ->
          Detail
            Core.<$> (o Core..:? "affectedCpeUri")
            Core.<*> (o Core..:? "affectedPackage")
            Core.<*> (o Core..:? "affectedVersionEnd")
            Core.<*> (o Core..:? "affectedVersionStart")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "fixedCpeUri")
            Core.<*> (o Core..:? "fixedPackage")
            Core.<*> (o Core..:? "fixedVersion")
            Core.<*> (o Core..:? "isObsolete")
            Core.<*> (o Core..:? "packageType")
            Core.<*> (o Core..:? "severityName")
            Core.<*> (o Core..:? "source")
            Core.<*> (o Core..:? "sourceUpdateTime")
            Core.<*> (o Core..:? "vendor")
      )

instance Core.ToJSON Detail where
  toJSON Detail {..} =
    Core.object
      ( Core.catMaybes
          [ ("affectedCpeUri" Core..=) Core.<$> affectedCpeUri,
            ("affectedPackage" Core..=) Core.<$> affectedPackage,
            ("affectedVersionEnd" Core..=) Core.<$> affectedVersionEnd,
            ("affectedVersionStart" Core..=) Core.<$> affectedVersionStart,
            ("description" Core..=) Core.<$> description,
            ("fixedCpeUri" Core..=) Core.<$> fixedCpeUri,
            ("fixedPackage" Core..=) Core.<$> fixedPackage,
            ("fixedVersion" Core..=) Core.<$> fixedVersion,
            ("isObsolete" Core..=) Core.<$> isObsolete,
            ("packageType" Core..=) Core.<$> packageType,
            ("severityName" Core..=) Core.<$> severityName,
            ("source" Core..=) Core.<$> source,
            ("sourceUpdateTime" Core..=) Core.<$> sourceUpdateTime,
            ("vendor" Core..=) Core.<$> vendor
          ]
      )

-- | Digest information.
--
-- /See:/ 'newDigest' smart constructor.
data Digest = Digest
  { -- | @SHA1@, @SHA512@ etc.
    algo :: (Core.Maybe Core.Text),
    -- | Value of the digest.
    digestBytes :: (Core.Maybe Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Digest' with the minimum fields required to make a request.
newDigest ::
  Digest
newDigest = Digest {algo = Core.Nothing, digestBytes = Core.Nothing}

instance Core.FromJSON Digest where
  parseJSON =
    Core.withObject
      "Digest"
      ( \o ->
          Digest
            Core.<$> (o Core..:? "algo")
            Core.<*> (o Core..:? "digestBytes")
      )

instance Core.ToJSON Digest where
  toJSON Digest {..} =
    Core.object
      ( Core.catMaybes
          [ ("algo" Core..=) Core.<$> algo,
            ("digestBytes" Core..=) Core.<$> digestBytes
          ]
      )

-- | A note that indicates a type of analysis a provider would perform. This note exists in a provider\'s project. A @Discovery@ occurrence is created in a consumer\'s project at the start of analysis.
--
-- /See:/ 'newDiscoveryNote' smart constructor.
newtype DiscoveryNote = DiscoveryNote
  { -- | Required. Immutable. The kind of analysis that is handled by this discovery.
    analysisKind :: (Core.Maybe DiscoveryNote_AnalysisKind)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DiscoveryNote' with the minimum fields required to make a request.
newDiscoveryNote ::
  DiscoveryNote
newDiscoveryNote = DiscoveryNote {analysisKind = Core.Nothing}

instance Core.FromJSON DiscoveryNote where
  parseJSON =
    Core.withObject
      "DiscoveryNote"
      (\o -> DiscoveryNote Core.<$> (o Core..:? "analysisKind"))

instance Core.ToJSON DiscoveryNote where
  toJSON DiscoveryNote {..} =
    Core.object
      (Core.catMaybes [("analysisKind" Core..=) Core.<$> analysisKind])

-- | Provides information about the analysis status of a discovered resource.
--
-- /See:/ 'newDiscoveryOccurrence' smart constructor.
data DiscoveryOccurrence = DiscoveryOccurrence
  { analysisCompleted :: (Core.Maybe AnalysisCompleted),
    -- | Indicates any errors encountered during analysis of a resource. There could be 0 or more of these errors.
    analysisError :: (Core.Maybe [Status]),
    -- | The status of discovery for the resource.
    analysisStatus :: (Core.Maybe DiscoveryOccurrence_AnalysisStatus),
    -- | When an error is encountered this will contain a LocalizedMessage under details to show to the user. The LocalizedMessage is output only and populated by the API.
    analysisStatusError :: (Core.Maybe Status),
    -- | Output only. The time occurrences related to this discovery occurrence were archived.
    archiveTime :: (Core.Maybe Core.DateTime),
    -- | Whether the resource is continuously analyzed.
    continuousAnalysis :: (Core.Maybe DiscoveryOccurrence_ContinuousAnalysis),
    -- | The CPE of the resource being scanned.
    cpe :: (Core.Maybe Core.Text),
    -- | The last time this resource was scanned.
    lastScanTime :: (Core.Maybe Core.DateTime),
    -- | The status of an SBOM generation.
    sbomStatus :: (Core.Maybe SBOMStatus)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'DiscoveryOccurrence' with the minimum fields required to make a request.
newDiscoveryOccurrence ::
  DiscoveryOccurrence
newDiscoveryOccurrence =
  DiscoveryOccurrence
    { analysisCompleted = Core.Nothing,
      analysisError = Core.Nothing,
      analysisStatus = Core.Nothing,
      analysisStatusError = Core.Nothing,
      archiveTime = Core.Nothing,
      continuousAnalysis = Core.Nothing,
      cpe = Core.Nothing,
      lastScanTime = Core.Nothing,
      sbomStatus = Core.Nothing
    }

instance Core.FromJSON DiscoveryOccurrence where
  parseJSON =
    Core.withObject
      "DiscoveryOccurrence"
      ( \o ->
          DiscoveryOccurrence
            Core.<$> (o Core..:? "analysisCompleted")
            Core.<*> (o Core..:? "analysisError")
            Core.<*> (o Core..:? "analysisStatus")
            Core.<*> (o Core..:? "analysisStatusError")
            Core.<*> (o Core..:? "archiveTime")
            Core.<*> (o Core..:? "continuousAnalysis")
            Core.<*> (o Core..:? "cpe")
            Core.<*> (o Core..:? "lastScanTime")
            Core.<*> (o Core..:? "sbomStatus")
      )

instance Core.ToJSON DiscoveryOccurrence where
  toJSON DiscoveryOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("analysisCompleted" Core..=) Core.<$> analysisCompleted,
            ("analysisError" Core..=) Core.<$> analysisError,
            ("analysisStatus" Core..=) Core.<$> analysisStatus,
            ("analysisStatusError" Core..=) Core.<$> analysisStatusError,
            ("archiveTime" Core..=) Core.<$> archiveTime,
            ("continuousAnalysis" Core..=) Core.<$> continuousAnalysis,
            ("cpe" Core..=) Core.<$> cpe,
            ("lastScanTime" Core..=) Core.<$> lastScanTime,
            ("sbomStatus" Core..=) Core.<$> sbomStatus
          ]
      )

-- | This represents a particular channel of distribution for a given package. E.g., Debian\'s jessie-backports dpkg mirror.
--
-- /See:/ 'newDistribution' smart constructor.
data Distribution = Distribution
  { -- | The CPU architecture for which packages in this distribution channel were built.
    architecture :: (Core.Maybe Distribution_Architecture),
    -- | Required. The cpe_uri in <https://cpe.mitre.org/specification/ CPE format> denoting the package manager version distributing a package.
    cpeUri :: (Core.Maybe Core.Text),
    -- | The distribution channel-specific description of this package.
    description :: (Core.Maybe Core.Text),
    -- | The latest available version of this package in this distribution channel.
    latestVersion :: (Core.Maybe Version),
    -- | A freeform string denoting the maintainer of this package.
    maintainer :: (Core.Maybe Core.Text),
    -- | The distribution channel-specific homepage for this package.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Distribution' with the minimum fields required to make a request.
newDistribution ::
  Distribution
newDistribution =
  Distribution
    { architecture = Core.Nothing,
      cpeUri = Core.Nothing,
      description = Core.Nothing,
      latestVersion = Core.Nothing,
      maintainer = Core.Nothing,
      url = Core.Nothing
    }

instance Core.FromJSON Distribution where
  parseJSON =
    Core.withObject
      "Distribution"
      ( \o ->
          Distribution
            Core.<$> (o Core..:? "architecture")
            Core.<*> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "latestVersion")
            Core.<*> (o Core..:? "maintainer")
            Core.<*> (o Core..:? "url")
      )

instance Core.ToJSON Distribution where
  toJSON Distribution {..} =
    Core.object
      ( Core.catMaybes
          [ ("architecture" Core..=) Core.<$> architecture,
            ("cpeUri" Core..=) Core.<$> cpeUri,
            ("description" Core..=) Core.<$> description,
            ("latestVersion" Core..=) Core.<$> latestVersion,
            ("maintainer" Core..=) Core.<$> maintainer,
            ("url" Core..=) Core.<$> url
          ]
      )

-- | A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
--
-- /See:/ 'newEmpty' smart constructor.
data Empty = Empty
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Empty' with the minimum fields required to make a request.
newEmpty ::
  Empty
newEmpty = Empty

instance Core.FromJSON Empty where
  parseJSON = Core.withObject "Empty" (\o -> Core.pure Empty)

instance Core.ToJSON Empty where
  toJSON = Core.const Core.emptyObject

-- | MUST match https:\/\/github.com\/secure-systems-lab\/dsse\/blob\/master\/envelope.proto. An authenticated message of arbitrary type.
--
-- /See:/ 'newEnvelope' smart constructor.
data Envelope = Envelope
  { payload :: (Core.Maybe Core.Base64),
    payloadType :: (Core.Maybe Core.Text),
    signatures :: (Core.Maybe [EnvelopeSignature])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Envelope' with the minimum fields required to make a request.
newEnvelope ::
  Envelope
newEnvelope =
  Envelope
    { payload = Core.Nothing,
      payloadType = Core.Nothing,
      signatures = Core.Nothing
    }

instance Core.FromJSON Envelope where
  parseJSON =
    Core.withObject
      "Envelope"
      ( \o ->
          Envelope
            Core.<$> (o Core..:? "payload")
            Core.<*> (o Core..:? "payloadType")
            Core.<*> (o Core..:? "signatures")
      )

instance Core.ToJSON Envelope where
  toJSON Envelope {..} =
    Core.object
      ( Core.catMaybes
          [ ("payload" Core..=) Core.<$> payload,
            ("payloadType" Core..=) Core.<$> payloadType,
            ("signatures" Core..=) Core.<$> signatures
          ]
      )

--
-- /See:/ 'newEnvelopeSignature' smart constructor.
data EnvelopeSignature = EnvelopeSignature
  { keyid :: (Core.Maybe Core.Text),
    sig :: (Core.Maybe Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'EnvelopeSignature' with the minimum fields required to make a request.
newEnvelopeSignature ::
  EnvelopeSignature
newEnvelopeSignature =
  EnvelopeSignature {keyid = Core.Nothing, sig = Core.Nothing}

instance Core.FromJSON EnvelopeSignature where
  parseJSON =
    Core.withObject
      "EnvelopeSignature"
      ( \o ->
          EnvelopeSignature
            Core.<$> (o Core..:? "keyid")
            Core.<*> (o Core..:? "sig")
      )

instance Core.ToJSON EnvelopeSignature where
  toJSON EnvelopeSignature {..} =
    Core.object
      ( Core.catMaybes
          [("keyid" Core..=) Core.<$> keyid, ("sig" Core..=) Core.<$> sig]
      )

-- | The request to generate and export SBOM. Target must be specified for the request.
--
-- /See:/ 'newExportSBOMRequest' smart constructor.
newtype ExportSBOMRequest = ExportSBOMRequest
  { -- | Optional. Empty placeholder to denote that this is a Google Cloud Storage export request.
    cloudStorageLocation :: (Core.Maybe CloudStorageLocation)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExportSBOMRequest' with the minimum fields required to make a request.
newExportSBOMRequest ::
  ExportSBOMRequest
newExportSBOMRequest =
  ExportSBOMRequest {cloudStorageLocation = Core.Nothing}

instance Core.FromJSON ExportSBOMRequest where
  parseJSON =
    Core.withObject
      "ExportSBOMRequest"
      ( \o ->
          ExportSBOMRequest Core.<$> (o Core..:? "cloudStorageLocation")
      )

instance Core.ToJSON ExportSBOMRequest where
  toJSON ExportSBOMRequest {..} =
    Core.object
      ( Core.catMaybes
          [("cloudStorageLocation" Core..=) Core.<$> cloudStorageLocation]
      )

-- | The response from a call to ExportSBOM.
--
-- /See:/ 'newExportSBOMResponse' smart constructor.
newtype ExportSBOMResponse = ExportSBOMResponse
  { -- | The name of the discovery occurrence in the form \"projects\/{project/id}\/occurrences\/{OCCURRENCE/ID} It can be used to track the progress of the SBOM export.
    discoveryOccurrence :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ExportSBOMResponse' with the minimum fields required to make a request.
newExportSBOMResponse ::
  ExportSBOMResponse
newExportSBOMResponse =
  ExportSBOMResponse {discoveryOccurrence = Core.Nothing}

instance Core.FromJSON ExportSBOMResponse where
  parseJSON =
    Core.withObject
      "ExportSBOMResponse"
      ( \o ->
          ExportSBOMResponse Core.<$> (o Core..:? "discoveryOccurrence")
      )

instance Core.ToJSON ExportSBOMResponse where
  toJSON ExportSBOMResponse {..} =
    Core.object
      ( Core.catMaybes
          [("discoveryOccurrence" Core..=) Core.<$> discoveryOccurrence]
      )

-- | Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https:\/\/github.com\/google\/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \< 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != \'private\' && document.type != \'internal\'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"\'New message received at \' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are
-- determined by the service that evaluates it. See the service documentation for additional information.
--
-- /See:/ 'newExpr' smart constructor.
data Expr = Expr
  { -- | Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
    description :: (Core.Maybe Core.Text),
    -- | Textual representation of an expression in Common Expression Language syntax.
    expression :: (Core.Maybe Core.Text),
    -- | Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
    location :: (Core.Maybe Core.Text),
    -- | Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
    title :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Expr' with the minimum fields required to make a request.
newExpr ::
  Expr
newExpr =
  Expr
    { description = Core.Nothing,
      expression = Core.Nothing,
      location = Core.Nothing,
      title = Core.Nothing
    }

instance Core.FromJSON Expr where
  parseJSON =
    Core.withObject
      "Expr"
      ( \o ->
          Expr
            Core.<$> (o Core..:? "description")
            Core.<*> (o Core..:? "expression")
            Core.<*> (o Core..:? "location")
            Core.<*> (o Core..:? "title")
      )

instance Core.ToJSON Expr where
  toJSON Expr {..} =
    Core.object
      ( Core.catMaybes
          [ ("description" Core..=) Core.<$> description,
            ("expression" Core..=) Core.<$> expression,
            ("location" Core..=) Core.<$> location,
            ("title" Core..=) Core.<$> title
          ]
      )

-- | Container message for hashes of byte content of files, used in source messages to verify integrity of source input to the build.
--
-- /See:/ 'newFileHashes' smart constructor.
newtype FileHashes = FileHashes
  { -- | Required. Collection of file hashes.
    fileHash :: (Core.Maybe [Hash])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FileHashes' with the minimum fields required to make a request.
newFileHashes ::
  FileHashes
newFileHashes = FileHashes {fileHash = Core.Nothing}

instance Core.FromJSON FileHashes where
  parseJSON =
    Core.withObject
      "FileHashes"
      (\o -> FileHashes Core.<$> (o Core..:? "fileHash"))

instance Core.ToJSON FileHashes where
  toJSON FileHashes {..} =
    Core.object
      (Core.catMaybes [("fileHash" Core..=) Core.<$> fileHash])

-- | A set of properties that uniquely identify a given Docker image.
--
-- /See:/ 'newFingerprint' smart constructor.
data Fingerprint = Fingerprint
  { -- | Required. The layer ID of the final layer in the Docker image\'s v1 representation.
    v1Name :: (Core.Maybe Core.Text),
    -- | Required. The ordered list of v2 blobs that represent a given image.
    v2Blob :: (Core.Maybe [Core.Text]),
    -- | Output only. The name of the image\'s v2 blobs computed via: [bottom] := v2/blobbottom := sha256(v2/blob[N] + \" \" + v2_name[N+1]) Only the name of the final blob is kept.
    v2Name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Fingerprint' with the minimum fields required to make a request.
newFingerprint ::
  Fingerprint
newFingerprint =
  Fingerprint
    { v1Name = Core.Nothing,
      v2Blob = Core.Nothing,
      v2Name = Core.Nothing
    }

instance Core.FromJSON Fingerprint where
  parseJSON =
    Core.withObject
      "Fingerprint"
      ( \o ->
          Fingerprint
            Core.<$> (o Core..:? "v1Name")
            Core.<*> (o Core..:? "v2Blob")
            Core.<*> (o Core..:? "v2Name")
      )

instance Core.ToJSON Fingerprint where
  toJSON Fingerprint {..} =
    Core.object
      ( Core.catMaybes
          [ ("v1Name" Core..=) Core.<$> v1Name,
            ("v2Blob" Core..=) Core.<$> v2Blob,
            ("v2Name" Core..=) Core.<$> v2Name
          ]
      )

-- | Per resource and severity counts of fixable and total vulnerabilities.
--
-- /See:/ 'newFixableTotalByDigest' smart constructor.
data FixableTotalByDigest = FixableTotalByDigest
  { -- | The number of fixable vulnerabilities associated with this resource.
    fixableCount :: (Core.Maybe Core.Int64),
    -- | The affected resource.
    resourceUri :: (Core.Maybe Core.Text),
    -- | The severity for this count. SEVERITY_UNSPECIFIED indicates total across all severities.
    severity :: (Core.Maybe FixableTotalByDigest_Severity),
    -- | The total number of vulnerabilities associated with this resource.
    totalCount :: (Core.Maybe Core.Int64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'FixableTotalByDigest' with the minimum fields required to make a request.
newFixableTotalByDigest ::
  FixableTotalByDigest
newFixableTotalByDigest =
  FixableTotalByDigest
    { fixableCount = Core.Nothing,
      resourceUri = Core.Nothing,
      severity = Core.Nothing,
      totalCount = Core.Nothing
    }

instance Core.FromJSON FixableTotalByDigest where
  parseJSON =
    Core.withObject
      "FixableTotalByDigest"
      ( \o ->
          FixableTotalByDigest
            Core.<$> (o Core..:? "fixableCount" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "resourceUri")
            Core.<*> (o Core..:? "severity")
            Core.<*> (o Core..:? "totalCount" Core.<&> Core.fmap Core.fromAsText)
      )

instance Core.ToJSON FixableTotalByDigest where
  toJSON FixableTotalByDigest {..} =
    Core.object
      ( Core.catMaybes
          [ ("fixableCount" Core..=) Core.. Core.AsText Core.<$> fixableCount,
            ("resourceUri" Core..=) Core.<$> resourceUri,
            ("severity" Core..=) Core.<$> severity,
            ("totalCount" Core..=) Core.. Core.AsText Core.<$> totalCount
          ]
      )

-- | A SourceContext referring to a Gerrit project.
--
-- /See:/ 'newGerritSourceContext' smart constructor.
data GerritSourceContext = GerritSourceContext
  { -- | An alias, which may be a branch or tag.
    aliasContext :: (Core.Maybe AliasContext),
    -- | The full project name within the host. Projects may be nested, so \"project\/subproject\" is a valid project name. The \"repo name\" is the hostURI\/project.
    gerritProject :: (Core.Maybe Core.Text),
    -- | The URI of a running Gerrit instance.
    hostUri :: (Core.Maybe Core.Text),
    -- | A revision (commit) ID.
    revisionId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GerritSourceContext' with the minimum fields required to make a request.
newGerritSourceContext ::
  GerritSourceContext
newGerritSourceContext =
  GerritSourceContext
    { aliasContext = Core.Nothing,
      gerritProject = Core.Nothing,
      hostUri = Core.Nothing,
      revisionId = Core.Nothing
    }

instance Core.FromJSON GerritSourceContext where
  parseJSON =
    Core.withObject
      "GerritSourceContext"
      ( \o ->
          GerritSourceContext
            Core.<$> (o Core..:? "aliasContext")
            Core.<*> (o Core..:? "gerritProject")
            Core.<*> (o Core..:? "hostUri")
            Core.<*> (o Core..:? "revisionId")
      )

instance Core.ToJSON GerritSourceContext where
  toJSON GerritSourceContext {..} =
    Core.object
      ( Core.catMaybes
          [ ("aliasContext" Core..=) Core.<$> aliasContext,
            ("gerritProject" Core..=) Core.<$> gerritProject,
            ("hostUri" Core..=) Core.<$> hostUri,
            ("revisionId" Core..=) Core.<$> revisionId
          ]
      )

-- | Request message for @GetIamPolicy@ method.
--
-- /See:/ 'newGetIamPolicyRequest' smart constructor.
newtype GetIamPolicyRequest = GetIamPolicyRequest
  { -- | OPTIONAL: A @GetPolicyOptions@ object for specifying options to @GetIamPolicy@.
    options :: (Core.Maybe GetPolicyOptions)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetIamPolicyRequest' with the minimum fields required to make a request.
newGetIamPolicyRequest ::
  GetIamPolicyRequest
newGetIamPolicyRequest =
  GetIamPolicyRequest {options = Core.Nothing}

instance Core.FromJSON GetIamPolicyRequest where
  parseJSON =
    Core.withObject
      "GetIamPolicyRequest"
      (\o -> GetIamPolicyRequest Core.<$> (o Core..:? "options"))

instance Core.ToJSON GetIamPolicyRequest where
  toJSON GetIamPolicyRequest {..} =
    Core.object
      (Core.catMaybes [("options" Core..=) Core.<$> options])

-- | Encapsulates settings provided to GetIamPolicy.
--
-- /See:/ 'newGetPolicyOptions' smart constructor.
newtype GetPolicyOptions = GetPolicyOptions
  { -- | Optional. The maximum policy version that will be used to format the policy. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional role bindings must specify version 3. Policies with no conditional role bindings may specify any valid value or leave the field unset. The policy in the response might use the policy version that you specified, or it might use a lower policy version. For example, if you specify version 3, but the policy has no conditional role bindings, the response uses version 1. To learn which resources support conditions in their IAM policies, see the <https://cloud.google.com/iam/help/conditions/resource-policies IAM documentation>.
    requestedPolicyVersion :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GetPolicyOptions' with the minimum fields required to make a request.
newGetPolicyOptions ::
  GetPolicyOptions
newGetPolicyOptions =
  GetPolicyOptions {requestedPolicyVersion = Core.Nothing}

instance Core.FromJSON GetPolicyOptions where
  parseJSON =
    Core.withObject
      "GetPolicyOptions"
      ( \o ->
          GetPolicyOptions Core.<$> (o Core..:? "requestedPolicyVersion")
      )

instance Core.ToJSON GetPolicyOptions where
  toJSON GetPolicyOptions {..} =
    Core.object
      ( Core.catMaybes
          [ ("requestedPolicyVersion" Core..=)
              Core.<$> requestedPolicyVersion
          ]
      )

-- | A GitSourceContext denotes a particular revision in a third party Git repository (e.g., GitHub).
--
-- /See:/ 'newGitSourceContext' smart constructor.
data GitSourceContext = GitSourceContext
  { -- | Git commit hash.
    revisionId :: (Core.Maybe Core.Text),
    -- | Git repository URL.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GitSourceContext' with the minimum fields required to make a request.
newGitSourceContext ::
  GitSourceContext
newGitSourceContext =
  GitSourceContext {revisionId = Core.Nothing, url = Core.Nothing}

instance Core.FromJSON GitSourceContext where
  parseJSON =
    Core.withObject
      "GitSourceContext"
      ( \o ->
          GitSourceContext
            Core.<$> (o Core..:? "revisionId")
            Core.<*> (o Core..:? "url")
      )

instance Core.ToJSON GitSourceContext where
  toJSON GitSourceContext {..} =
    Core.object
      ( Core.catMaybes
          [ ("revisionId" Core..=) Core.<$> revisionId,
            ("url" Core..=) Core.<$> url
          ]
      )

-- | Metadata for all operations used and required for all operations that created by Container Analysis Providers
--
-- /See:/ 'newGoogleDevtoolsContaineranalysisV1alpha1OperationMetadata' smart constructor.
data GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata = GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
  { -- | Output only. The time this operation was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Output only. The time that this operation was marked completed or failed.
    endTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata' with the minimum fields required to make a request.
newGoogleDevtoolsContaineranalysisV1alpha1OperationMetadata ::
  GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
newGoogleDevtoolsContaineranalysisV1alpha1OperationMetadata =
  GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
    { createTime =
        Core.Nothing,
      endTime = Core.Nothing
    }

instance
  Core.FromJSON
    GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
  where
  parseJSON =
    Core.withObject
      "GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata"
      ( \o ->
          GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
            Core.<$> (o Core..:? "createTime")
            Core.<*> (o Core..:? "endTime")
      )

instance
  Core.ToJSON
    GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata
  where
  toJSON GoogleDevtoolsContaineranalysisV1alpha1OperationMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("createTime" Core..=) Core.<$> createTime,
            ("endTime" Core..=) Core.<$> endTime
          ]
      )

-- | Indicates the location at which a package was found.
--
-- /See:/ 'newGrafeasV1FileLocation' smart constructor.
newtype GrafeasV1FileLocation = GrafeasV1FileLocation
  { -- | For jars that are contained inside .war files, this filepath can indicate the path to war file combined with the path to jar file.
    filePath :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1FileLocation' with the minimum fields required to make a request.
newGrafeasV1FileLocation ::
  GrafeasV1FileLocation
newGrafeasV1FileLocation =
  GrafeasV1FileLocation {filePath = Core.Nothing}

instance Core.FromJSON GrafeasV1FileLocation where
  parseJSON =
    Core.withObject
      "GrafeasV1FileLocation"
      (\o -> GrafeasV1FileLocation Core.<$> (o Core..:? "filePath"))

instance Core.ToJSON GrafeasV1FileLocation where
  toJSON GrafeasV1FileLocation {..} =
    Core.object
      (Core.catMaybes [("filePath" Core..=) Core.<$> filePath])

-- | Identifies the entity that executed the recipe, which is trusted to have correctly performed the operation and populated this provenance.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaBuilder' smart constructor.
newtype GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder = GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder
  { id :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaBuilder ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder
newGrafeasV1SlsaProvenanceZeroTwoSlsaBuilder =
  GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder {id = Core.Nothing}

instance Core.FromJSON GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder
            Core.<$> (o Core..:? "id")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder {..} =
    Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])

-- | Indicates that the builder claims certain fields in this message to be complete.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness' smart constructor.
data GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness = GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
  { environment :: (Core.Maybe Core.Bool),
    materials :: (Core.Maybe Core.Bool),
    parameters :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
newGrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness =
  GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
    { environment =
        Core.Nothing,
      materials = Core.Nothing,
      parameters = Core.Nothing
    }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness
            Core.<$> (o Core..:? "environment")
            Core.<*> (o Core..:? "materials")
            Core.<*> (o Core..:? "parameters")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness {..} =
    Core.object
      ( Core.catMaybes
          [ ("environment" Core..=) Core.<$> environment,
            ("materials" Core..=) Core.<$> materials,
            ("parameters" Core..=) Core.<$> parameters
          ]
      )

-- | Describes where the config file that kicked off the build came from. This is effectively a pointer to the source where buildConfig came from.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource' smart constructor.
data GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource = GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
  { digest :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest),
    entryPoint :: (Core.Maybe Core.Text),
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource =
  GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
    { digest =
        Core.Nothing,
      entryPoint = Core.Nothing,
      uri = Core.Nothing
    }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "entryPoint")
            Core.<*> (o Core..:? "uri")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource {..} =
    Core.object
      ( Core.catMaybes
          [ ("digest" Core..=) Core.<$> digest,
            ("entryPoint" Core..=) Core.<$> entryPoint,
            ("uri" Core..=) Core.<$> uri
          ]
      )

--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest' smart constructor.
newtype GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest = GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
newGrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest additional =
  GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
    { additional =
        additional
    }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest
  where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource_Digest {..} =
    Core.toJSON additional

-- | Identifies the event that kicked off the build.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation' smart constructor.
data GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation = GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation
  { configSource :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaConfigSource),
    environment ::
      ( Core.Maybe
          GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
      ),
    parameters ::
      ( Core.Maybe
          GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
      )
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation =
  GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation
    { configSource =
        Core.Nothing,
      environment = Core.Nothing,
      parameters = Core.Nothing
    }

instance Core.FromJSON GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation
            Core.<$> (o Core..:? "configSource")
            Core.<*> (o Core..:? "environment")
            Core.<*> (o Core..:? "parameters")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation {..} =
    Core.object
      ( Core.catMaybes
          [ ("configSource" Core..=) Core.<$> configSource,
            ("environment" Core..=) Core.<$> environment,
            ("parameters" Core..=) Core.<$> parameters
          ]
      )

--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment' smart constructor.
newtype GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment = GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
  additional =
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
      { additional =
          additional
      }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment
  where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Environment {..} =
    Core.toJSON additional

--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters' smart constructor.
newtype GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters = GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
newGrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
  additional =
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
      { additional =
          additional
      }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters
  where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation_Parameters {..} =
    Core.toJSON additional

-- | The collection of artifacts that influenced the build including sources, dependencies, build tools, base images, and so on.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial' smart constructor.
data GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial = GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial
  { digest :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest),
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial
newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial =
  GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial
    { digest = Core.Nothing,
      uri = Core.Nothing
    }

instance Core.FromJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "uri")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial {..} =
    Core.object
      ( Core.catMaybes
          [("digest" Core..=) Core.<$> digest, ("uri" Core..=) Core.<$> uri]
      )

--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest' smart constructor.
newtype GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest = GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
newGrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest additional =
  GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
    { additional =
        additional
    }

instance
  Core.FromJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
  where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
            Core.<$> (Core.parseJSONObject o)
      )

instance
  Core.ToJSON
    GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest
  where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial_Digest {..} =
    Core.toJSON additional

-- | Other properties of the build.
--
-- /See:/ 'newGrafeasV1SlsaProvenanceZeroTwoSlsaMetadata' smart constructor.
data GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata = GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata
  { buildFinishedOn :: (Core.Maybe Core.DateTime),
    buildInvocationId :: (Core.Maybe Core.Text),
    buildStartedOn :: (Core.Maybe Core.DateTime),
    completeness :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaCompleteness),
    reproducible :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata' with the minimum fields required to make a request.
newGrafeasV1SlsaProvenanceZeroTwoSlsaMetadata ::
  GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata
newGrafeasV1SlsaProvenanceZeroTwoSlsaMetadata =
  GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata
    { buildFinishedOn =
        Core.Nothing,
      buildInvocationId = Core.Nothing,
      buildStartedOn = Core.Nothing,
      completeness = Core.Nothing,
      reproducible = Core.Nothing
    }

instance Core.FromJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata where
  parseJSON =
    Core.withObject
      "GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata"
      ( \o ->
          GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata
            Core.<$> (o Core..:? "buildFinishedOn")
            Core.<*> (o Core..:? "buildInvocationId")
            Core.<*> (o Core..:? "buildStartedOn")
            Core.<*> (o Core..:? "completeness")
            Core.<*> (o Core..:? "reproducible")
      )

instance Core.ToJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata where
  toJSON GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildFinishedOn" Core..=) Core.<$> buildFinishedOn,
            ("buildInvocationId" Core..=) Core.<$> buildInvocationId,
            ("buildStartedOn" Core..=) Core.<$> buildStartedOn,
            ("completeness" Core..=) Core.<$> completeness,
            ("reproducible" Core..=) Core.<$> reproducible
          ]
      )

-- | Container message for hash values.
--
-- /See:/ 'newHash' smart constructor.
data Hash = Hash
  { -- | Required. The type of hash that was performed, e.g. \"SHA-256\".
    type' :: (Core.Maybe Core.Text),
    -- | Required. The hash value.
    value :: (Core.Maybe Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Hash' with the minimum fields required to make a request.
newHash ::
  Hash
newHash = Hash {type' = Core.Nothing, value = Core.Nothing}

instance Core.FromJSON Hash where
  parseJSON =
    Core.withObject
      "Hash"
      ( \o ->
          Hash Core.<$> (o Core..:? "type") Core.<*> (o Core..:? "value")
      )

instance Core.ToJSON Hash where
  toJSON Hash {..} =
    Core.object
      ( Core.catMaybes
          [ ("type" Core..=) Core.<$> type',
            ("value" Core..=) Core.<$> value
          ]
      )

-- | This submessage provides human-readable hints about the purpose of the authority. Because the name of a note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from \"readable\" names more suitable for debug output. Note that these hints should not be used to look up authorities in security sensitive contexts, such as when looking up attestations to verify.
--
-- /See:/ 'newHint' smart constructor.
newtype Hint = Hint
  { -- | Required. The human readable name of this attestation authority, for example \"qa\".
    humanReadableName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Hint' with the minimum fields required to make a request.
newHint ::
  Hint
newHint = Hint {humanReadableName = Core.Nothing}

instance Core.FromJSON Hint where
  parseJSON =
    Core.withObject
      "Hint"
      (\o -> Hint Core.<$> (o Core..:? "humanReadableName"))

instance Core.ToJSON Hint where
  toJSON Hint {..} =
    Core.object
      ( Core.catMaybes
          [("humanReadableName" Core..=) Core.<$> humanReadableName]
      )

-- | The unique identifier of the update.
--
-- /See:/ 'newIdentity' smart constructor.
data Identity = Identity
  { -- | The revision number of the update.
    revision :: (Core.Maybe Core.Int32),
    -- | The revision independent identifier of the update.
    updateId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Identity' with the minimum fields required to make a request.
newIdentity ::
  Identity
newIdentity =
  Identity {revision = Core.Nothing, updateId = Core.Nothing}

instance Core.FromJSON Identity where
  parseJSON =
    Core.withObject
      "Identity"
      ( \o ->
          Identity
            Core.<$> (o Core..:? "revision")
            Core.<*> (o Core..:? "updateId")
      )

instance Core.ToJSON Identity where
  toJSON Identity {..} =
    Core.object
      ( Core.catMaybes
          [ ("revision" Core..=) Core.<$> revision,
            ("updateId" Core..=) Core.<$> updateId
          ]
      )

-- | Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g., a tag of the resource_url.
--
-- /See:/ 'newImageNote' smart constructor.
data ImageNote = ImageNote
  { -- | Required. Immutable. The fingerprint of the base image.
    fingerprint :: (Core.Maybe Fingerprint),
    -- | Required. Immutable. The resource_url for the resource representing the basis of associated occurrence images.
    resourceUrl :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ImageNote' with the minimum fields required to make a request.
newImageNote ::
  ImageNote
newImageNote =
  ImageNote {fingerprint = Core.Nothing, resourceUrl = Core.Nothing}

instance Core.FromJSON ImageNote where
  parseJSON =
    Core.withObject
      "ImageNote"
      ( \o ->
          ImageNote
            Core.<$> (o Core..:? "fingerprint")
            Core.<*> (o Core..:? "resourceUrl")
      )

instance Core.ToJSON ImageNote where
  toJSON ImageNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("fingerprint" Core..=) Core.<$> fingerprint,
            ("resourceUrl" Core..=) Core.<$> resourceUrl
          ]
      )

-- | Details of the derived image portion of the DockerImage relationship. This image would be produced from a Dockerfile with FROM .
--
-- /See:/ 'newImageOccurrence' smart constructor.
data ImageOccurrence = ImageOccurrence
  { -- | Output only. This contains the base image URL for the derived image occurrence.
    baseResourceUrl :: (Core.Maybe Core.Text),
    -- | Output only. The number of layers by which this image differs from the associated image basis.
    distance :: (Core.Maybe Core.Int32),
    -- | Required. The fingerprint of the derived image.
    fingerprint :: (Core.Maybe Fingerprint),
    -- | This contains layer-specific metadata, if populated it has length \"distance\" and is ordered with [distance] being the layer immediately following the base image and [1] being the final layer.
    layerInfo :: (Core.Maybe [Layer])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ImageOccurrence' with the minimum fields required to make a request.
newImageOccurrence ::
  ImageOccurrence
newImageOccurrence =
  ImageOccurrence
    { baseResourceUrl = Core.Nothing,
      distance = Core.Nothing,
      fingerprint = Core.Nothing,
      layerInfo = Core.Nothing
    }

instance Core.FromJSON ImageOccurrence where
  parseJSON =
    Core.withObject
      "ImageOccurrence"
      ( \o ->
          ImageOccurrence
            Core.<$> (o Core..:? "baseResourceUrl")
            Core.<*> (o Core..:? "distance")
            Core.<*> (o Core..:? "fingerprint")
            Core.<*> (o Core..:? "layerInfo")
      )

instance Core.ToJSON ImageOccurrence where
  toJSON ImageOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("baseResourceUrl" Core..=) Core.<$> baseResourceUrl,
            ("distance" Core..=) Core.<$> distance,
            ("fingerprint" Core..=) Core.<$> fingerprint,
            ("layerInfo" Core..=) Core.<$> layerInfo
          ]
      )

--
-- /See:/ 'newInTotoProvenance' smart constructor.
data InTotoProvenance = InTotoProvenance
  { -- | required
    builderConfig :: (Core.Maybe BuilderConfig),
    -- | The collection of artifacts that influenced the build including sources, dependencies, build tools, base images, and so on. This is considered to be incomplete unless metadata.completeness.materials is true. Unset or null is equivalent to empty.
    materials :: (Core.Maybe [Core.Text]),
    metadata :: (Core.Maybe Metadata),
    -- | Identifies the configuration used for the build. When combined with materials, this SHOULD fully describe the build, such that re-running this recipe results in bit-for-bit identical output (if the build is reproducible). required
    recipe :: (Core.Maybe Recipe)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'InTotoProvenance' with the minimum fields required to make a request.
newInTotoProvenance ::
  InTotoProvenance
newInTotoProvenance =
  InTotoProvenance
    { builderConfig = Core.Nothing,
      materials = Core.Nothing,
      metadata = Core.Nothing,
      recipe = Core.Nothing
    }

instance Core.FromJSON InTotoProvenance where
  parseJSON =
    Core.withObject
      "InTotoProvenance"
      ( \o ->
          InTotoProvenance
            Core.<$> (o Core..:? "builderConfig")
            Core.<*> (o Core..:? "materials")
            Core.<*> (o Core..:? "metadata")
            Core.<*> (o Core..:? "recipe")
      )

instance Core.ToJSON InTotoProvenance where
  toJSON InTotoProvenance {..} =
    Core.object
      ( Core.catMaybes
          [ ("builderConfig" Core..=) Core.<$> builderConfig,
            ("materials" Core..=) Core.<$> materials,
            ("metadata" Core..=) Core.<$> metadata,
            ("recipe" Core..=) Core.<$> recipe
          ]
      )

--
-- /See:/ 'newInTotoSlsaProvenanceV1' smart constructor.
data InTotoSlsaProvenanceV1 = InTotoSlsaProvenanceV1
  { -- | InToto spec defined at https:\/\/github.com\/in-toto\/attestation\/tree\/main\/spec#statement
    type' :: (Core.Maybe Core.Text),
    predicate :: (Core.Maybe SlsaProvenanceV1),
    predicateType :: (Core.Maybe Core.Text),
    subject :: (Core.Maybe [Subject])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'InTotoSlsaProvenanceV1' with the minimum fields required to make a request.
newInTotoSlsaProvenanceV1 ::
  InTotoSlsaProvenanceV1
newInTotoSlsaProvenanceV1 =
  InTotoSlsaProvenanceV1
    { type' = Core.Nothing,
      predicate = Core.Nothing,
      predicateType = Core.Nothing,
      subject = Core.Nothing
    }

instance Core.FromJSON InTotoSlsaProvenanceV1 where
  parseJSON =
    Core.withObject
      "InTotoSlsaProvenanceV1"
      ( \o ->
          InTotoSlsaProvenanceV1
            Core.<$> (o Core..:? "_type")
            Core.<*> (o Core..:? "predicate")
            Core.<*> (o Core..:? "predicateType")
            Core.<*> (o Core..:? "subject")
      )

instance Core.ToJSON InTotoSlsaProvenanceV1 where
  toJSON InTotoSlsaProvenanceV1 {..} =
    Core.object
      ( Core.catMaybes
          [ ("_type" Core..=) Core.<$> type',
            ("predicate" Core..=) Core.<$> predicate,
            ("predicateType" Core..=) Core.<$> predicateType,
            ("subject" Core..=) Core.<$> subject
          ]
      )

-- | Spec defined at https:\/\/github.com\/in-toto\/attestation\/tree\/main\/spec#statement The serialized InTotoStatement will be stored as Envelope.payload. Envelope.payloadType is always \"application\/vnd.in-toto+json\".
--
-- /See:/ 'newInTotoStatement' smart constructor.
data InTotoStatement = InTotoStatement
  { -- | Always @https:\/\/in-toto.io\/Statement\/v0.1@.
    type' :: (Core.Maybe Core.Text),
    -- | @https:\/\/slsa.dev\/provenance\/v0.1@ for SlsaProvenance.
    predicateType :: (Core.Maybe Core.Text),
    provenance :: (Core.Maybe InTotoProvenance),
    slsaProvenance :: (Core.Maybe SlsaProvenance),
    slsaProvenanceZeroTwo :: (Core.Maybe SlsaProvenanceZeroTwo),
    subject :: (Core.Maybe [Subject])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'InTotoStatement' with the minimum fields required to make a request.
newInTotoStatement ::
  InTotoStatement
newInTotoStatement =
  InTotoStatement
    { type' = Core.Nothing,
      predicateType = Core.Nothing,
      provenance = Core.Nothing,
      slsaProvenance = Core.Nothing,
      slsaProvenanceZeroTwo = Core.Nothing,
      subject = Core.Nothing
    }

instance Core.FromJSON InTotoStatement where
  parseJSON =
    Core.withObject
      "InTotoStatement"
      ( \o ->
          InTotoStatement
            Core.<$> (o Core..:? "_type")
            Core.<*> (o Core..:? "predicateType")
            Core.<*> (o Core..:? "provenance")
            Core.<*> (o Core..:? "slsaProvenance")
            Core.<*> (o Core..:? "slsaProvenanceZeroTwo")
            Core.<*> (o Core..:? "subject")
      )

instance Core.ToJSON InTotoStatement where
  toJSON InTotoStatement {..} =
    Core.object
      ( Core.catMaybes
          [ ("_type" Core..=) Core.<$> type',
            ("predicateType" Core..=) Core.<$> predicateType,
            ("provenance" Core..=) Core.<$> provenance,
            ("slsaProvenance" Core..=) Core.<$> slsaProvenance,
            ("slsaProvenanceZeroTwo" Core..=) Core.<$> slsaProvenanceZeroTwo,
            ("subject" Core..=) Core.<$> subject
          ]
      )

-- | Justification provides the justification when the state of the assessment if NOT_AFFECTED.
--
-- /See:/ 'newJustification' smart constructor.
data Justification = Justification
  { -- | Additional details on why this justification was chosen.
    details :: (Core.Maybe Core.Text),
    -- | The justification type for this vulnerability.
    justificationType :: (Core.Maybe Justification_JustificationType)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Justification' with the minimum fields required to make a request.
newJustification ::
  Justification
newJustification =
  Justification
    { details = Core.Nothing,
      justificationType = Core.Nothing
    }

instance Core.FromJSON Justification where
  parseJSON =
    Core.withObject
      "Justification"
      ( \o ->
          Justification
            Core.<$> (o Core..:? "details")
            Core.<*> (o Core..:? "justificationType")
      )

instance Core.ToJSON Justification where
  toJSON Justification {..} =
    Core.object
      ( Core.catMaybes
          [ ("details" Core..=) Core.<$> details,
            ("justificationType" Core..=) Core.<$> justificationType
          ]
      )

--
-- /See:/ 'newJwt' smart constructor.
newtype Jwt = Jwt
  { -- | The compact encoding of a JWS, which is always three base64 encoded strings joined by periods. For details, see: https:\/\/tools.ietf.org\/html\/rfc7515.html#section-3.1
    compactJwt :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Jwt' with the minimum fields required to make a request.
newJwt ::
  Jwt
newJwt = Jwt {compactJwt = Core.Nothing}

instance Core.FromJSON Jwt where
  parseJSON =
    Core.withObject
      "Jwt"
      (\o -> Jwt Core.<$> (o Core..:? "compactJwt"))

instance Core.ToJSON Jwt where
  toJSON Jwt {..} =
    Core.object
      (Core.catMaybes [("compactJwt" Core..=) Core.<$> compactJwt])

--
-- /See:/ 'newKnowledgeBase' smart constructor.
data KnowledgeBase = KnowledgeBase
  { -- | The KB name (generally of the form KB[0-9]+ (e.g., KB123456)).
    name :: (Core.Maybe Core.Text),
    -- | A link to the KB in the [Windows update catalog] (https:\/\/www.catalog.update.microsoft.com\/).
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'KnowledgeBase' with the minimum fields required to make a request.
newKnowledgeBase ::
  KnowledgeBase
newKnowledgeBase =
  KnowledgeBase {name = Core.Nothing, url = Core.Nothing}

instance Core.FromJSON KnowledgeBase where
  parseJSON =
    Core.withObject
      "KnowledgeBase"
      ( \o ->
          KnowledgeBase
            Core.<$> (o Core..:? "name")
            Core.<*> (o Core..:? "url")
      )

instance Core.ToJSON KnowledgeBase where
  toJSON KnowledgeBase {..} =
    Core.object
      ( Core.catMaybes
          [("name" Core..=) Core.<$> name, ("url" Core..=) Core.<$> url]
      )

-- | Layer holds metadata specific to a layer of a Docker image.
--
-- /See:/ 'newLayer' smart constructor.
data Layer = Layer
  { -- | The recovered arguments to the Dockerfile directive.
    arguments :: (Core.Maybe Core.Text),
    -- | Required. The recovered Dockerfile directive used to construct this layer. See https:\/\/docs.docker.com\/engine\/reference\/builder\/ for more information.
    directive :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Layer' with the minimum fields required to make a request.
newLayer ::
  Layer
newLayer =
  Layer {arguments = Core.Nothing, directive = Core.Nothing}

instance Core.FromJSON Layer where
  parseJSON =
    Core.withObject
      "Layer"
      ( \o ->
          Layer
            Core.<$> (o Core..:? "arguments")
            Core.<*> (o Core..:? "directive")
      )

instance Core.ToJSON Layer where
  toJSON Layer {..} =
    Core.object
      ( Core.catMaybes
          [ ("arguments" Core..=) Core.<$> arguments,
            ("directive" Core..=) Core.<$> directive
          ]
      )

-- | License information.
--
-- /See:/ 'newLicense' smart constructor.
data License = License
  { -- | Comments
    comments :: (Core.Maybe Core.Text),
    -- | Often a single license can be used to represent the licensing terms. Sometimes it is necessary to include a choice of one or more licenses or some combination of license identifiers. Examples: \"LGPL-2.1-only OR MIT\", \"LGPL-2.1-only AND MIT\", \"GPL-2.0-or-later WITH Bison-exception-2.2\".
    expression :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'License' with the minimum fields required to make a request.
newLicense ::
  License
newLicense =
  License {comments = Core.Nothing, expression = Core.Nothing}

instance Core.FromJSON License where
  parseJSON =
    Core.withObject
      "License"
      ( \o ->
          License
            Core.<$> (o Core..:? "comments")
            Core.<*> (o Core..:? "expression")
      )

instance Core.ToJSON License where
  toJSON License {..} =
    Core.object
      ( Core.catMaybes
          [ ("comments" Core..=) Core.<$> comments,
            ("expression" Core..=) Core.<$> expression
          ]
      )

-- | Response for listing occurrences for a note.
--
-- /See:/ 'newListNoteOccurrencesResponse' smart constructor.
data ListNoteOccurrencesResponse = ListNoteOccurrencesResponse
  { -- | Token to provide to skip to a particular spot in the list.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The occurrences attached to the specified note.
    occurrences :: (Core.Maybe [Occurrence])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListNoteOccurrencesResponse' with the minimum fields required to make a request.
newListNoteOccurrencesResponse ::
  ListNoteOccurrencesResponse
newListNoteOccurrencesResponse =
  ListNoteOccurrencesResponse
    { nextPageToken = Core.Nothing,
      occurrences = Core.Nothing
    }

instance Core.FromJSON ListNoteOccurrencesResponse where
  parseJSON =
    Core.withObject
      "ListNoteOccurrencesResponse"
      ( \o ->
          ListNoteOccurrencesResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "occurrences")
      )

instance Core.ToJSON ListNoteOccurrencesResponse where
  toJSON ListNoteOccurrencesResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("occurrences" Core..=) Core.<$> occurrences
          ]
      )

-- | Response for listing notes.
--
-- /See:/ 'newListNotesResponse' smart constructor.
data ListNotesResponse = ListNotesResponse
  { -- | The next pagination token in the list response. It should be used as @page_token@ for the following request. An empty value means no more results.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The notes requested.
    notes :: (Core.Maybe [Note])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListNotesResponse' with the minimum fields required to make a request.
newListNotesResponse ::
  ListNotesResponse
newListNotesResponse =
  ListNotesResponse
    { nextPageToken = Core.Nothing,
      notes = Core.Nothing
    }

instance Core.FromJSON ListNotesResponse where
  parseJSON =
    Core.withObject
      "ListNotesResponse"
      ( \o ->
          ListNotesResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "notes")
      )

instance Core.ToJSON ListNotesResponse where
  toJSON ListNotesResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("notes" Core..=) Core.<$> notes
          ]
      )

-- | Response for listing occurrences.
--
-- /See:/ 'newListOccurrencesResponse' smart constructor.
data ListOccurrencesResponse = ListOccurrencesResponse
  { -- | The next pagination token in the list response. It should be used as @page_token@ for the following request. An empty value means no more results.
    nextPageToken :: (Core.Maybe Core.Text),
    -- | The occurrences requested.
    occurrences :: (Core.Maybe [Occurrence])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ListOccurrencesResponse' with the minimum fields required to make a request.
newListOccurrencesResponse ::
  ListOccurrencesResponse
newListOccurrencesResponse =
  ListOccurrencesResponse
    { nextPageToken = Core.Nothing,
      occurrences = Core.Nothing
    }

instance Core.FromJSON ListOccurrencesResponse where
  parseJSON =
    Core.withObject
      "ListOccurrencesResponse"
      ( \o ->
          ListOccurrencesResponse
            Core.<$> (o Core..:? "nextPageToken")
            Core.<*> (o Core..:? "occurrences")
      )

instance Core.ToJSON ListOccurrencesResponse where
  toJSON ListOccurrencesResponse {..} =
    Core.object
      ( Core.catMaybes
          [ ("nextPageToken" Core..=) Core.<$> nextPageToken,
            ("occurrences" Core..=) Core.<$> occurrences
          ]
      )

-- | An occurrence of a particular package installation found within a system\'s filesystem. E.g., glibc was found in @\/var\/lib\/dpkg\/status@.
--
-- /See:/ 'newLocation' smart constructor.
data Location = Location
  { -- | Deprecated. The CPE URI in <https://cpe.mitre.org/specification/ CPE format>
    cpeUri :: (Core.Maybe Core.Text),
    -- | The path from which we gathered that this package\/version is installed.
    path :: (Core.Maybe Core.Text),
    -- | Deprecated. The version installed at this location.
    version :: (Core.Maybe Version)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Location' with the minimum fields required to make a request.
newLocation ::
  Location
newLocation =
  Location
    { cpeUri = Core.Nothing,
      path = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON Location where
  parseJSON =
    Core.withObject
      "Location"
      ( \o ->
          Location
            Core.<$> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "path")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON Location where
  toJSON Location {..} =
    Core.object
      ( Core.catMaybes
          [ ("cpeUri" Core..=) Core.<$> cpeUri,
            ("path" Core..=) Core.<$> path,
            ("version" Core..=) Core.<$> version
          ]
      )

--
-- /See:/ 'newMaterial' smart constructor.
data Material = Material
  { digest :: (Core.Maybe Material_Digest),
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Material' with the minimum fields required to make a request.
newMaterial ::
  Material
newMaterial = Material {digest = Core.Nothing, uri = Core.Nothing}

instance Core.FromJSON Material where
  parseJSON =
    Core.withObject
      "Material"
      ( \o ->
          Material
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "uri")
      )

instance Core.ToJSON Material where
  toJSON Material {..} =
    Core.object
      ( Core.catMaybes
          [("digest" Core..=) Core.<$> digest, ("uri" Core..=) Core.<$> uri]
      )

--
-- /See:/ 'newMaterial_Digest' smart constructor.
newtype Material_Digest = Material_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Material_Digest' with the minimum fields required to make a request.
newMaterial_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  Material_Digest
newMaterial_Digest additional =
  Material_Digest {additional = additional}

instance Core.FromJSON Material_Digest where
  parseJSON =
    Core.withObject
      "Material_Digest"
      (\o -> Material_Digest Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Material_Digest where
  toJSON Material_Digest {..} = Core.toJSON additional

-- | Other properties of the build.
--
-- /See:/ 'newMetadata' smart constructor.
data Metadata = Metadata
  { -- | The timestamp of when the build completed.
    buildFinishedOn :: (Core.Maybe Core.DateTime),
    -- | Identifies the particular build invocation, which can be useful for finding associated logs or other ad-hoc analysis. The value SHOULD be globally unique, per in-toto Provenance spec.
    buildInvocationId :: (Core.Maybe Core.Text),
    -- | The timestamp of when the build started.
    buildStartedOn :: (Core.Maybe Core.DateTime),
    -- | Indicates that the builder claims certain fields in this message to be complete.
    completeness :: (Core.Maybe Completeness),
    -- | If true, the builder claims that running the recipe on materials will produce bit-for-bit identical output.
    reproducible :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Metadata' with the minimum fields required to make a request.
newMetadata ::
  Metadata
newMetadata =
  Metadata
    { buildFinishedOn = Core.Nothing,
      buildInvocationId = Core.Nothing,
      buildStartedOn = Core.Nothing,
      completeness = Core.Nothing,
      reproducible = Core.Nothing
    }

instance Core.FromJSON Metadata where
  parseJSON =
    Core.withObject
      "Metadata"
      ( \o ->
          Metadata
            Core.<$> (o Core..:? "buildFinishedOn")
            Core.<*> (o Core..:? "buildInvocationId")
            Core.<*> (o Core..:? "buildStartedOn")
            Core.<*> (o Core..:? "completeness")
            Core.<*> (o Core..:? "reproducible")
      )

instance Core.ToJSON Metadata where
  toJSON Metadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildFinishedOn" Core..=) Core.<$> buildFinishedOn,
            ("buildInvocationId" Core..=) Core.<$> buildInvocationId,
            ("buildStartedOn" Core..=) Core.<$> buildStartedOn,
            ("completeness" Core..=) Core.<$> completeness,
            ("reproducible" Core..=) Core.<$> reproducible
          ]
      )

-- | Details about files that caused a compliance check to fail. display_command is a single command that can be used to display a list of non compliant files. When there is no such command, we can also iterate a list of non compliant file using \'path\'.
--
-- /See:/ 'newNonCompliantFile' smart constructor.
data NonCompliantFile = NonCompliantFile
  { -- | Command to display the non-compliant files.
    displayCommand :: (Core.Maybe Core.Text),
    -- | Empty if @display_command@ is set.
    path :: (Core.Maybe Core.Text),
    -- | Explains why a file is non compliant for a CIS check.
    reason :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'NonCompliantFile' with the minimum fields required to make a request.
newNonCompliantFile ::
  NonCompliantFile
newNonCompliantFile =
  NonCompliantFile
    { displayCommand = Core.Nothing,
      path = Core.Nothing,
      reason = Core.Nothing
    }

instance Core.FromJSON NonCompliantFile where
  parseJSON =
    Core.withObject
      "NonCompliantFile"
      ( \o ->
          NonCompliantFile
            Core.<$> (o Core..:? "displayCommand")
            Core.<*> (o Core..:? "path")
            Core.<*> (o Core..:? "reason")
      )

instance Core.ToJSON NonCompliantFile where
  toJSON NonCompliantFile {..} =
    Core.object
      ( Core.catMaybes
          [ ("displayCommand" Core..=) Core.<$> displayCommand,
            ("path" Core..=) Core.<$> path,
            ("reason" Core..=) Core.<$> reason
          ]
      )

-- | A type of analysis that can be done for a resource.
--
-- /See:/ 'newNote' smart constructor.
data Note = Note
  { -- | A note describing an attestation role.
    attestation :: (Core.Maybe AttestationNote),
    -- | A note describing build provenance for a verifiable build.
    build :: (Core.Maybe BuildNote),
    -- | A note describing a compliance check.
    compliance :: (Core.Maybe ComplianceNote),
    -- | Output only. The time this note was created. This field can be used as a filter in list requests.
    createTime :: (Core.Maybe Core.DateTime),
    -- | A note describing something that can be deployed.
    deployment :: (Core.Maybe DeploymentNote),
    -- | A note describing the initial analysis of a resource.
    discovery :: (Core.Maybe DiscoveryNote),
    -- | A note describing a dsse attestation note.
    dsseAttestation :: (Core.Maybe DSSEAttestationNote),
    -- | Time of expiration for this note. Empty if note does not expire.
    expirationTime :: (Core.Maybe Core.DateTime),
    -- | A note describing a base image.
    image :: (Core.Maybe ImageNote),
    -- | Output only. The type of analysis. This field can be used as a filter in list requests.
    kind :: (Core.Maybe Note_Kind),
    -- | A detailed description of this note.
    longDescription :: (Core.Maybe Core.Text),
    -- | Output only. The name of the note in the form of @projects\/[PROVIDER_ID]\/notes\/[NOTE_ID]@.
    name :: (Core.Maybe Core.Text),
    -- | A note describing a package hosted by various package managers.
    package :: (Core.Maybe PackageNote),
    -- | Other notes related to this note.
    relatedNoteNames :: (Core.Maybe [Core.Text]),
    -- | URLs associated with this note.
    relatedUrl :: (Core.Maybe [RelatedUrl]),
    -- | A note describing an SBOM reference.
    sbomReference :: (Core.Maybe SBOMReferenceNote),
    -- | A one sentence description of this note.
    shortDescription :: (Core.Maybe Core.Text),
    -- | Output only. The time this note was last updated. This field can be used as a filter in list requests.
    updateTime :: (Core.Maybe Core.DateTime),
    -- | A note describing available package upgrades.
    upgrade :: (Core.Maybe UpgradeNote),
    -- | A note describing a package vulnerability.
    vulnerability :: (Core.Maybe VulnerabilityNote),
    -- | A note describing a vulnerability assessment.
    vulnerabilityAssessment :: (Core.Maybe VulnerabilityAssessmentNote)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Note' with the minimum fields required to make a request.
newNote ::
  Note
newNote =
  Note
    { attestation = Core.Nothing,
      build = Core.Nothing,
      compliance = Core.Nothing,
      createTime = Core.Nothing,
      deployment = Core.Nothing,
      discovery = Core.Nothing,
      dsseAttestation = Core.Nothing,
      expirationTime = Core.Nothing,
      image = Core.Nothing,
      kind = Core.Nothing,
      longDescription = Core.Nothing,
      name = Core.Nothing,
      package = Core.Nothing,
      relatedNoteNames = Core.Nothing,
      relatedUrl = Core.Nothing,
      sbomReference = Core.Nothing,
      shortDescription = Core.Nothing,
      updateTime = Core.Nothing,
      upgrade = Core.Nothing,
      vulnerability = Core.Nothing,
      vulnerabilityAssessment = Core.Nothing
    }

instance Core.FromJSON Note where
  parseJSON =
    Core.withObject
      "Note"
      ( \o ->
          Note
            Core.<$> (o Core..:? "attestation")
            Core.<*> (o Core..:? "build")
            Core.<*> (o Core..:? "compliance")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "deployment")
            Core.<*> (o Core..:? "discovery")
            Core.<*> (o Core..:? "dsseAttestation")
            Core.<*> (o Core..:? "expirationTime")
            Core.<*> (o Core..:? "image")
            Core.<*> (o Core..:? "kind")
            Core.<*> (o Core..:? "longDescription")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "package")
            Core.<*> (o Core..:? "relatedNoteNames")
            Core.<*> (o Core..:? "relatedUrl")
            Core.<*> (o Core..:? "sbomReference")
            Core.<*> (o Core..:? "shortDescription")
            Core.<*> (o Core..:? "updateTime")
            Core.<*> (o Core..:? "upgrade")
            Core.<*> (o Core..:? "vulnerability")
            Core.<*> (o Core..:? "vulnerabilityAssessment")
      )

instance Core.ToJSON Note where
  toJSON Note {..} =
    Core.object
      ( Core.catMaybes
          [ ("attestation" Core..=) Core.<$> attestation,
            ("build" Core..=) Core.<$> build,
            ("compliance" Core..=) Core.<$> compliance,
            ("createTime" Core..=) Core.<$> createTime,
            ("deployment" Core..=) Core.<$> deployment,
            ("discovery" Core..=) Core.<$> discovery,
            ("dsseAttestation" Core..=) Core.<$> dsseAttestation,
            ("expirationTime" Core..=) Core.<$> expirationTime,
            ("image" Core..=) Core.<$> image,
            ("kind" Core..=) Core.<$> kind,
            ("longDescription" Core..=) Core.<$> longDescription,
            ("name" Core..=) Core.<$> name,
            ("package" Core..=) Core.<$> package,
            ("relatedNoteNames" Core..=) Core.<$> relatedNoteNames,
            ("relatedUrl" Core..=) Core.<$> relatedUrl,
            ("sbomReference" Core..=) Core.<$> sbomReference,
            ("shortDescription" Core..=) Core.<$> shortDescription,
            ("updateTime" Core..=) Core.<$> updateTime,
            ("upgrade" Core..=) Core.<$> upgrade,
            ("vulnerability" Core..=) Core.<$> vulnerability,
            ("vulnerabilityAssessment" Core..=)
              Core.<$> vulnerabilityAssessment
          ]
      )

-- | An instance of an analysis type that has been found on a resource.
--
-- /See:/ 'newOccurrence' smart constructor.
data Occurrence = Occurrence
  { -- | Describes an attestation of an artifact.
    attestation :: (Core.Maybe AttestationOccurrence),
    -- | Describes a verifiable build.
    build :: (Core.Maybe BuildOccurrence),
    -- | Describes a compliance violation on a linked resource.
    compliance :: (Core.Maybe ComplianceOccurrence),
    -- | Output only. The time this occurrence was created.
    createTime :: (Core.Maybe Core.DateTime),
    -- | Describes the deployment of an artifact on a runtime.
    deployment :: (Core.Maybe DeploymentOccurrence),
    -- | Describes when a resource was discovered.
    discovery :: (Core.Maybe DiscoveryOccurrence),
    -- | Describes an attestation of an artifact using dsse.
    dsseAttestation :: (Core.Maybe DSSEAttestationOccurrence),
    -- | https:\/\/github.com\/secure-systems-lab\/dsse
    envelope :: (Core.Maybe Envelope),
    -- | Describes how this resource derives from the basis in the associated note.
    image :: (Core.Maybe ImageOccurrence),
    -- | Output only. This explicitly denotes which of the occurrence details are specified. This field can be used as a filter in list requests.
    kind :: (Core.Maybe Occurrence_Kind),
    -- | Output only. The name of the occurrence in the form of @projects\/[PROJECT_ID]\/occurrences\/[OCCURRENCE_ID]@.
    name :: (Core.Maybe Core.Text),
    -- | Required. Immutable. The analysis note associated with this occurrence, in the form of @projects\/[PROVIDER_ID]\/notes\/[NOTE_ID]@. This field can be used as a filter in list requests.
    noteName :: (Core.Maybe Core.Text),
    -- | Describes the installation of a package on the linked resource.
    package :: (Core.Maybe PackageOccurrence),
    -- | A description of actions that can be taken to remedy the note.
    remediation :: (Core.Maybe Core.Text),
    -- | Required. Immutable. A URI that represents the resource for which the occurrence applies. For example, @https:\/\/gcr.io\/project\/image\@sha256:123abc@ for a Docker image.
    resourceUri :: (Core.Maybe Core.Text),
    -- | Describes a specific SBOM reference occurrences.
    sbomReference :: (Core.Maybe SBOMReferenceOccurrence),
    -- | Output only. The time this occurrence was last updated.
    updateTime :: (Core.Maybe Core.DateTime),
    -- | Describes an available package upgrade on the linked resource.
    upgrade :: (Core.Maybe UpgradeOccurrence),
    -- | Describes a security vulnerability.
    vulnerability :: (Core.Maybe VulnerabilityOccurrence)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Occurrence' with the minimum fields required to make a request.
newOccurrence ::
  Occurrence
newOccurrence =
  Occurrence
    { attestation = Core.Nothing,
      build = Core.Nothing,
      compliance = Core.Nothing,
      createTime = Core.Nothing,
      deployment = Core.Nothing,
      discovery = Core.Nothing,
      dsseAttestation = Core.Nothing,
      envelope = Core.Nothing,
      image = Core.Nothing,
      kind = Core.Nothing,
      name = Core.Nothing,
      noteName = Core.Nothing,
      package = Core.Nothing,
      remediation = Core.Nothing,
      resourceUri = Core.Nothing,
      sbomReference = Core.Nothing,
      updateTime = Core.Nothing,
      upgrade = Core.Nothing,
      vulnerability = Core.Nothing
    }

instance Core.FromJSON Occurrence where
  parseJSON =
    Core.withObject
      "Occurrence"
      ( \o ->
          Occurrence
            Core.<$> (o Core..:? "attestation")
            Core.<*> (o Core..:? "build")
            Core.<*> (o Core..:? "compliance")
            Core.<*> (o Core..:? "createTime")
            Core.<*> (o Core..:? "deployment")
            Core.<*> (o Core..:? "discovery")
            Core.<*> (o Core..:? "dsseAttestation")
            Core.<*> (o Core..:? "envelope")
            Core.<*> (o Core..:? "image")
            Core.<*> (o Core..:? "kind")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "noteName")
            Core.<*> (o Core..:? "package")
            Core.<*> (o Core..:? "remediation")
            Core.<*> (o Core..:? "resourceUri")
            Core.<*> (o Core..:? "sbomReference")
            Core.<*> (o Core..:? "updateTime")
            Core.<*> (o Core..:? "upgrade")
            Core.<*> (o Core..:? "vulnerability")
      )

instance Core.ToJSON Occurrence where
  toJSON Occurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("attestation" Core..=) Core.<$> attestation,
            ("build" Core..=) Core.<$> build,
            ("compliance" Core..=) Core.<$> compliance,
            ("createTime" Core..=) Core.<$> createTime,
            ("deployment" Core..=) Core.<$> deployment,
            ("discovery" Core..=) Core.<$> discovery,
            ("dsseAttestation" Core..=) Core.<$> dsseAttestation,
            ("envelope" Core..=) Core.<$> envelope,
            ("image" Core..=) Core.<$> image,
            ("kind" Core..=) Core.<$> kind,
            ("name" Core..=) Core.<$> name,
            ("noteName" Core..=) Core.<$> noteName,
            ("package" Core..=) Core.<$> package,
            ("remediation" Core..=) Core.<$> remediation,
            ("resourceUri" Core..=) Core.<$> resourceUri,
            ("sbomReference" Core..=) Core.<$> sbomReference,
            ("updateTime" Core..=) Core.<$> updateTime,
            ("upgrade" Core..=) Core.<$> upgrade,
            ("vulnerability" Core..=) Core.<$> vulnerability
          ]
      )

-- | A detail for a distro and package this vulnerability occurrence was found in and its associated fix (if one is available).
--
-- /See:/ 'newPackageIssue' smart constructor.
data PackageIssue = PackageIssue
  { -- | Required. The <https://cpe.mitre.org/specification/ CPE URI> this vulnerability was found in.
    affectedCpeUri :: (Core.Maybe Core.Text),
    -- | Required. The package this vulnerability was found in.
    affectedPackage :: (Core.Maybe Core.Text),
    -- | Required. The version of the package that is installed on the resource affected by this vulnerability.
    affectedVersion :: (Core.Maybe Version),
    -- | Output only. The distro or language system assigned severity for this vulnerability when that is available and note provider assigned severity when it is not available.
    effectiveSeverity :: (Core.Maybe PackageIssue_EffectiveSeverity),
    -- | The location at which this package was found.
    fileLocation :: (Core.Maybe [GrafeasV1FileLocation]),
    -- | Output only. Whether a fix is available for this package.
    fixAvailable :: (Core.Maybe Core.Bool),
    -- | The <https://cpe.mitre.org/specification/ CPE URI> this vulnerability was fixed in. It is possible for this to be different from the affected/cpe/uri.
    fixedCpeUri :: (Core.Maybe Core.Text),
    -- | The package this vulnerability was fixed in. It is possible for this to be different from the affected_package.
    fixedPackage :: (Core.Maybe Core.Text),
    -- | Required. The version of the package this vulnerability was fixed in. Setting this to VersionKind.MAXIMUM means no fix is yet available.
    fixedVersion :: (Core.Maybe Version),
    -- | The type of package (e.g. OS, MAVEN, GO).
    packageType :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PackageIssue' with the minimum fields required to make a request.
newPackageIssue ::
  PackageIssue
newPackageIssue =
  PackageIssue
    { affectedCpeUri = Core.Nothing,
      affectedPackage = Core.Nothing,
      affectedVersion = Core.Nothing,
      effectiveSeverity = Core.Nothing,
      fileLocation = Core.Nothing,
      fixAvailable = Core.Nothing,
      fixedCpeUri = Core.Nothing,
      fixedPackage = Core.Nothing,
      fixedVersion = Core.Nothing,
      packageType = Core.Nothing
    }

instance Core.FromJSON PackageIssue where
  parseJSON =
    Core.withObject
      "PackageIssue"
      ( \o ->
          PackageIssue
            Core.<$> (o Core..:? "affectedCpeUri")
            Core.<*> (o Core..:? "affectedPackage")
            Core.<*> (o Core..:? "affectedVersion")
            Core.<*> (o Core..:? "effectiveSeverity")
            Core.<*> (o Core..:? "fileLocation")
            Core.<*> (o Core..:? "fixAvailable")
            Core.<*> (o Core..:? "fixedCpeUri")
            Core.<*> (o Core..:? "fixedPackage")
            Core.<*> (o Core..:? "fixedVersion")
            Core.<*> (o Core..:? "packageType")
      )

instance Core.ToJSON PackageIssue where
  toJSON PackageIssue {..} =
    Core.object
      ( Core.catMaybes
          [ ("affectedCpeUri" Core..=) Core.<$> affectedCpeUri,
            ("affectedPackage" Core..=) Core.<$> affectedPackage,
            ("affectedVersion" Core..=) Core.<$> affectedVersion,
            ("effectiveSeverity" Core..=) Core.<$> effectiveSeverity,
            ("fileLocation" Core..=) Core.<$> fileLocation,
            ("fixAvailable" Core..=) Core.<$> fixAvailable,
            ("fixedCpeUri" Core..=) Core.<$> fixedCpeUri,
            ("fixedPackage" Core..=) Core.<$> fixedPackage,
            ("fixedVersion" Core..=) Core.<$> fixedVersion,
            ("packageType" Core..=) Core.<$> packageType
          ]
      )

-- | PackageNote represents a particular package version.
--
-- /See:/ 'newPackageNote' smart constructor.
data PackageNote = PackageNote
  { -- | The CPU architecture for which packages in this distribution channel were built. Architecture will be blank for language packages.
    architecture :: (Core.Maybe PackageNote_Architecture),
    -- | The cpe/uri in <https://cpe.mitre.org/specification/ CPE format> denoting the package manager version distributing a package. The cpe/uri will be blank for language packages.
    cpeUri :: (Core.Maybe Core.Text),
    -- | The description of this package.
    description :: (Core.Maybe Core.Text),
    -- | Hash value, typically a file digest, that allows unique identification a specific package.
    digest :: (Core.Maybe [Digest]),
    -- | Deprecated. The various channels by which a package is distributed.
    distribution :: (Core.Maybe [Distribution]),
    -- | Licenses that have been declared by the authors of the package.
    license :: (Core.Maybe License),
    -- | A freeform text denoting the maintainer of this package.
    maintainer :: (Core.Maybe Core.Text),
    -- | Required. Immutable. The name of the package.
    name :: (Core.Maybe Core.Text),
    -- | The type of package; whether native or non native (e.g., ruby gems, node.js packages, etc.).
    packageType :: (Core.Maybe Core.Text),
    -- | The homepage for this package.
    url :: (Core.Maybe Core.Text),
    -- | The version of the package.
    version :: (Core.Maybe Version)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PackageNote' with the minimum fields required to make a request.
newPackageNote ::
  PackageNote
newPackageNote =
  PackageNote
    { architecture = Core.Nothing,
      cpeUri = Core.Nothing,
      description = Core.Nothing,
      digest = Core.Nothing,
      distribution = Core.Nothing,
      license = Core.Nothing,
      maintainer = Core.Nothing,
      name = Core.Nothing,
      packageType = Core.Nothing,
      url = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON PackageNote where
  parseJSON =
    Core.withObject
      "PackageNote"
      ( \o ->
          PackageNote
            Core.<$> (o Core..:? "architecture")
            Core.<*> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "digest")
            Core.<*> (o Core..:? "distribution")
            Core.<*> (o Core..:? "license")
            Core.<*> (o Core..:? "maintainer")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "packageType")
            Core.<*> (o Core..:? "url")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON PackageNote where
  toJSON PackageNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("architecture" Core..=) Core.<$> architecture,
            ("cpeUri" Core..=) Core.<$> cpeUri,
            ("description" Core..=) Core.<$> description,
            ("digest" Core..=) Core.<$> digest,
            ("distribution" Core..=) Core.<$> distribution,
            ("license" Core..=) Core.<$> license,
            ("maintainer" Core..=) Core.<$> maintainer,
            ("name" Core..=) Core.<$> name,
            ("packageType" Core..=) Core.<$> packageType,
            ("url" Core..=) Core.<$> url,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | Details on how a particular software package was installed on a system.
--
-- /See:/ 'newPackageOccurrence' smart constructor.
data PackageOccurrence = PackageOccurrence
  { -- | Output only. The CPU architecture for which packages in this distribution channel were built. Architecture will be blank for language packages.
    architecture :: (Core.Maybe PackageOccurrence_Architecture),
    -- | Output only. The cpe/uri in <https://cpe.mitre.org/specification/ CPE format> denoting the package manager version distributing a package. The cpe/uri will be blank for language packages.
    cpeUri :: (Core.Maybe Core.Text),
    -- | Licenses that have been declared by the authors of the package.
    license :: (Core.Maybe License),
    -- | All of the places within the filesystem versions of this package have been found.
    location :: (Core.Maybe [Location]),
    -- | Required. Output only. The name of the installed package.
    name :: (Core.Maybe Core.Text),
    -- | Output only. The type of package; whether native or non native (e.g., ruby gems, node.js packages, etc.).
    packageType :: (Core.Maybe Core.Text),
    -- | Output only. The version of the package.
    version :: (Core.Maybe Version)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'PackageOccurrence' with the minimum fields required to make a request.
newPackageOccurrence ::
  PackageOccurrence
newPackageOccurrence =
  PackageOccurrence
    { architecture = Core.Nothing,
      cpeUri = Core.Nothing,
      license = Core.Nothing,
      location = Core.Nothing,
      name = Core.Nothing,
      packageType = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON PackageOccurrence where
  parseJSON =
    Core.withObject
      "PackageOccurrence"
      ( \o ->
          PackageOccurrence
            Core.<$> (o Core..:? "architecture")
            Core.<*> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "license")
            Core.<*> (o Core..:? "location")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "packageType")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON PackageOccurrence where
  toJSON PackageOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("architecture" Core..=) Core.<$> architecture,
            ("cpeUri" Core..=) Core.<$> cpeUri,
            ("license" Core..=) Core.<$> license,
            ("location" Core..=) Core.<$> location,
            ("name" Core..=) Core.<$> name,
            ("packageType" Core..=) Core.<$> packageType,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A @Policy@ is a collection of @bindings@. A @binding@ binds one or more @members@, or principals, to a single @role@. Principals can be user accounts, service accounts, Google groups, and domains (such as G Suite). A @role@ is a named list of permissions; each @role@ can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a @binding@ can also specify a @condition@, which is a logical expression that allows access to a resource only if the expression evaluates to @true@. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the <https://cloud.google.com/iam/help/conditions/resource-policies IAM documentation>. __JSON example:__
-- @{ \"bindings\": [ { \"role\": \"roles\/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike\@example.com\", \"group:admins\@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id\@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles\/resourcemanager.organizationViewer\", \"members\": [ \"user:eve\@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \< timestamp(\'2020-10-01T00:00:00.000Z\')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 }@ __YAML example:__
-- @bindings: - members: - user:mike\@example.com - group:admins\@example.com - domain:google.com - serviceAccount:my-project-id\@appspot.gserviceaccount.com role: roles\/resourcemanager.organizationAdmin - members: - user:eve\@example.com role: roles\/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \< timestamp(\'2020-10-01T00:00:00.000Z\') etag: BwWWja0YfJA= version: 3@ For a description of IAM and its features, see the <https://cloud.google.com/iam/docs/ IAM documentation>.
--
-- /See:/ 'newPolicy' smart constructor.
data Policy = Policy
  { -- | Associates a list of @members@, or principals, with a @role@. Optionally, may specify a @condition@ that determines how and when the @bindings@ are applied. Each of the @bindings@ must contain at least one principal. The @bindings@ in a @Policy@ can refer to up to 1,500 principals; up to 250 of these principals can be Google groups. Each occurrence of a principal counts towards these limits. For example, if the @bindings@ grant 50 different roles to @user:alice\@example.com@, and not to any other principal, then you can add another 1,450 principals to the @bindings@ in the @Policy@.
    bindings :: (Core.Maybe [Binding]),
    -- | @etag@ is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the @etag@ in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An @etag@ is returned in the response to @getIamPolicy@, and systems are expected to put that etag in the request to @setIamPolicy@ to ensure that their change will be applied to the same version of the policy. __Important:__ If you use IAM Conditions, you must include the @etag@ field whenever you call @setIamPolicy@. If you omit this field, then IAM allows you to overwrite a version @3@ policy with a version @1@ policy, and all of the conditions in the version @3@ policy are lost.
    etag :: (Core.Maybe Core.Base64),
    -- | Specifies the format of the policy. Valid values are @0@, @1@, and @3@. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version @3@. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions __Important:__ If you use IAM Conditions, you must include the @etag@ field whenever you call @setIamPolicy@. If you omit this field, then IAM allows you to overwrite a version @3@ policy with a version @1@ policy, and all of the conditions in the version @3@ policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the
    -- <https://cloud.google.com/iam/help/conditions/resource-policies IAM documentation>.
    version :: (Core.Maybe Core.Int32)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Policy' with the minimum fields required to make a request.
newPolicy ::
  Policy
newPolicy =
  Policy
    { bindings = Core.Nothing,
      etag = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON Policy where
  parseJSON =
    Core.withObject
      "Policy"
      ( \o ->
          Policy
            Core.<$> (o Core..:? "bindings")
            Core.<*> (o Core..:? "etag")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON Policy where
  toJSON Policy {..} =
    Core.object
      ( Core.catMaybes
          [ ("bindings" Core..=) Core.<$> bindings,
            ("etag" Core..=) Core.<$> etag,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | Product contains information about a product and how to uniquely identify it.
--
-- /See:/ 'newProduct' smart constructor.
data Product = Product
  { -- | Contains a URI which is vendor-specific. Example: The artifact repository URL of an image.
    genericUri :: (Core.Maybe Core.Text),
    -- | Token that identifies a product so that it can be referred to from other parts in the document. There is no predefined format as long as it uniquely identifies a group in the context of the current document.
    id :: (Core.Maybe Core.Text),
    -- | Name of the product.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Product' with the minimum fields required to make a request.
newProduct ::
  Product
newProduct =
  Product
    { genericUri = Core.Nothing,
      id = Core.Nothing,
      name = Core.Nothing
    }

instance Core.FromJSON Product where
  parseJSON =
    Core.withObject
      "Product"
      ( \o ->
          Product
            Core.<$> (o Core..:? "genericUri")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON Product where
  toJSON Product {..} =
    Core.object
      ( Core.catMaybes
          [ ("genericUri" Core..=) Core.<$> genericUri,
            ("id" Core..=) Core.<$> id,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | Selects a repo using a Google Cloud Platform project ID (e.g., winged-cargo-31) and a repo name within that project.
--
-- /See:/ 'newProjectRepoId' smart constructor.
data ProjectRepoId = ProjectRepoId
  { -- | The ID of the project.
    projectId :: (Core.Maybe Core.Text),
    -- | The name of the repo. Leave empty for the default repo.
    repoName :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ProjectRepoId' with the minimum fields required to make a request.
newProjectRepoId ::
  ProjectRepoId
newProjectRepoId =
  ProjectRepoId {projectId = Core.Nothing, repoName = Core.Nothing}

instance Core.FromJSON ProjectRepoId where
  parseJSON =
    Core.withObject
      "ProjectRepoId"
      ( \o ->
          ProjectRepoId
            Core.<$> (o Core..:? "projectId")
            Core.<*> (o Core..:? "repoName")
      )

instance Core.ToJSON ProjectRepoId where
  toJSON ProjectRepoId {..} =
    Core.object
      ( Core.catMaybes
          [ ("projectId" Core..=) Core.<$> projectId,
            ("repoName" Core..=) Core.<$> repoName
          ]
      )

--
-- /See:/ 'newProvenanceBuilder' smart constructor.
data ProvenanceBuilder = ProvenanceBuilder
  { builderDependencies :: (Core.Maybe [ResourceDescriptor]),
    id :: (Core.Maybe Core.Text),
    version :: (Core.Maybe ProvenanceBuilder_Version)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ProvenanceBuilder' with the minimum fields required to make a request.
newProvenanceBuilder ::
  ProvenanceBuilder
newProvenanceBuilder =
  ProvenanceBuilder
    { builderDependencies = Core.Nothing,
      id = Core.Nothing,
      version = Core.Nothing
    }

instance Core.FromJSON ProvenanceBuilder where
  parseJSON =
    Core.withObject
      "ProvenanceBuilder"
      ( \o ->
          ProvenanceBuilder
            Core.<$> (o Core..:? "builderDependencies")
            Core.<*> (o Core..:? "id")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON ProvenanceBuilder where
  toJSON ProvenanceBuilder {..} =
    Core.object
      ( Core.catMaybes
          [ ("builderDependencies" Core..=) Core.<$> builderDependencies,
            ("id" Core..=) Core.<$> id,
            ("version" Core..=) Core.<$> version
          ]
      )

--
-- /See:/ 'newProvenanceBuilder_Version' smart constructor.
newtype ProvenanceBuilder_Version = ProvenanceBuilder_Version
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ProvenanceBuilder_Version' with the minimum fields required to make a request.
newProvenanceBuilder_Version ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  ProvenanceBuilder_Version
newProvenanceBuilder_Version additional =
  ProvenanceBuilder_Version {additional = additional}

instance Core.FromJSON ProvenanceBuilder_Version where
  parseJSON =
    Core.withObject
      "ProvenanceBuilder_Version"
      ( \o ->
          ProvenanceBuilder_Version Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON ProvenanceBuilder_Version where
  toJSON ProvenanceBuilder_Version {..} = Core.toJSON additional

-- | Publisher contains information about the publisher of this Note.
--
-- /See:/ 'newPublisher' smart constructor.
data Publisher = Publisher
  { -- | Provides information about the authority of the issuing party to release the document, in particular, the party\'s constituency and responsibilities or other obligations.
    issuingAuthority :: (Core.Maybe Core.Text),
    -- | Name of the publisher. Examples: \'Google\', \'Google Cloud Platform\'.
    name :: (Core.Maybe Core.Text),
    -- | The context or namespace. Contains a URL which is under control of the issuing party and can be used as a globally unique identifier for that issuing party. Example: https:\/\/csaf.io
    publisherNamespace :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Publisher' with the minimum fields required to make a request.
newPublisher ::
  Publisher
newPublisher =
  Publisher
    { issuingAuthority = Core.Nothing,
      name = Core.Nothing,
      publisherNamespace = Core.Nothing
    }

instance Core.FromJSON Publisher where
  parseJSON =
    Core.withObject
      "Publisher"
      ( \o ->
          Publisher
            Core.<$> (o Core..:? "issuingAuthority")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "publisherNamespace")
      )

instance Core.ToJSON Publisher where
  toJSON Publisher {..} =
    Core.object
      ( Core.catMaybes
          [ ("issuingAuthority" Core..=) Core.<$> issuingAuthority,
            ("name" Core..=) Core.<$> name,
            ("publisherNamespace" Core..=) Core.<$> publisherNamespace
          ]
      )

-- | Steps taken to build the artifact. For a TaskRun, typically each container corresponds to one step in the recipe.
--
-- /See:/ 'newRecipe' smart constructor.
data Recipe = Recipe
  { -- | Collection of all external inputs that influenced the build on top of recipe.definedInMaterial and recipe.entryPoint. For example, if the recipe type were \"make\", then this might be the flags passed to make aside from the target, which is captured in recipe.entryPoint. Since the arguments field can greatly vary in structure, depending on the builder and recipe type, this is of form \"Any\".
    arguments :: (Core.Maybe [Recipe_ArgumentsItem]),
    -- | Index in materials containing the recipe steps that are not implied by recipe.type. For example, if the recipe type were \"make\", then this would point to the source containing the Makefile, not the make program itself. Set to -1 if the recipe doesn\'t come from a material, as zero is default unset value for int64.
    definedInMaterial :: (Core.Maybe Core.Int64),
    -- | String identifying the entry point into the build. This is often a path to a configuration file and\/or a target label within that file. The syntax and meaning are defined by recipe.type. For example, if the recipe type were \"make\", then this would reference the directory in which to run make as well as which target to use.
    entryPoint :: (Core.Maybe Core.Text),
    -- | Any other builder-controlled inputs necessary for correctly evaluating the recipe. Usually only needed for reproducing the build but not evaluated as part of policy. Since the environment field can greatly vary in structure, depending on the builder and recipe type, this is of form \"Any\".
    environment :: (Core.Maybe [Recipe_EnvironmentItem]),
    -- | URI indicating what type of recipe was performed. It determines the meaning of recipe.entryPoint, recipe.arguments, recipe.environment, and materials.
    type' :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Recipe' with the minimum fields required to make a request.
newRecipe ::
  Recipe
newRecipe =
  Recipe
    { arguments = Core.Nothing,
      definedInMaterial = Core.Nothing,
      entryPoint = Core.Nothing,
      environment = Core.Nothing,
      type' = Core.Nothing
    }

instance Core.FromJSON Recipe where
  parseJSON =
    Core.withObject
      "Recipe"
      ( \o ->
          Recipe
            Core.<$> (o Core..:? "arguments")
            Core.<*> (o Core..:? "definedInMaterial" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "entryPoint")
            Core.<*> (o Core..:? "environment")
            Core.<*> (o Core..:? "type")
      )

instance Core.ToJSON Recipe where
  toJSON Recipe {..} =
    Core.object
      ( Core.catMaybes
          [ ("arguments" Core..=) Core.<$> arguments,
            ("definedInMaterial" Core..=)
              Core.. Core.AsText
              Core.<$> definedInMaterial,
            ("entryPoint" Core..=) Core.<$> entryPoint,
            ("environment" Core..=) Core.<$> environment,
            ("type" Core..=) Core.<$> type'
          ]
      )

--
-- /See:/ 'newRecipe_ArgumentsItem' smart constructor.
newtype Recipe_ArgumentsItem = Recipe_ArgumentsItem
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Recipe_ArgumentsItem' with the minimum fields required to make a request.
newRecipe_ArgumentsItem ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Recipe_ArgumentsItem
newRecipe_ArgumentsItem additional =
  Recipe_ArgumentsItem {additional = additional}

instance Core.FromJSON Recipe_ArgumentsItem where
  parseJSON =
    Core.withObject
      "Recipe_ArgumentsItem"
      (\o -> Recipe_ArgumentsItem Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Recipe_ArgumentsItem where
  toJSON Recipe_ArgumentsItem {..} = Core.toJSON additional

--
-- /See:/ 'newRecipe_EnvironmentItem' smart constructor.
newtype Recipe_EnvironmentItem = Recipe_EnvironmentItem
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Recipe_EnvironmentItem' with the minimum fields required to make a request.
newRecipe_EnvironmentItem ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Recipe_EnvironmentItem
newRecipe_EnvironmentItem additional =
  Recipe_EnvironmentItem {additional = additional}

instance Core.FromJSON Recipe_EnvironmentItem where
  parseJSON =
    Core.withObject
      "Recipe_EnvironmentItem"
      (\o -> Recipe_EnvironmentItem Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Recipe_EnvironmentItem where
  toJSON Recipe_EnvironmentItem {..} = Core.toJSON additional

-- | Metadata for any related URL information.
--
-- /See:/ 'newRelatedUrl' smart constructor.
data RelatedUrl = RelatedUrl
  { -- | Label to describe usage of the URL.
    label :: (Core.Maybe Core.Text),
    -- | Specific URL associated with the resource.
    url :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RelatedUrl' with the minimum fields required to make a request.
newRelatedUrl ::
  RelatedUrl
newRelatedUrl =
  RelatedUrl {label = Core.Nothing, url = Core.Nothing}

instance Core.FromJSON RelatedUrl where
  parseJSON =
    Core.withObject
      "RelatedUrl"
      ( \o ->
          RelatedUrl
            Core.<$> (o Core..:? "label")
            Core.<*> (o Core..:? "url")
      )

instance Core.ToJSON RelatedUrl where
  toJSON RelatedUrl {..} =
    Core.object
      ( Core.catMaybes
          [("label" Core..=) Core.<$> label, ("url" Core..=) Core.<$> url]
      )

-- | Specifies details on how to handle (and presumably, fix) a vulnerability.
--
-- /See:/ 'newRemediation' smart constructor.
data Remediation = Remediation
  { -- | Contains a comprehensive human-readable discussion of the remediation.
    details :: (Core.Maybe Core.Text),
    -- | The type of remediation that can be applied.
    remediationType :: (Core.Maybe Remediation_RemediationType),
    -- | Contains the URL where to obtain the remediation.
    remediationUri :: (Core.Maybe RelatedUrl)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Remediation' with the minimum fields required to make a request.
newRemediation ::
  Remediation
newRemediation =
  Remediation
    { details = Core.Nothing,
      remediationType = Core.Nothing,
      remediationUri = Core.Nothing
    }

instance Core.FromJSON Remediation where
  parseJSON =
    Core.withObject
      "Remediation"
      ( \o ->
          Remediation
            Core.<$> (o Core..:? "details")
            Core.<*> (o Core..:? "remediationType")
            Core.<*> (o Core..:? "remediationUri")
      )

instance Core.ToJSON Remediation where
  toJSON Remediation {..} =
    Core.object
      ( Core.catMaybes
          [ ("details" Core..=) Core.<$> details,
            ("remediationType" Core..=) Core.<$> remediationType,
            ("remediationUri" Core..=) Core.<$> remediationUri
          ]
      )

-- | A unique identifier for a Cloud Repo.
--
-- /See:/ 'newRepoId' smart constructor.
data RepoId = RepoId
  { -- | A combination of a project ID and a repo name.
    projectRepoId :: (Core.Maybe ProjectRepoId),
    -- | A server-assigned, globally unique identifier.
    uid :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RepoId' with the minimum fields required to make a request.
newRepoId ::
  RepoId
newRepoId =
  RepoId {projectRepoId = Core.Nothing, uid = Core.Nothing}

instance Core.FromJSON RepoId where
  parseJSON =
    Core.withObject
      "RepoId"
      ( \o ->
          RepoId
            Core.<$> (o Core..:? "projectRepoId")
            Core.<*> (o Core..:? "uid")
      )

instance Core.ToJSON RepoId where
  toJSON RepoId {..} =
    Core.object
      ( Core.catMaybes
          [ ("projectRepoId" Core..=) Core.<$> projectRepoId,
            ("uid" Core..=) Core.<$> uid
          ]
      )

--
-- /See:/ 'newResourceDescriptor' smart constructor.
data ResourceDescriptor = ResourceDescriptor
  { annotations :: (Core.Maybe ResourceDescriptor_Annotations),
    content :: (Core.Maybe Core.Base64),
    digest :: (Core.Maybe ResourceDescriptor_Digest),
    downloadLocation :: (Core.Maybe Core.Text),
    mediaType :: (Core.Maybe Core.Text),
    name :: (Core.Maybe Core.Text),
    uri :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ResourceDescriptor' with the minimum fields required to make a request.
newResourceDescriptor ::
  ResourceDescriptor
newResourceDescriptor =
  ResourceDescriptor
    { annotations = Core.Nothing,
      content = Core.Nothing,
      digest = Core.Nothing,
      downloadLocation = Core.Nothing,
      mediaType = Core.Nothing,
      name = Core.Nothing,
      uri = Core.Nothing
    }

instance Core.FromJSON ResourceDescriptor where
  parseJSON =
    Core.withObject
      "ResourceDescriptor"
      ( \o ->
          ResourceDescriptor
            Core.<$> (o Core..:? "annotations")
            Core.<*> (o Core..:? "content")
            Core.<*> (o Core..:? "digest")
            Core.<*> (o Core..:? "downloadLocation")
            Core.<*> (o Core..:? "mediaType")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "uri")
      )

instance Core.ToJSON ResourceDescriptor where
  toJSON ResourceDescriptor {..} =
    Core.object
      ( Core.catMaybes
          [ ("annotations" Core..=) Core.<$> annotations,
            ("content" Core..=) Core.<$> content,
            ("digest" Core..=) Core.<$> digest,
            ("downloadLocation" Core..=) Core.<$> downloadLocation,
            ("mediaType" Core..=) Core.<$> mediaType,
            ("name" Core..=) Core.<$> name,
            ("uri" Core..=) Core.<$> uri
          ]
      )

--
-- /See:/ 'newResourceDescriptor_Annotations' smart constructor.
newtype ResourceDescriptor_Annotations = ResourceDescriptor_Annotations
  { additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ResourceDescriptor_Annotations' with the minimum fields required to make a request.
newResourceDescriptor_Annotations ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  ResourceDescriptor_Annotations
newResourceDescriptor_Annotations additional =
  ResourceDescriptor_Annotations {additional = additional}

instance Core.FromJSON ResourceDescriptor_Annotations where
  parseJSON =
    Core.withObject
      "ResourceDescriptor_Annotations"
      ( \o ->
          ResourceDescriptor_Annotations Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON ResourceDescriptor_Annotations where
  toJSON ResourceDescriptor_Annotations {..} = Core.toJSON additional

--
-- /See:/ 'newResourceDescriptor_Digest' smart constructor.
newtype ResourceDescriptor_Digest = ResourceDescriptor_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'ResourceDescriptor_Digest' with the minimum fields required to make a request.
newResourceDescriptor_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  ResourceDescriptor_Digest
newResourceDescriptor_Digest additional =
  ResourceDescriptor_Digest {additional = additional}

instance Core.FromJSON ResourceDescriptor_Digest where
  parseJSON =
    Core.withObject
      "ResourceDescriptor_Digest"
      ( \o ->
          ResourceDescriptor_Digest Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON ResourceDescriptor_Digest where
  toJSON ResourceDescriptor_Digest {..} = Core.toJSON additional

--
-- /See:/ 'newRunDetails' smart constructor.
data RunDetails = RunDetails
  { builder :: (Core.Maybe ProvenanceBuilder),
    byproducts :: (Core.Maybe [ResourceDescriptor]),
    metadata :: (Core.Maybe BuildMetadata)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'RunDetails' with the minimum fields required to make a request.
newRunDetails ::
  RunDetails
newRunDetails =
  RunDetails
    { builder = Core.Nothing,
      byproducts = Core.Nothing,
      metadata = Core.Nothing
    }

instance Core.FromJSON RunDetails where
  parseJSON =
    Core.withObject
      "RunDetails"
      ( \o ->
          RunDetails
            Core.<$> (o Core..:? "builder")
            Core.<*> (o Core..:? "byproducts")
            Core.<*> (o Core..:? "metadata")
      )

instance Core.ToJSON RunDetails where
  toJSON RunDetails {..} =
    Core.object
      ( Core.catMaybes
          [ ("builder" Core..=) Core.<$> builder,
            ("byproducts" Core..=) Core.<$> byproducts,
            ("metadata" Core..=) Core.<$> metadata
          ]
      )

-- | The note representing an SBOM reference.
--
-- /See:/ 'newSBOMReferenceNote' smart constructor.
data SBOMReferenceNote = SBOMReferenceNote
  { -- | The format that SBOM takes. E.g. may be spdx, cyclonedx, etc...
    format :: (Core.Maybe Core.Text),
    -- | The version of the format that the SBOM takes. E.g. if the format is spdx, the version may be 2.3.
    version :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SBOMReferenceNote' with the minimum fields required to make a request.
newSBOMReferenceNote ::
  SBOMReferenceNote
newSBOMReferenceNote =
  SBOMReferenceNote {format = Core.Nothing, version = Core.Nothing}

instance Core.FromJSON SBOMReferenceNote where
  parseJSON =
    Core.withObject
      "SBOMReferenceNote"
      ( \o ->
          SBOMReferenceNote
            Core.<$> (o Core..:? "format")
            Core.<*> (o Core..:? "version")
      )

instance Core.ToJSON SBOMReferenceNote where
  toJSON SBOMReferenceNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("format" Core..=) Core.<$> format,
            ("version" Core..=) Core.<$> version
          ]
      )

-- | The occurrence representing an SBOM reference as applied to a specific resource. The occurrence follows the DSSE specification. See https:\/\/github.com\/secure-systems-lab\/dsse\/blob\/master\/envelope.md for more details.
--
-- /See:/ 'newSBOMReferenceOccurrence' smart constructor.
data SBOMReferenceOccurrence = SBOMReferenceOccurrence
  { -- | The actual payload that contains the SBOM reference data.
    payload :: (Core.Maybe SbomReferenceIntotoPayload),
    -- | The kind of payload that SbomReferenceIntotoPayload takes. Since it\'s in the intoto format, this value is expected to be \'application\/vnd.in-toto+json\'.
    payloadType :: (Core.Maybe Core.Text),
    -- | The signatures over the payload.
    signatures :: (Core.Maybe [EnvelopeSignature])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SBOMReferenceOccurrence' with the minimum fields required to make a request.
newSBOMReferenceOccurrence ::
  SBOMReferenceOccurrence
newSBOMReferenceOccurrence =
  SBOMReferenceOccurrence
    { payload = Core.Nothing,
      payloadType = Core.Nothing,
      signatures = Core.Nothing
    }

instance Core.FromJSON SBOMReferenceOccurrence where
  parseJSON =
    Core.withObject
      "SBOMReferenceOccurrence"
      ( \o ->
          SBOMReferenceOccurrence
            Core.<$> (o Core..:? "payload")
            Core.<*> (o Core..:? "payloadType")
            Core.<*> (o Core..:? "signatures")
      )

instance Core.ToJSON SBOMReferenceOccurrence where
  toJSON SBOMReferenceOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("payload" Core..=) Core.<$> payload,
            ("payloadType" Core..=) Core.<$> payloadType,
            ("signatures" Core..=) Core.<$> signatures
          ]
      )

-- | The status of an SBOM generation.
--
-- /See:/ 'newSBOMStatus' smart constructor.
data SBOMStatus = SBOMStatus
  { -- | If there was an error generating an SBOM, this will indicate what that error was.
    error :: (Core.Maybe Core.Text),
    -- | The progress of the SBOM generation.
    sbomState :: (Core.Maybe SBOMStatus_SbomState)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SBOMStatus' with the minimum fields required to make a request.
newSBOMStatus ::
  SBOMStatus
newSBOMStatus =
  SBOMStatus {error = Core.Nothing, sbomState = Core.Nothing}

instance Core.FromJSON SBOMStatus where
  parseJSON =
    Core.withObject
      "SBOMStatus"
      ( \o ->
          SBOMStatus
            Core.<$> (o Core..:? "error")
            Core.<*> (o Core..:? "sbomState")
      )

instance Core.ToJSON SBOMStatus where
  toJSON SBOMStatus {..} =
    Core.object
      ( Core.catMaybes
          [ ("error" Core..=) Core.<$> error,
            ("sbomState" Core..=) Core.<$> sbomState
          ]
      )

-- | The actual payload that contains the SBOM Reference data. The payload follows the intoto statement specification. See https:\/\/github.com\/in-toto\/attestation\/blob\/main\/spec\/v1.0\/statement.md for more details.
--
-- /See:/ 'newSbomReferenceIntotoPayload' smart constructor.
data SbomReferenceIntotoPayload = SbomReferenceIntotoPayload
  { -- | Identifier for the schema of the Statement.
    type' :: (Core.Maybe Core.Text),
    -- | Additional parameters of the Predicate. Includes the actual data about the SBOM.
    predicate :: (Core.Maybe SbomReferenceIntotoPredicate),
    -- | URI identifying the type of the Predicate.
    predicateType :: (Core.Maybe Core.Text),
    -- | Set of software artifacts that the attestation applies to. Each element represents a single software artifact.
    subject :: (Core.Maybe [Subject])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SbomReferenceIntotoPayload' with the minimum fields required to make a request.
newSbomReferenceIntotoPayload ::
  SbomReferenceIntotoPayload
newSbomReferenceIntotoPayload =
  SbomReferenceIntotoPayload
    { type' = Core.Nothing,
      predicate = Core.Nothing,
      predicateType = Core.Nothing,
      subject = Core.Nothing
    }

instance Core.FromJSON SbomReferenceIntotoPayload where
  parseJSON =
    Core.withObject
      "SbomReferenceIntotoPayload"
      ( \o ->
          SbomReferenceIntotoPayload
            Core.<$> (o Core..:? "_type")
            Core.<*> (o Core..:? "predicate")
            Core.<*> (o Core..:? "predicateType")
            Core.<*> (o Core..:? "subject")
      )

instance Core.ToJSON SbomReferenceIntotoPayload where
  toJSON SbomReferenceIntotoPayload {..} =
    Core.object
      ( Core.catMaybes
          [ ("_type" Core..=) Core.<$> type',
            ("predicate" Core..=) Core.<$> predicate,
            ("predicateType" Core..=) Core.<$> predicateType,
            ("subject" Core..=) Core.<$> subject
          ]
      )

-- | A predicate which describes the SBOM being referenced.
--
-- /See:/ 'newSbomReferenceIntotoPredicate' smart constructor.
data SbomReferenceIntotoPredicate = SbomReferenceIntotoPredicate
  { -- | A map of algorithm to digest of the contents of the SBOM.
    digest :: (Core.Maybe SbomReferenceIntotoPredicate_Digest),
    -- | The location of the SBOM.
    location :: (Core.Maybe Core.Text),
    -- | The mime type of the SBOM.
    mimeType :: (Core.Maybe Core.Text),
    -- | The person or system referring this predicate to the consumer.
    referrerId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SbomReferenceIntotoPredicate' with the minimum fields required to make a request.
newSbomReferenceIntotoPredicate ::
  SbomReferenceIntotoPredicate
newSbomReferenceIntotoPredicate =
  SbomReferenceIntotoPredicate
    { digest = Core.Nothing,
      location = Core.Nothing,
      mimeType = Core.Nothing,
      referrerId = Core.Nothing
    }

instance Core.FromJSON SbomReferenceIntotoPredicate where
  parseJSON =
    Core.withObject
      "SbomReferenceIntotoPredicate"
      ( \o ->
          SbomReferenceIntotoPredicate
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "location")
            Core.<*> (o Core..:? "mimeType")
            Core.<*> (o Core..:? "referrerId")
      )

instance Core.ToJSON SbomReferenceIntotoPredicate where
  toJSON SbomReferenceIntotoPredicate {..} =
    Core.object
      ( Core.catMaybes
          [ ("digest" Core..=) Core.<$> digest,
            ("location" Core..=) Core.<$> location,
            ("mimeType" Core..=) Core.<$> mimeType,
            ("referrerId" Core..=) Core.<$> referrerId
          ]
      )

-- | A map of algorithm to digest of the contents of the SBOM.
--
-- /See:/ 'newSbomReferenceIntotoPredicate_Digest' smart constructor.
newtype SbomReferenceIntotoPredicate_Digest = SbomReferenceIntotoPredicate_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SbomReferenceIntotoPredicate_Digest' with the minimum fields required to make a request.
newSbomReferenceIntotoPredicate_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  SbomReferenceIntotoPredicate_Digest
newSbomReferenceIntotoPredicate_Digest additional =
  SbomReferenceIntotoPredicate_Digest {additional = additional}

instance Core.FromJSON SbomReferenceIntotoPredicate_Digest where
  parseJSON =
    Core.withObject
      "SbomReferenceIntotoPredicate_Digest"
      ( \o ->
          SbomReferenceIntotoPredicate_Digest
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON SbomReferenceIntotoPredicate_Digest where
  toJSON SbomReferenceIntotoPredicate_Digest {..} =
    Core.toJSON additional

-- | Request message for @SetIamPolicy@ method.
--
-- /See:/ 'newSetIamPolicyRequest' smart constructor.
newtype SetIamPolicyRequest = SetIamPolicyRequest
  { -- | REQUIRED: The complete policy to be applied to the @resource@. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Google Cloud services (such as Projects) might reject them.
    policy :: (Core.Maybe Policy)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SetIamPolicyRequest' with the minimum fields required to make a request.
newSetIamPolicyRequest ::
  SetIamPolicyRequest
newSetIamPolicyRequest = SetIamPolicyRequest {policy = Core.Nothing}

instance Core.FromJSON SetIamPolicyRequest where
  parseJSON =
    Core.withObject
      "SetIamPolicyRequest"
      (\o -> SetIamPolicyRequest Core.<$> (o Core..:? "policy"))

instance Core.ToJSON SetIamPolicyRequest where
  toJSON SetIamPolicyRequest {..} =
    Core.object (Core.catMaybes [("policy" Core..=) Core.<$> policy])

-- | Verifiers (e.g. Kritis implementations) MUST verify signatures with respect to the trust anchors defined in policy (e.g. a Kritis policy). Typically this means that the verifier has been configured with a map from @public_key_id@ to public key material (and any required parameters, e.g. signing algorithm). In particular, verification implementations MUST NOT treat the signature @public_key_id@ as anything more than a key lookup hint. The @public_key_id@ DOES NOT validate or authenticate a public key; it only provides a mechanism for quickly selecting a public key ALREADY CONFIGURED on the verifier through a trusted channel. Verification implementations MUST reject signatures in any of the following circumstances: * The @public_key_id@ is not recognized by the verifier. * The public key that @public_key_id@ refers to does not verify the signature with respect to the payload. The @signature@ contents SHOULD NOT be \"attached\" (where the payload is included with the serialized @signature@ bytes). Verifiers MUST
-- ignore any \"attached\" payload and only verify signatures with respect to explicitly provided payload (e.g. a @payload@ field on the proto message that holds this Signature, or the canonical serialization of the proto message that holds this signature).
--
-- /See:/ 'newSignature' smart constructor.
data Signature = Signature
  { -- | The identifier for the public key that verifies this signature. * The @public_key_id@ is required. * The @public_key_id@ SHOULD be an RFC3986 conformant URI. * When possible, the @public_key_id@ SHOULD be an immutable reference, such as a cryptographic digest. Examples of valid @public_key_id@s: OpenPGP V4 public key fingerprint: * \"openpgp4fpr:74FAF3B861BDA0870C7B6DEF607E48D2A663AEEA\" See https:\/\/www.iana.org\/assignments\/uri-schemes\/prov\/openpgp4fpr for more details on this scheme. RFC6920 digest-named SubjectPublicKeyInfo (digest of the DER serialization): * \"ni:\/\/\/sha-256;cD9o9Cq6LG3jD0iKXqEi/vdjJGecm/iXkbqVoScViaU\" * \"nih:\/\/\/sha-256;703f68f42aba2c6de30f488a5ea122fef76324679c9bf89791ba95a1271589a5\"
    publicKeyId :: (Core.Maybe Core.Text),
    -- | The content of the signature, an opaque bytestring. The payload that this signature verifies MUST be unambiguously provided with the Signature during verification. A wrapper message might provide the payload explicitly. Alternatively, a message might have a canonical serialization that can always be unambiguously computed to derive the payload.
    signature :: (Core.Maybe Core.Base64)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Signature' with the minimum fields required to make a request.
newSignature ::
  Signature
newSignature =
  Signature {publicKeyId = Core.Nothing, signature = Core.Nothing}

instance Core.FromJSON Signature where
  parseJSON =
    Core.withObject
      "Signature"
      ( \o ->
          Signature
            Core.<$> (o Core..:? "publicKeyId")
            Core.<*> (o Core..:? "signature")
      )

instance Core.ToJSON Signature where
  toJSON Signature {..} =
    Core.object
      ( Core.catMaybes
          [ ("publicKeyId" Core..=) Core.<$> publicKeyId,
            ("signature" Core..=) Core.<$> signature
          ]
      )

--
-- /See:/ 'newSlsaBuilder' smart constructor.
newtype SlsaBuilder = SlsaBuilder
  { id :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaBuilder' with the minimum fields required to make a request.
newSlsaBuilder ::
  SlsaBuilder
newSlsaBuilder = SlsaBuilder {id = Core.Nothing}

instance Core.FromJSON SlsaBuilder where
  parseJSON =
    Core.withObject
      "SlsaBuilder"
      (\o -> SlsaBuilder Core.<$> (o Core..:? "id"))

instance Core.ToJSON SlsaBuilder where
  toJSON SlsaBuilder {..} =
    Core.object (Core.catMaybes [("id" Core..=) Core.<$> id])

-- | Indicates that the builder claims certain fields in this message to be complete.
--
-- /See:/ 'newSlsaCompleteness' smart constructor.
data SlsaCompleteness = SlsaCompleteness
  { -- | If true, the builder claims that recipe.arguments is complete, meaning that all external inputs are properly captured in the recipe.
    arguments :: (Core.Maybe Core.Bool),
    -- | If true, the builder claims that recipe.environment is claimed to be complete.
    environment :: (Core.Maybe Core.Bool),
    -- | If true, the builder claims that materials are complete, usually through some controls to prevent network access. Sometimes called \"hermetic\".
    materials :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaCompleteness' with the minimum fields required to make a request.
newSlsaCompleteness ::
  SlsaCompleteness
newSlsaCompleteness =
  SlsaCompleteness
    { arguments = Core.Nothing,
      environment = Core.Nothing,
      materials = Core.Nothing
    }

instance Core.FromJSON SlsaCompleteness where
  parseJSON =
    Core.withObject
      "SlsaCompleteness"
      ( \o ->
          SlsaCompleteness
            Core.<$> (o Core..:? "arguments")
            Core.<*> (o Core..:? "environment")
            Core.<*> (o Core..:? "materials")
      )

instance Core.ToJSON SlsaCompleteness where
  toJSON SlsaCompleteness {..} =
    Core.object
      ( Core.catMaybes
          [ ("arguments" Core..=) Core.<$> arguments,
            ("environment" Core..=) Core.<$> environment,
            ("materials" Core..=) Core.<$> materials
          ]
      )

-- | Other properties of the build.
--
-- /See:/ 'newSlsaMetadata' smart constructor.
data SlsaMetadata = SlsaMetadata
  { -- | The timestamp of when the build completed.
    buildFinishedOn :: (Core.Maybe Core.DateTime),
    -- | Identifies the particular build invocation, which can be useful for finding associated logs or other ad-hoc analysis. The value SHOULD be globally unique, per in-toto Provenance spec.
    buildInvocationId :: (Core.Maybe Core.Text),
    -- | The timestamp of when the build started.
    buildStartedOn :: (Core.Maybe Core.DateTime),
    -- | Indicates that the builder claims certain fields in this message to be complete.
    completeness :: (Core.Maybe SlsaCompleteness),
    -- | If true, the builder claims that running the recipe on materials will produce bit-for-bit identical output.
    reproducible :: (Core.Maybe Core.Bool)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaMetadata' with the minimum fields required to make a request.
newSlsaMetadata ::
  SlsaMetadata
newSlsaMetadata =
  SlsaMetadata
    { buildFinishedOn = Core.Nothing,
      buildInvocationId = Core.Nothing,
      buildStartedOn = Core.Nothing,
      completeness = Core.Nothing,
      reproducible = Core.Nothing
    }

instance Core.FromJSON SlsaMetadata where
  parseJSON =
    Core.withObject
      "SlsaMetadata"
      ( \o ->
          SlsaMetadata
            Core.<$> (o Core..:? "buildFinishedOn")
            Core.<*> (o Core..:? "buildInvocationId")
            Core.<*> (o Core..:? "buildStartedOn")
            Core.<*> (o Core..:? "completeness")
            Core.<*> (o Core..:? "reproducible")
      )

instance Core.ToJSON SlsaMetadata where
  toJSON SlsaMetadata {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildFinishedOn" Core..=) Core.<$> buildFinishedOn,
            ("buildInvocationId" Core..=) Core.<$> buildInvocationId,
            ("buildStartedOn" Core..=) Core.<$> buildStartedOn,
            ("completeness" Core..=) Core.<$> completeness,
            ("reproducible" Core..=) Core.<$> reproducible
          ]
      )

--
-- /See:/ 'newSlsaProvenance' smart constructor.
data SlsaProvenance = SlsaProvenance
  { -- | required
    builder :: (Core.Maybe SlsaBuilder),
    -- | The collection of artifacts that influenced the build including sources, dependencies, build tools, base images, and so on. This is considered to be incomplete unless metadata.completeness.materials is true. Unset or null is equivalent to empty.
    materials :: (Core.Maybe [Material]),
    metadata :: (Core.Maybe SlsaMetadata),
    -- | Identifies the configuration used for the build. When combined with materials, this SHOULD fully describe the build, such that re-running this recipe results in bit-for-bit identical output (if the build is reproducible). required
    recipe :: (Core.Maybe SlsaRecipe)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaProvenance' with the minimum fields required to make a request.
newSlsaProvenance ::
  SlsaProvenance
newSlsaProvenance =
  SlsaProvenance
    { builder = Core.Nothing,
      materials = Core.Nothing,
      metadata = Core.Nothing,
      recipe = Core.Nothing
    }

instance Core.FromJSON SlsaProvenance where
  parseJSON =
    Core.withObject
      "SlsaProvenance"
      ( \o ->
          SlsaProvenance
            Core.<$> (o Core..:? "builder")
            Core.<*> (o Core..:? "materials")
            Core.<*> (o Core..:? "metadata")
            Core.<*> (o Core..:? "recipe")
      )

instance Core.ToJSON SlsaProvenance where
  toJSON SlsaProvenance {..} =
    Core.object
      ( Core.catMaybes
          [ ("builder" Core..=) Core.<$> builder,
            ("materials" Core..=) Core.<$> materials,
            ("metadata" Core..=) Core.<$> metadata,
            ("recipe" Core..=) Core.<$> recipe
          ]
      )

-- | Keep in sync with schema at https:\/\/github.com\/slsa-framework\/slsa\/blob\/main\/docs\/provenance\/schema\/v1\/provenance.proto Builder renamed to ProvenanceBuilder because of Java conflicts.
--
-- /See:/ 'newSlsaProvenanceV1' smart constructor.
data SlsaProvenanceV1 = SlsaProvenanceV1
  { buildDefinition :: (Core.Maybe BuildDefinition),
    runDetails :: (Core.Maybe RunDetails)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaProvenanceV1' with the minimum fields required to make a request.
newSlsaProvenanceV1 ::
  SlsaProvenanceV1
newSlsaProvenanceV1 =
  SlsaProvenanceV1
    { buildDefinition = Core.Nothing,
      runDetails = Core.Nothing
    }

instance Core.FromJSON SlsaProvenanceV1 where
  parseJSON =
    Core.withObject
      "SlsaProvenanceV1"
      ( \o ->
          SlsaProvenanceV1
            Core.<$> (o Core..:? "buildDefinition")
            Core.<*> (o Core..:? "runDetails")
      )

instance Core.ToJSON SlsaProvenanceV1 where
  toJSON SlsaProvenanceV1 {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildDefinition" Core..=) Core.<$> buildDefinition,
            ("runDetails" Core..=) Core.<$> runDetails
          ]
      )

-- | See full explanation of fields at slsa.dev\/provenance\/v0.2.
--
-- /See:/ 'newSlsaProvenanceZeroTwo' smart constructor.
data SlsaProvenanceZeroTwo = SlsaProvenanceZeroTwo
  { buildConfig :: (Core.Maybe SlsaProvenanceZeroTwo_BuildConfig),
    buildType :: (Core.Maybe Core.Text),
    builder :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaBuilder),
    invocation :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaInvocation),
    materials :: (Core.Maybe [GrafeasV1SlsaProvenanceZeroTwoSlsaMaterial]),
    metadata :: (Core.Maybe GrafeasV1SlsaProvenanceZeroTwoSlsaMetadata)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaProvenanceZeroTwo' with the minimum fields required to make a request.
newSlsaProvenanceZeroTwo ::
  SlsaProvenanceZeroTwo
newSlsaProvenanceZeroTwo =
  SlsaProvenanceZeroTwo
    { buildConfig = Core.Nothing,
      buildType = Core.Nothing,
      builder = Core.Nothing,
      invocation = Core.Nothing,
      materials = Core.Nothing,
      metadata = Core.Nothing
    }

instance Core.FromJSON SlsaProvenanceZeroTwo where
  parseJSON =
    Core.withObject
      "SlsaProvenanceZeroTwo"
      ( \o ->
          SlsaProvenanceZeroTwo
            Core.<$> (o Core..:? "buildConfig")
            Core.<*> (o Core..:? "buildType")
            Core.<*> (o Core..:? "builder")
            Core.<*> (o Core..:? "invocation")
            Core.<*> (o Core..:? "materials")
            Core.<*> (o Core..:? "metadata")
      )

instance Core.ToJSON SlsaProvenanceZeroTwo where
  toJSON SlsaProvenanceZeroTwo {..} =
    Core.object
      ( Core.catMaybes
          [ ("buildConfig" Core..=) Core.<$> buildConfig,
            ("buildType" Core..=) Core.<$> buildType,
            ("builder" Core..=) Core.<$> builder,
            ("invocation" Core..=) Core.<$> invocation,
            ("materials" Core..=) Core.<$> materials,
            ("metadata" Core..=) Core.<$> metadata
          ]
      )

--
-- /See:/ 'newSlsaProvenanceZeroTwo_BuildConfig' smart constructor.
newtype SlsaProvenanceZeroTwo_BuildConfig = SlsaProvenanceZeroTwo_BuildConfig
  { -- | Properties of the object.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaProvenanceZeroTwo_BuildConfig' with the minimum fields required to make a request.
newSlsaProvenanceZeroTwo_BuildConfig ::
  -- |  Properties of the object. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  SlsaProvenanceZeroTwo_BuildConfig
newSlsaProvenanceZeroTwo_BuildConfig additional =
  SlsaProvenanceZeroTwo_BuildConfig {additional = additional}

instance Core.FromJSON SlsaProvenanceZeroTwo_BuildConfig where
  parseJSON =
    Core.withObject
      "SlsaProvenanceZeroTwo_BuildConfig"
      ( \o ->
          SlsaProvenanceZeroTwo_BuildConfig
            Core.<$> (Core.parseJSONObject o)
      )

instance Core.ToJSON SlsaProvenanceZeroTwo_BuildConfig where
  toJSON SlsaProvenanceZeroTwo_BuildConfig {..} =
    Core.toJSON additional

-- | Steps taken to build the artifact. For a TaskRun, typically each container corresponds to one step in the recipe.
--
-- /See:/ 'newSlsaRecipe' smart constructor.
data SlsaRecipe = SlsaRecipe
  { -- | Collection of all external inputs that influenced the build on top of recipe.definedInMaterial and recipe.entryPoint. For example, if the recipe type were \"make\", then this might be the flags passed to make aside from the target, which is captured in recipe.entryPoint. Depending on the recipe Type, the structure may be different.
    arguments :: (Core.Maybe SlsaRecipe_Arguments),
    -- | Index in materials containing the recipe steps that are not implied by recipe.type. For example, if the recipe type were \"make\", then this would point to the source containing the Makefile, not the make program itself. Set to -1 if the recipe doesn\'t come from a material, as zero is default unset value for int64.
    definedInMaterial :: (Core.Maybe Core.Int64),
    -- | String identifying the entry point into the build. This is often a path to a configuration file and\/or a target label within that file. The syntax and meaning are defined by recipe.type. For example, if the recipe type were \"make\", then this would reference the directory in which to run make as well as which target to use.
    entryPoint :: (Core.Maybe Core.Text),
    -- | Any other builder-controlled inputs necessary for correctly evaluating the recipe. Usually only needed for reproducing the build but not evaluated as part of policy. Depending on the recipe Type, the structure may be different.
    environment :: (Core.Maybe SlsaRecipe_Environment),
    -- | URI indicating what type of recipe was performed. It determines the meaning of recipe.entryPoint, recipe.arguments, recipe.environment, and materials.
    type' :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaRecipe' with the minimum fields required to make a request.
newSlsaRecipe ::
  SlsaRecipe
newSlsaRecipe =
  SlsaRecipe
    { arguments = Core.Nothing,
      definedInMaterial = Core.Nothing,
      entryPoint = Core.Nothing,
      environment = Core.Nothing,
      type' = Core.Nothing
    }

instance Core.FromJSON SlsaRecipe where
  parseJSON =
    Core.withObject
      "SlsaRecipe"
      ( \o ->
          SlsaRecipe
            Core.<$> (o Core..:? "arguments")
            Core.<*> (o Core..:? "definedInMaterial" Core.<&> Core.fmap Core.fromAsText)
            Core.<*> (o Core..:? "entryPoint")
            Core.<*> (o Core..:? "environment")
            Core.<*> (o Core..:? "type")
      )

instance Core.ToJSON SlsaRecipe where
  toJSON SlsaRecipe {..} =
    Core.object
      ( Core.catMaybes
          [ ("arguments" Core..=) Core.<$> arguments,
            ("definedInMaterial" Core..=)
              Core.. Core.AsText
              Core.<$> definedInMaterial,
            ("entryPoint" Core..=) Core.<$> entryPoint,
            ("environment" Core..=) Core.<$> environment,
            ("type" Core..=) Core.<$> type'
          ]
      )

-- | Collection of all external inputs that influenced the build on top of recipe.definedInMaterial and recipe.entryPoint. For example, if the recipe type were \"make\", then this might be the flags passed to make aside from the target, which is captured in recipe.entryPoint. Depending on the recipe Type, the structure may be different.
--
-- /See:/ 'newSlsaRecipe_Arguments' smart constructor.
newtype SlsaRecipe_Arguments = SlsaRecipe_Arguments
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaRecipe_Arguments' with the minimum fields required to make a request.
newSlsaRecipe_Arguments ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  SlsaRecipe_Arguments
newSlsaRecipe_Arguments additional =
  SlsaRecipe_Arguments {additional = additional}

instance Core.FromJSON SlsaRecipe_Arguments where
  parseJSON =
    Core.withObject
      "SlsaRecipe_Arguments"
      (\o -> SlsaRecipe_Arguments Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON SlsaRecipe_Arguments where
  toJSON SlsaRecipe_Arguments {..} = Core.toJSON additional

-- | Any other builder-controlled inputs necessary for correctly evaluating the recipe. Usually only needed for reproducing the build but not evaluated as part of policy. Depending on the recipe Type, the structure may be different.
--
-- /See:/ 'newSlsaRecipe_Environment' smart constructor.
newtype SlsaRecipe_Environment = SlsaRecipe_Environment
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SlsaRecipe_Environment' with the minimum fields required to make a request.
newSlsaRecipe_Environment ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  SlsaRecipe_Environment
newSlsaRecipe_Environment additional =
  SlsaRecipe_Environment {additional = additional}

instance Core.FromJSON SlsaRecipe_Environment where
  parseJSON =
    Core.withObject
      "SlsaRecipe_Environment"
      (\o -> SlsaRecipe_Environment Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON SlsaRecipe_Environment where
  toJSON SlsaRecipe_Environment {..} = Core.toJSON additional

-- | Source describes the location of the source used for the build.
--
-- /See:/ 'newSource' smart constructor.
data Source = Source
  { -- | If provided, some of the source code used for the build may be found in these locations, in the case where the source repository had multiple remotes or submodules. This list will not include the context specified in the context field.
    additionalContexts :: (Core.Maybe [SourceContext]),
    -- | If provided, the input binary artifacts for the build came from this location.
    artifactStorageSourceUri :: (Core.Maybe Core.Text),
    -- | If provided, the source code used for the build came from this location.
    context :: (Core.Maybe SourceContext),
    -- | Hash(es) of the build source, which can be used to verify that the original source integrity was maintained in the build. The keys to this map are file paths used as build source and the values contain the hash values for those files. If the build source came in a single package such as a gzipped tarfile (.tar.gz), the FileHash will be for the single path to that file.
    fileHashes :: (Core.Maybe Source_FileHashes)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Source' with the minimum fields required to make a request.
newSource ::
  Source
newSource =
  Source
    { additionalContexts = Core.Nothing,
      artifactStorageSourceUri = Core.Nothing,
      context = Core.Nothing,
      fileHashes = Core.Nothing
    }

instance Core.FromJSON Source where
  parseJSON =
    Core.withObject
      "Source"
      ( \o ->
          Source
            Core.<$> (o Core..:? "additionalContexts")
            Core.<*> (o Core..:? "artifactStorageSourceUri")
            Core.<*> (o Core..:? "context")
            Core.<*> (o Core..:? "fileHashes")
      )

instance Core.ToJSON Source where
  toJSON Source {..} =
    Core.object
      ( Core.catMaybes
          [ ("additionalContexts" Core..=) Core.<$> additionalContexts,
            ("artifactStorageSourceUri" Core..=)
              Core.<$> artifactStorageSourceUri,
            ("context" Core..=) Core.<$> context,
            ("fileHashes" Core..=) Core.<$> fileHashes
          ]
      )

-- | Hash(es) of the build source, which can be used to verify that the original source integrity was maintained in the build. The keys to this map are file paths used as build source and the values contain the hash values for those files. If the build source came in a single package such as a gzipped tarfile (.tar.gz), the FileHash will be for the single path to that file.
--
-- /See:/ 'newSource_FileHashes' smart constructor.
newtype Source_FileHashes = Source_FileHashes
  { additional :: (Core.HashMap Core.Text FileHashes)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Source_FileHashes' with the minimum fields required to make a request.
newSource_FileHashes ::
  -- |  See 'additional'.
  Core.HashMap Core.Text FileHashes ->
  Source_FileHashes
newSource_FileHashes additional =
  Source_FileHashes {additional = additional}

instance Core.FromJSON Source_FileHashes where
  parseJSON =
    Core.withObject
      "Source_FileHashes"
      (\o -> Source_FileHashes Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Source_FileHashes where
  toJSON Source_FileHashes {..} = Core.toJSON additional

-- | A SourceContext is a reference to a tree of files. A SourceContext together with a path point to a unique revision of a single file or directory.
--
-- /See:/ 'newSourceContext' smart constructor.
data SourceContext = SourceContext
  { -- | A SourceContext referring to a revision in a Google Cloud Source Repo.
    cloudRepo :: (Core.Maybe CloudRepoSourceContext),
    -- | A SourceContext referring to a Gerrit project.
    gerrit :: (Core.Maybe GerritSourceContext),
    -- | A SourceContext referring to any third party Git repo (e.g., GitHub).
    git :: (Core.Maybe GitSourceContext),
    -- | Labels with user defined metadata.
    labels :: (Core.Maybe SourceContext_Labels)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SourceContext' with the minimum fields required to make a request.
newSourceContext ::
  SourceContext
newSourceContext =
  SourceContext
    { cloudRepo = Core.Nothing,
      gerrit = Core.Nothing,
      git = Core.Nothing,
      labels = Core.Nothing
    }

instance Core.FromJSON SourceContext where
  parseJSON =
    Core.withObject
      "SourceContext"
      ( \o ->
          SourceContext
            Core.<$> (o Core..:? "cloudRepo")
            Core.<*> (o Core..:? "gerrit")
            Core.<*> (o Core..:? "git")
            Core.<*> (o Core..:? "labels")
      )

instance Core.ToJSON SourceContext where
  toJSON SourceContext {..} =
    Core.object
      ( Core.catMaybes
          [ ("cloudRepo" Core..=) Core.<$> cloudRepo,
            ("gerrit" Core..=) Core.<$> gerrit,
            ("git" Core..=) Core.<$> git,
            ("labels" Core..=) Core.<$> labels
          ]
      )

-- | Labels with user defined metadata.
--
-- /See:/ 'newSourceContext_Labels' smart constructor.
newtype SourceContext_Labels = SourceContext_Labels
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'SourceContext_Labels' with the minimum fields required to make a request.
newSourceContext_Labels ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  SourceContext_Labels
newSourceContext_Labels additional =
  SourceContext_Labels {additional = additional}

instance Core.FromJSON SourceContext_Labels where
  parseJSON =
    Core.withObject
      "SourceContext_Labels"
      (\o -> SourceContext_Labels Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON SourceContext_Labels where
  toJSON SourceContext_Labels {..} = Core.toJSON additional

-- | The @Status@ type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by <https://github.com/grpc gRPC>. Each @Status@ message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the <https://cloud.google.com/apis/design/errors API Design Guide>.
--
-- /See:/ 'newStatus' smart constructor.
data Status = Status
  { -- | The status code, which should be an enum value of google.rpc.Code.
    code :: (Core.Maybe Core.Int32),
    -- | A list of messages that carry the error details. There is a common set of message types for APIs to use.
    details :: (Core.Maybe [Status_DetailsItem]),
    -- | A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
    message :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status' with the minimum fields required to make a request.
newStatus ::
  Status
newStatus =
  Status
    { code = Core.Nothing,
      details = Core.Nothing,
      message = Core.Nothing
    }

instance Core.FromJSON Status where
  parseJSON =
    Core.withObject
      "Status"
      ( \o ->
          Status
            Core.<$> (o Core..:? "code")
            Core.<*> (o Core..:? "details")
            Core.<*> (o Core..:? "message")
      )

instance Core.ToJSON Status where
  toJSON Status {..} =
    Core.object
      ( Core.catMaybes
          [ ("code" Core..=) Core.<$> code,
            ("details" Core..=) Core.<$> details,
            ("message" Core..=) Core.<$> message
          ]
      )

--
-- /See:/ 'newStatus_DetailsItem' smart constructor.
newtype Status_DetailsItem = Status_DetailsItem
  { -- | Properties of the object. Contains field \@type with type URL.
    additional :: (Core.HashMap Core.Text Core.Value)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Status_DetailsItem' with the minimum fields required to make a request.
newStatus_DetailsItem ::
  -- |  Properties of the object. Contains field \@type with type URL. See 'additional'.
  Core.HashMap Core.Text Core.Value ->
  Status_DetailsItem
newStatus_DetailsItem additional =
  Status_DetailsItem {additional = additional}

instance Core.FromJSON Status_DetailsItem where
  parseJSON =
    Core.withObject
      "Status_DetailsItem"
      (\o -> Status_DetailsItem Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Status_DetailsItem where
  toJSON Status_DetailsItem {..} = Core.toJSON additional

--
-- /See:/ 'newSubject' smart constructor.
data Subject = Subject
  { -- | @\"\": \"\"@ Algorithms can be e.g. sha256, sha512 See https:\/\/github.com\/in-toto\/attestation\/blob\/main\/spec\/field_types.md#DigestSet
    digest :: (Core.Maybe Subject_Digest),
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Subject' with the minimum fields required to make a request.
newSubject ::
  Subject
newSubject = Subject {digest = Core.Nothing, name = Core.Nothing}

instance Core.FromJSON Subject where
  parseJSON =
    Core.withObject
      "Subject"
      ( \o ->
          Subject
            Core.<$> (o Core..:? "digest")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON Subject where
  toJSON Subject {..} =
    Core.object
      ( Core.catMaybes
          [ ("digest" Core..=) Core.<$> digest,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | @\"\": \"\"@ Algorithms can be e.g. sha256, sha512 See https:\/\/github.com\/in-toto\/attestation\/blob\/main\/spec\/field_types.md#DigestSet
--
-- /See:/ 'newSubject_Digest' smart constructor.
newtype Subject_Digest = Subject_Digest
  { additional :: (Core.HashMap Core.Text Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Subject_Digest' with the minimum fields required to make a request.
newSubject_Digest ::
  -- |  See 'additional'.
  Core.HashMap Core.Text Core.Text ->
  Subject_Digest
newSubject_Digest additional =
  Subject_Digest {additional = additional}

instance Core.FromJSON Subject_Digest where
  parseJSON =
    Core.withObject
      "Subject_Digest"
      (\o -> Subject_Digest Core.<$> (Core.parseJSONObject o))

instance Core.ToJSON Subject_Digest where
  toJSON Subject_Digest {..} = Core.toJSON additional

-- | Request message for @TestIamPermissions@ method.
--
-- /See:/ 'newTestIamPermissionsRequest' smart constructor.
newtype TestIamPermissionsRequest = TestIamPermissionsRequest
  { -- | The set of permissions to check for the @resource@. Permissions with wildcards (such as @*@ or @storage.*@) are not allowed. For more information see <https://cloud.google.com/iam/docs/overview#permissions IAM Overview>.
    permissions :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TestIamPermissionsRequest' with the minimum fields required to make a request.
newTestIamPermissionsRequest ::
  TestIamPermissionsRequest
newTestIamPermissionsRequest =
  TestIamPermissionsRequest {permissions = Core.Nothing}

instance Core.FromJSON TestIamPermissionsRequest where
  parseJSON =
    Core.withObject
      "TestIamPermissionsRequest"
      ( \o ->
          TestIamPermissionsRequest Core.<$> (o Core..:? "permissions")
      )

instance Core.ToJSON TestIamPermissionsRequest where
  toJSON TestIamPermissionsRequest {..} =
    Core.object
      (Core.catMaybes [("permissions" Core..=) Core.<$> permissions])

-- | Response message for @TestIamPermissions@ method.
--
-- /See:/ 'newTestIamPermissionsResponse' smart constructor.
newtype TestIamPermissionsResponse = TestIamPermissionsResponse
  { -- | A subset of @TestPermissionsRequest.permissions@ that the caller is allowed.
    permissions :: (Core.Maybe [Core.Text])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TestIamPermissionsResponse' with the minimum fields required to make a request.
newTestIamPermissionsResponse ::
  TestIamPermissionsResponse
newTestIamPermissionsResponse =
  TestIamPermissionsResponse {permissions = Core.Nothing}

instance Core.FromJSON TestIamPermissionsResponse where
  parseJSON =
    Core.withObject
      "TestIamPermissionsResponse"
      ( \o ->
          TestIamPermissionsResponse Core.<$> (o Core..:? "permissions")
      )

instance Core.ToJSON TestIamPermissionsResponse where
  toJSON TestIamPermissionsResponse {..} =
    Core.object
      (Core.catMaybes [("permissions" Core..=) Core.<$> permissions])

-- | Start and end times for a build execution phase. Next ID: 3
--
-- /See:/ 'newTimeSpan' smart constructor.
data TimeSpan = TimeSpan
  { -- | End of time span.
    endTime :: (Core.Maybe Core.DateTime),
    -- | Start of time span.
    startTime :: (Core.Maybe Core.DateTime)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'TimeSpan' with the minimum fields required to make a request.
newTimeSpan ::
  TimeSpan
newTimeSpan =
  TimeSpan {endTime = Core.Nothing, startTime = Core.Nothing}

instance Core.FromJSON TimeSpan where
  parseJSON =
    Core.withObject
      "TimeSpan"
      ( \o ->
          TimeSpan
            Core.<$> (o Core..:? "endTime")
            Core.<*> (o Core..:? "startTime")
      )

instance Core.ToJSON TimeSpan where
  toJSON TimeSpan {..} =
    Core.object
      ( Core.catMaybes
          [ ("endTime" Core..=) Core.<$> endTime,
            ("startTime" Core..=) Core.<$> startTime
          ]
      )

-- | The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
--
-- /See:/ 'newUpgradeDistribution' smart constructor.
data UpgradeDistribution = UpgradeDistribution
  { -- | The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed. For Windows the classification is one of the category_ids listed at https:\/\/docs.microsoft.com\/en-us\/previous-versions\/windows\/desktop\/ff357803(v=vs.85)
    classification :: (Core.Maybe Core.Text),
    -- | Required - The specific operating system this metadata applies to. See https:\/\/cpe.mitre.org\/specification\/.
    cpeUri :: (Core.Maybe Core.Text),
    -- | The cve tied to this Upgrade.
    cve :: (Core.Maybe [Core.Text]),
    -- | The severity as specified by the upstream operating system.
    severity :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpgradeDistribution' with the minimum fields required to make a request.
newUpgradeDistribution ::
  UpgradeDistribution
newUpgradeDistribution =
  UpgradeDistribution
    { classification = Core.Nothing,
      cpeUri = Core.Nothing,
      cve = Core.Nothing,
      severity = Core.Nothing
    }

instance Core.FromJSON UpgradeDistribution where
  parseJSON =
    Core.withObject
      "UpgradeDistribution"
      ( \o ->
          UpgradeDistribution
            Core.<$> (o Core..:? "classification")
            Core.<*> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "cve")
            Core.<*> (o Core..:? "severity")
      )

instance Core.ToJSON UpgradeDistribution where
  toJSON UpgradeDistribution {..} =
    Core.object
      ( Core.catMaybes
          [ ("classification" Core..=) Core.<$> classification,
            ("cpeUri" Core..=) Core.<$> cpeUri,
            ("cve" Core..=) Core.<$> cve,
            ("severity" Core..=) Core.<$> severity
          ]
      )

-- | An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be an Upgrade Note. For Windows, windows_update field represents the information related to the update.
--
-- /See:/ 'newUpgradeNote' smart constructor.
data UpgradeNote = UpgradeNote
  { -- | Metadata about the upgrade for each specific operating system.
    distributions :: (Core.Maybe [UpgradeDistribution]),
    -- | Required for non-Windows OS. The package this Upgrade is for.
    package :: (Core.Maybe Core.Text),
    -- | Required for non-Windows OS. The version of the package in machine + human readable form.
    version :: (Core.Maybe Version),
    -- | Required for Windows OS. Represents the metadata about the Windows update.
    windowsUpdate :: (Core.Maybe WindowsUpdate)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpgradeNote' with the minimum fields required to make a request.
newUpgradeNote ::
  UpgradeNote
newUpgradeNote =
  UpgradeNote
    { distributions = Core.Nothing,
      package = Core.Nothing,
      version = Core.Nothing,
      windowsUpdate = Core.Nothing
    }

instance Core.FromJSON UpgradeNote where
  parseJSON =
    Core.withObject
      "UpgradeNote"
      ( \o ->
          UpgradeNote
            Core.<$> (o Core..:? "distributions")
            Core.<*> (o Core..:? "package")
            Core.<*> (o Core..:? "version")
            Core.<*> (o Core..:? "windowsUpdate")
      )

instance Core.ToJSON UpgradeNote where
  toJSON UpgradeNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("distributions" Core..=) Core.<$> distributions,
            ("package" Core..=) Core.<$> package,
            ("version" Core..=) Core.<$> version,
            ("windowsUpdate" Core..=) Core.<$> windowsUpdate
          ]
      )

-- | An Upgrade Occurrence represents that a specific resource/url could install a specific upgrade. This presence is supplied via local sources (i.e. it is present in the mirror and the running system has noticed its availability). For Windows, both distribution and windows/update contain information for the Windows update.
--
-- /See:/ 'newUpgradeOccurrence' smart constructor.
data UpgradeOccurrence = UpgradeOccurrence
  { -- | Metadata about the upgrade for available for the specific operating system for the resource_url. This allows efficient filtering, as well as making it easier to use the occurrence.
    distribution :: (Core.Maybe UpgradeDistribution),
    -- | Required for non-Windows OS. The package this Upgrade is for.
    package :: (Core.Maybe Core.Text),
    -- | Required for non-Windows OS. The version of the package in a machine + human readable form.
    parsedVersion :: (Core.Maybe Version),
    -- | Required for Windows OS. Represents the metadata about the Windows update.
    windowsUpdate :: (Core.Maybe WindowsUpdate)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'UpgradeOccurrence' with the minimum fields required to make a request.
newUpgradeOccurrence ::
  UpgradeOccurrence
newUpgradeOccurrence =
  UpgradeOccurrence
    { distribution = Core.Nothing,
      package = Core.Nothing,
      parsedVersion = Core.Nothing,
      windowsUpdate = Core.Nothing
    }

instance Core.FromJSON UpgradeOccurrence where
  parseJSON =
    Core.withObject
      "UpgradeOccurrence"
      ( \o ->
          UpgradeOccurrence
            Core.<$> (o Core..:? "distribution")
            Core.<*> (o Core..:? "package")
            Core.<*> (o Core..:? "parsedVersion")
            Core.<*> (o Core..:? "windowsUpdate")
      )

instance Core.ToJSON UpgradeOccurrence where
  toJSON UpgradeOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("distribution" Core..=) Core.<$> distribution,
            ("package" Core..=) Core.<$> package,
            ("parsedVersion" Core..=) Core.<$> parsedVersion,
            ("windowsUpdate" Core..=) Core.<$> windowsUpdate
          ]
      )

-- | Version contains structured information about the version of a package.
--
-- /See:/ 'newVersion' smart constructor.
data Version = Version
  { -- | Used to correct mistakes in the version numbering scheme.
    epoch :: (Core.Maybe Core.Int32),
    -- | Human readable version string. This string is of the form :- and is only set when kind is NORMAL.
    fullName :: (Core.Maybe Core.Text),
    -- | Whether this version is specifying part of an inclusive range. Grafeas does not have the capability to specify version ranges; instead we have fields that specify start version and end versions. At times this is insufficient - we also need to specify whether the version is included in the range or is excluded from the range. This boolean is expected to be set to true when the version is included in a range.
    inclusive :: (Core.Maybe Core.Bool),
    -- | Required. Distinguishes between sentinel MIN\/MAX versions and normal versions.
    kind :: (Core.Maybe Version_Kind),
    -- | Required only when version kind is NORMAL. The main part of the version name.
    name :: (Core.Maybe Core.Text),
    -- | The iteration of the package build from the above version.
    revision :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Version' with the minimum fields required to make a request.
newVersion ::
  Version
newVersion =
  Version
    { epoch = Core.Nothing,
      fullName = Core.Nothing,
      inclusive = Core.Nothing,
      kind = Core.Nothing,
      name = Core.Nothing,
      revision = Core.Nothing
    }

instance Core.FromJSON Version where
  parseJSON =
    Core.withObject
      "Version"
      ( \o ->
          Version
            Core.<$> (o Core..:? "epoch")
            Core.<*> (o Core..:? "fullName")
            Core.<*> (o Core..:? "inclusive")
            Core.<*> (o Core..:? "kind")
            Core.<*> (o Core..:? "name")
            Core.<*> (o Core..:? "revision")
      )

instance Core.ToJSON Version where
  toJSON Version {..} =
    Core.object
      ( Core.catMaybes
          [ ("epoch" Core..=) Core.<$> epoch,
            ("fullName" Core..=) Core.<$> fullName,
            ("inclusive" Core..=) Core.<$> inclusive,
            ("kind" Core..=) Core.<$> kind,
            ("name" Core..=) Core.<$> name,
            ("revision" Core..=) Core.<$> revision
          ]
      )

-- | VexAssessment provides all publisher provided Vex information that is related to this vulnerability.
--
-- /See:/ 'newVexAssessment' smart constructor.
data VexAssessment = VexAssessment
  { -- | Holds the MITRE standard Common Vulnerabilities and Exposures (CVE) tracking number for the vulnerability. Deprecated: Use vulnerability_id instead to denote CVEs.
    cve :: (Core.Maybe Core.Text),
    -- | Contains information about the impact of this vulnerability, this will change with time.
    impacts :: (Core.Maybe [Core.Text]),
    -- | Justification provides the justification when the state of the assessment if NOT_AFFECTED.
    justification :: (Core.Maybe Justification),
    -- | The VulnerabilityAssessment note from which this VexAssessment was generated. This will be of the form: @projects\/[PROJECT_ID]\/notes\/[NOTE_ID]@.
    noteName :: (Core.Maybe Core.Text),
    -- | Holds a list of references associated with this vulnerability item and assessment.
    relatedUris :: (Core.Maybe [RelatedUrl]),
    -- | Specifies details on how to handle (and presumably, fix) a vulnerability.
    remediations :: (Core.Maybe [Remediation]),
    -- | Provides the state of this Vulnerability assessment.
    state :: (Core.Maybe VexAssessment_State),
    -- | The vulnerability identifier for this Assessment. Will hold one of common identifiers e.g. CVE, GHSA etc.
    vulnerabilityId :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'VexAssessment' with the minimum fields required to make a request.
newVexAssessment ::
  VexAssessment
newVexAssessment =
  VexAssessment
    { cve = Core.Nothing,
      impacts = Core.Nothing,
      justification = Core.Nothing,
      noteName = Core.Nothing,
      relatedUris = Core.Nothing,
      remediations = Core.Nothing,
      state = Core.Nothing,
      vulnerabilityId = Core.Nothing
    }

instance Core.FromJSON VexAssessment where
  parseJSON =
    Core.withObject
      "VexAssessment"
      ( \o ->
          VexAssessment
            Core.<$> (o Core..:? "cve")
            Core.<*> (o Core..:? "impacts")
            Core.<*> (o Core..:? "justification")
            Core.<*> (o Core..:? "noteName")
            Core.<*> (o Core..:? "relatedUris")
            Core.<*> (o Core..:? "remediations")
            Core.<*> (o Core..:? "state")
            Core.<*> (o Core..:? "vulnerabilityId")
      )

instance Core.ToJSON VexAssessment where
  toJSON VexAssessment {..} =
    Core.object
      ( Core.catMaybes
          [ ("cve" Core..=) Core.<$> cve,
            ("impacts" Core..=) Core.<$> impacts,
            ("justification" Core..=) Core.<$> justification,
            ("noteName" Core..=) Core.<$> noteName,
            ("relatedUris" Core..=) Core.<$> relatedUris,
            ("remediations" Core..=) Core.<$> remediations,
            ("state" Core..=) Core.<$> state,
            ("vulnerabilityId" Core..=) Core.<$> vulnerabilityId
          ]
      )

-- | Volume describes a Docker container volume which is mounted into build steps in order to persist files across build step execution. Next ID: 3
--
-- /See:/ 'newVolume' smart constructor.
data Volume = Volume
  { -- | Name of the volume to mount. Volume names must be unique per build step and must be valid names for Docker volumes. Each named volume must be used by at least two build steps.
    name :: (Core.Maybe Core.Text),
    -- | Path at which to mount the volume. Paths must be absolute and cannot conflict with other volume paths on the same build step or with certain reserved volume paths.
    path :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'Volume' with the minimum fields required to make a request.
newVolume ::
  Volume
newVolume = Volume {name = Core.Nothing, path = Core.Nothing}

instance Core.FromJSON Volume where
  parseJSON =
    Core.withObject
      "Volume"
      ( \o ->
          Volume Core.<$> (o Core..:? "name") Core.<*> (o Core..:? "path")
      )

instance Core.ToJSON Volume where
  toJSON Volume {..} =
    Core.object
      ( Core.catMaybes
          [("name" Core..=) Core.<$> name, ("path" Core..=) Core.<$> path]
      )

-- | A single VulnerabilityAssessmentNote represents one particular product\'s vulnerability assessment for one CVE.
--
-- /See:/ 'newVulnerabilityAssessmentNote' smart constructor.
data VulnerabilityAssessmentNote = VulnerabilityAssessmentNote
  { -- | Represents a vulnerability assessment for the product.
    assessment :: (Core.Maybe Assessment),
    -- | Identifies the language used by this document, corresponding to IETF BCP 47 \/ RFC 5646.
    languageCode :: (Core.Maybe Core.Text),
    -- | A detailed description of this Vex.
    longDescription :: (Core.Maybe Core.Text),
    -- | The product affected by this vex.
    product :: (Core.Maybe Product),
    -- | Publisher details of this Note.
    publisher :: (Core.Maybe Publisher),
    -- | A one sentence description of this Vex.
    shortDescription :: (Core.Maybe Core.Text),
    -- | The title of the note. E.g. @Vex-Debian-11.4@
    title :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'VulnerabilityAssessmentNote' with the minimum fields required to make a request.
newVulnerabilityAssessmentNote ::
  VulnerabilityAssessmentNote
newVulnerabilityAssessmentNote =
  VulnerabilityAssessmentNote
    { assessment = Core.Nothing,
      languageCode = Core.Nothing,
      longDescription = Core.Nothing,
      product = Core.Nothing,
      publisher = Core.Nothing,
      shortDescription = Core.Nothing,
      title = Core.Nothing
    }

instance Core.FromJSON VulnerabilityAssessmentNote where
  parseJSON =
    Core.withObject
      "VulnerabilityAssessmentNote"
      ( \o ->
          VulnerabilityAssessmentNote
            Core.<$> (o Core..:? "assessment")
            Core.<*> (o Core..:? "languageCode")
            Core.<*> (o Core..:? "longDescription")
            Core.<*> (o Core..:? "product")
            Core.<*> (o Core..:? "publisher")
            Core.<*> (o Core..:? "shortDescription")
            Core.<*> (o Core..:? "title")
      )

instance Core.ToJSON VulnerabilityAssessmentNote where
  toJSON VulnerabilityAssessmentNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("assessment" Core..=) Core.<$> assessment,
            ("languageCode" Core..=) Core.<$> languageCode,
            ("longDescription" Core..=) Core.<$> longDescription,
            ("product" Core..=) Core.<$> product,
            ("publisher" Core..=) Core.<$> publisher,
            ("shortDescription" Core..=) Core.<$> shortDescription,
            ("title" Core..=) Core.<$> title
          ]
      )

-- | A security vulnerability that can be found in resources.
--
-- /See:/ 'newVulnerabilityNote' smart constructor.
data VulnerabilityNote = VulnerabilityNote
  { -- | The CVSS score of this vulnerability. CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity.
    cvssScore :: (Core.Maybe Core.Double),
    -- | The full description of the v2 CVSS for this vulnerability.
    cvssV2 :: (Core.Maybe CVSS),
    -- | The full description of the CVSSv3 for this vulnerability.
    cvssV3 :: (Core.Maybe CVSSv3),
    -- | CVSS version used to populate cvss_score and severity.
    cvssVersion :: (Core.Maybe VulnerabilityNote_CvssVersion),
    -- | Details of all known distros and packages affected by this vulnerability.
    details :: (Core.Maybe [Detail]),
    -- | The note provider assigned severity of this vulnerability.
    severity :: (Core.Maybe VulnerabilityNote_Severity),
    -- | The time this information was last changed at the source. This is an upstream timestamp from the underlying information source - e.g. Ubuntu security tracker.
    sourceUpdateTime :: (Core.Maybe Core.DateTime),
    -- | Windows details get their own format because the information format and model don\'t match a normal detail. Specifically Windows updates are done as patches, thus Windows vulnerabilities really are a missing package, rather than a package being at an incorrect version.
    windowsDetails :: (Core.Maybe [WindowsDetail])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'VulnerabilityNote' with the minimum fields required to make a request.
newVulnerabilityNote ::
  VulnerabilityNote
newVulnerabilityNote =
  VulnerabilityNote
    { cvssScore = Core.Nothing,
      cvssV2 = Core.Nothing,
      cvssV3 = Core.Nothing,
      cvssVersion = Core.Nothing,
      details = Core.Nothing,
      severity = Core.Nothing,
      sourceUpdateTime = Core.Nothing,
      windowsDetails = Core.Nothing
    }

instance Core.FromJSON VulnerabilityNote where
  parseJSON =
    Core.withObject
      "VulnerabilityNote"
      ( \o ->
          VulnerabilityNote
            Core.<$> (o Core..:? "cvssScore")
            Core.<*> (o Core..:? "cvssV2")
            Core.<*> (o Core..:? "cvssV3")
            Core.<*> (o Core..:? "cvssVersion")
            Core.<*> (o Core..:? "details")
            Core.<*> (o Core..:? "severity")
            Core.<*> (o Core..:? "sourceUpdateTime")
            Core.<*> (o Core..:? "windowsDetails")
      )

instance Core.ToJSON VulnerabilityNote where
  toJSON VulnerabilityNote {..} =
    Core.object
      ( Core.catMaybes
          [ ("cvssScore" Core..=) Core.<$> cvssScore,
            ("cvssV2" Core..=) Core.<$> cvssV2,
            ("cvssV3" Core..=) Core.<$> cvssV3,
            ("cvssVersion" Core..=) Core.<$> cvssVersion,
            ("details" Core..=) Core.<$> details,
            ("severity" Core..=) Core.<$> severity,
            ("sourceUpdateTime" Core..=) Core.<$> sourceUpdateTime,
            ("windowsDetails" Core..=) Core.<$> windowsDetails
          ]
      )

-- | An occurrence of a severity vulnerability on a resource.
--
-- /See:/ 'newVulnerabilityOccurrence' smart constructor.
data VulnerabilityOccurrence = VulnerabilityOccurrence
  { -- | Output only. The CVSS score of this vulnerability. CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity.
    cvssScore :: (Core.Maybe Core.Double),
    -- | The cvss v2 score for the vulnerability.
    cvssV2 :: (Core.Maybe CVSS),
    -- | Output only. CVSS version used to populate cvss_score and severity.
    cvssVersion :: (Core.Maybe VulnerabilityOccurrence_CvssVersion),
    -- | The cvss v3 score for the vulnerability.
    cvssv3 :: (Core.Maybe CVSS),
    -- | The distro assigned severity for this vulnerability when it is available, otherwise this is the note provider assigned severity. When there are multiple PackageIssues for this vulnerability, they can have different effective severities because some might be provided by the distro while others are provided by the language ecosystem for a language pack. For this reason, it is advised to use the effective severity on the PackageIssue level. In the case where multiple PackageIssues have differing effective severities, this field should be the highest severity for any of the PackageIssues.
    effectiveSeverity :: (Core.Maybe VulnerabilityOccurrence_EffectiveSeverity),
    -- | Occurrence-specific extra details about the vulnerability.
    extraDetails :: (Core.Maybe Core.Text),
    -- | Output only. Whether at least one of the affected packages has a fix available.
    fixAvailable :: (Core.Maybe Core.Bool),
    -- | Output only. A detailed description of this vulnerability.
    longDescription :: (Core.Maybe Core.Text),
    -- | Required. The set of affected locations and their fixes (if available) within the associated resource.
    packageIssue :: (Core.Maybe [PackageIssue]),
    -- | Output only. URLs related to this vulnerability.
    relatedUrls :: (Core.Maybe [RelatedUrl]),
    -- | Output only. The note provider assigned severity of this vulnerability.
    severity :: (Core.Maybe VulnerabilityOccurrence_Severity),
    -- | Output only. A one sentence description of this vulnerability.
    shortDescription :: (Core.Maybe Core.Text),
    -- | The type of package; whether native or non native (e.g., ruby gems, node.js packages, etc.).
    type' :: (Core.Maybe Core.Text),
    vexAssessment :: (Core.Maybe VexAssessment)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'VulnerabilityOccurrence' with the minimum fields required to make a request.
newVulnerabilityOccurrence ::
  VulnerabilityOccurrence
newVulnerabilityOccurrence =
  VulnerabilityOccurrence
    { cvssScore = Core.Nothing,
      cvssV2 = Core.Nothing,
      cvssVersion = Core.Nothing,
      cvssv3 = Core.Nothing,
      effectiveSeverity = Core.Nothing,
      extraDetails = Core.Nothing,
      fixAvailable = Core.Nothing,
      longDescription = Core.Nothing,
      packageIssue = Core.Nothing,
      relatedUrls = Core.Nothing,
      severity = Core.Nothing,
      shortDescription = Core.Nothing,
      type' = Core.Nothing,
      vexAssessment = Core.Nothing
    }

instance Core.FromJSON VulnerabilityOccurrence where
  parseJSON =
    Core.withObject
      "VulnerabilityOccurrence"
      ( \o ->
          VulnerabilityOccurrence
            Core.<$> (o Core..:? "cvssScore")
            Core.<*> (o Core..:? "cvssV2")
            Core.<*> (o Core..:? "cvssVersion")
            Core.<*> (o Core..:? "cvssv3")
            Core.<*> (o Core..:? "effectiveSeverity")
            Core.<*> (o Core..:? "extraDetails")
            Core.<*> (o Core..:? "fixAvailable")
            Core.<*> (o Core..:? "longDescription")
            Core.<*> (o Core..:? "packageIssue")
            Core.<*> (o Core..:? "relatedUrls")
            Core.<*> (o Core..:? "severity")
            Core.<*> (o Core..:? "shortDescription")
            Core.<*> (o Core..:? "type")
            Core.<*> (o Core..:? "vexAssessment")
      )

instance Core.ToJSON VulnerabilityOccurrence where
  toJSON VulnerabilityOccurrence {..} =
    Core.object
      ( Core.catMaybes
          [ ("cvssScore" Core..=) Core.<$> cvssScore,
            ("cvssV2" Core..=) Core.<$> cvssV2,
            ("cvssVersion" Core..=) Core.<$> cvssVersion,
            ("cvssv3" Core..=) Core.<$> cvssv3,
            ("effectiveSeverity" Core..=) Core.<$> effectiveSeverity,
            ("extraDetails" Core..=) Core.<$> extraDetails,
            ("fixAvailable" Core..=) Core.<$> fixAvailable,
            ("longDescription" Core..=) Core.<$> longDescription,
            ("packageIssue" Core..=) Core.<$> packageIssue,
            ("relatedUrls" Core..=) Core.<$> relatedUrls,
            ("severity" Core..=) Core.<$> severity,
            ("shortDescription" Core..=) Core.<$> shortDescription,
            ("type" Core..=) Core.<$> type',
            ("vexAssessment" Core..=) Core.<$> vexAssessment
          ]
      )

-- | A summary of how many vulnerability occurrences there are per resource and severity type.
--
-- /See:/ 'newVulnerabilityOccurrencesSummary' smart constructor.
newtype VulnerabilityOccurrencesSummary = VulnerabilityOccurrencesSummary
  { -- | A listing by resource of the number of fixable and total vulnerabilities.
    counts :: (Core.Maybe [FixableTotalByDigest])
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'VulnerabilityOccurrencesSummary' with the minimum fields required to make a request.
newVulnerabilityOccurrencesSummary ::
  VulnerabilityOccurrencesSummary
newVulnerabilityOccurrencesSummary =
  VulnerabilityOccurrencesSummary {counts = Core.Nothing}

instance Core.FromJSON VulnerabilityOccurrencesSummary where
  parseJSON =
    Core.withObject
      "VulnerabilityOccurrencesSummary"
      ( \o ->
          VulnerabilityOccurrencesSummary Core.<$> (o Core..:? "counts")
      )

instance Core.ToJSON VulnerabilityOccurrencesSummary where
  toJSON VulnerabilityOccurrencesSummary {..} =
    Core.object (Core.catMaybes [("counts" Core..=) Core.<$> counts])

--
-- /See:/ 'newWindowsDetail' smart constructor.
data WindowsDetail = WindowsDetail
  { -- | Required. The <https://cpe.mitre.org/specification/ CPE URI> this vulnerability affects.
    cpeUri :: (Core.Maybe Core.Text),
    -- | The description of this vulnerability.
    description :: (Core.Maybe Core.Text),
    -- | Required. The names of the KBs which have hotfixes to mitigate this vulnerability. Note that there may be multiple hotfixes (and thus multiple KBs) that mitigate a given vulnerability. Currently any listed KBs presence is considered a fix.
    fixingKbs :: (Core.Maybe [KnowledgeBase]),
    -- | Required. The name of this vulnerability.
    name :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WindowsDetail' with the minimum fields required to make a request.
newWindowsDetail ::
  WindowsDetail
newWindowsDetail =
  WindowsDetail
    { cpeUri = Core.Nothing,
      description = Core.Nothing,
      fixingKbs = Core.Nothing,
      name = Core.Nothing
    }

instance Core.FromJSON WindowsDetail where
  parseJSON =
    Core.withObject
      "WindowsDetail"
      ( \o ->
          WindowsDetail
            Core.<$> (o Core..:? "cpeUri")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "fixingKbs")
            Core.<*> (o Core..:? "name")
      )

instance Core.ToJSON WindowsDetail where
  toJSON WindowsDetail {..} =
    Core.object
      ( Core.catMaybes
          [ ("cpeUri" Core..=) Core.<$> cpeUri,
            ("description" Core..=) Core.<$> description,
            ("fixingKbs" Core..=) Core.<$> fixingKbs,
            ("name" Core..=) Core.<$> name
          ]
      )

-- | Windows Update represents the metadata about the update for the Windows operating system. The fields in this message come from the Windows Update API documented at https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/wuapi\/nn-wuapi-iupdate.
--
-- /See:/ 'newWindowsUpdate' smart constructor.
data WindowsUpdate = WindowsUpdate
  { -- | The list of categories to which the update belongs.
    categories :: (Core.Maybe [Category]),
    -- | The localized description of the update.
    description :: (Core.Maybe Core.Text),
    -- | Required - The unique identifier for the update.
    identity :: (Core.Maybe Identity),
    -- | The Microsoft Knowledge Base article IDs that are associated with the update.
    kbArticleIds :: (Core.Maybe [Core.Text]),
    -- | The last published timestamp of the update.
    lastPublishedTimestamp :: (Core.Maybe Core.DateTime),
    -- | The hyperlink to the support information for the update.
    supportUrl :: (Core.Maybe Core.Text),
    -- | The localized title of the update.
    title :: (Core.Maybe Core.Text)
  }
  deriving (Core.Eq, Core.Show, Core.Generic)

-- | Creates a value of 'WindowsUpdate' with the minimum fields required to make a request.
newWindowsUpdate ::
  WindowsUpdate
newWindowsUpdate =
  WindowsUpdate
    { categories = Core.Nothing,
      description = Core.Nothing,
      identity = Core.Nothing,
      kbArticleIds = Core.Nothing,
      lastPublishedTimestamp = Core.Nothing,
      supportUrl = Core.Nothing,
      title = Core.Nothing
    }

instance Core.FromJSON WindowsUpdate where
  parseJSON =
    Core.withObject
      "WindowsUpdate"
      ( \o ->
          WindowsUpdate
            Core.<$> (o Core..:? "categories")
            Core.<*> (o Core..:? "description")
            Core.<*> (o Core..:? "identity")
            Core.<*> (o Core..:? "kbArticleIds")
            Core.<*> (o Core..:? "lastPublishedTimestamp")
            Core.<*> (o Core..:? "supportUrl")
            Core.<*> (o Core..:? "title")
      )

instance Core.ToJSON WindowsUpdate where
  toJSON WindowsUpdate {..} =
    Core.object
      ( Core.catMaybes
          [ ("categories" Core..=) Core.<$> categories,
            ("description" Core..=) Core.<$> description,
            ("identity" Core..=) Core.<$> identity,
            ("kbArticleIds" Core..=) Core.<$> kbArticleIds,
            ("lastPublishedTimestamp" Core..=) Core.<$> lastPublishedTimestamp,
            ("supportUrl" Core..=) Core.<$> supportUrl,
            ("title" Core..=) Core.<$> title
          ]
      )