content: {-# 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
            ]
        )
  