# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.CloudFunctions.V1.Model.CloudFunction do
  @moduledoc """
  Describes a Cloud Function that contains user computation executed in response to an event. It encapsulate function and triggers configurations.

  ## Attributes

  *   `automaticUpdatePolicy` (*type:* `GoogleApi.CloudFunctions.V1.Model.AutomaticUpdatePolicy.t`, *default:* `nil`) - 
  *   `labels` (*type:* `map()`, *default:* `nil`) - Labels associated with this Cloud Function.
  *   `name` (*type:* `String.t`, *default:* `nil`) - A user-defined name of the function. Function names must be unique globally and match pattern `projects/*/locations/*/functions/*`
  *   `sourceUploadUrl` (*type:* `String.t`, *default:* `nil`) - The Google Cloud Storage signed URL used for source uploading, generated by calling [google.cloud.functions.v1.GenerateUploadUrl]. The signature is validated on write methods (Create, Update) The signature is stripped from the Function object on read methods (Get, List)
  *   `sourceToken` (*type:* `String.t`, *default:* `nil`) - Input only. An identifier for Firebase function sources. Disclaimer: This field is only supported for Firebase function deployments.
  *   `eventTrigger` (*type:* `GoogleApi.CloudFunctions.V1.Model.EventTrigger.t`, *default:* `nil`) - A source that fires events in response to a condition in another service.
  *   `environmentVariables` (*type:* `map()`, *default:* `nil`) - Environment variables that shall be available during function execution.
  *   `description` (*type:* `String.t`, *default:* `nil`) - User-provided description of a function.
  *   `vpcConnector` (*type:* `String.t`, *default:* `nil`) - The VPC Network Connector that this cloud function can connect to. It can be either the fully-qualified URI, or the short name of the network connector resource. The format of this field is `projects/*/locations/*/connectors/*` This field is mutually exclusive with `network` field and will eventually replace it. See [the VPC documentation](https://cloud.google.com/compute/docs/vpc) for more information on connecting Cloud projects.
  *   `timeout` (*type:* `String.t`, *default:* `nil`) - The function execution timeout. Execution is considered failed and can be terminated if the function is not completed at the end of the timeout period. Defaults to 60 seconds.
  *   `onDeployUpdatePolicy` (*type:* `GoogleApi.CloudFunctions.V1.Model.OnDeployUpdatePolicy.t`, *default:* `nil`) - 
  *   `maxInstances` (*type:* `integer()`, *default:* `nil`) - The limit on the maximum number of function instances that may coexist at a given time. In some cases, such as rapid traffic surges, Cloud Functions may, for a short period of time, create more instances than the specified max instances limit. If your function cannot tolerate this temporary behavior, you may want to factor in a safety margin and set a lower max instances value than your function can tolerate. See the [Max Instances](https://cloud.google.com/functions/docs/max-instances) Guide for more details.
  *   `buildName` (*type:* `String.t`, *default:* `nil`) - Output only. The Cloud Build Name of the function deployment. `projects//locations//builds/`.
  *   `secretVolumes` (*type:* `list(GoogleApi.CloudFunctions.V1.Model.SecretVolume.t)`, *default:* `nil`) - Secret volumes configuration.
  *   `sourceRepository` (*type:* `GoogleApi.CloudFunctions.V1.Model.SourceRepository.t`, *default:* `nil`) - **Beta Feature** The source repository where a function is hosted.
  *   `buildWorkerPool` (*type:* `String.t`, *default:* `nil`) - Name of the Cloud Build Custom Worker Pool that should be used to build the function. The format of this field is `projects/{project}/locations/{region}/workerPools/{workerPool}` where `{project}` and `{region}` are the project id and region respectively where the worker pool is defined and `{workerPool}` is the short name of the worker pool. If the project id is not the same as the function, then the Cloud Functions Service Agent (`service-@gcf-admin-robot.iam.gserviceaccount.com`) must be granted the role Cloud Build Custom Workers Builder (`roles/cloudbuild.customworkers.builder`) in the project.
  *   `dockerRegistry` (*type:* `String.t`, *default:* `nil`) - Docker Registry to use for this deployment. If unspecified, it defaults to `ARTIFACT_REGISTRY`. If `docker_repository` field is specified, this field should either be left unspecified or set to `ARTIFACT_REGISTRY`.
  *   `kmsKeyName` (*type:* `String.t`, *default:* `nil`) - Resource name of a KMS crypto key (managed by the user) used to encrypt/decrypt function resources. It must match the pattern `projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}`. If specified, you must also provide an artifact registry repository using the `docker_repository` field that was created with the same KMS crypto key. The following service accounts need to be granted the role 'Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter)' on the Key/KeyRing/Project/Organization (least access preferred). 1. Google Cloud Functions service account (service-{project_number}@gcf-admin-robot.iam.gserviceaccount.com) - Required to protect the function's image. 2. Google Storage service account (service-{project_number}@gs-project-accounts.iam.gserviceaccount.com) - Required to protect the function's source code. If this service account does not exist, deploying a function without a KMS key or retrieving the service agent name provisions it. For more information, see https://cloud.google.com/storage/docs/projects#service-agents and https://cloud.google.com/storage/docs/getting-service-agent#gsutil. Google Cloud Functions delegates access to service agents to protect function resources in internal projects that are not accessible by the end user.
  *   `availableMemoryMb` (*type:* `integer()`, *default:* `nil`) - The amount of memory in MB available for a function. Defaults to 256MB.
  *   `runtime` (*type:* `String.t`, *default:* `nil`) - The runtime in which to run the function. Required when deploying a new function, optional when updating an existing function. For a complete list of possible choices, see the [`gcloud` command reference](https://cloud.google.com/sdk/gcloud/reference/functions/deploy#--runtime).
  *   `sourceArchiveUrl` (*type:* `String.t`, *default:* `nil`) - The Google Cloud Storage URL, starting with `gs://`, pointing to the zip archive which contains the function.
  *   `vpcConnectorEgressSettings` (*type:* `String.t`, *default:* `nil`) - The egress settings for the connector, controlling what traffic is diverted through it.
  *   `minInstances` (*type:* `integer()`, *default:* `nil`) - A lower bound for the number function instances that may coexist at a given time.
  *   `secretEnvironmentVariables` (*type:* `list(GoogleApi.CloudFunctions.V1.Model.SecretEnvVar.t)`, *default:* `nil`) - Secret environment variables configuration.
  *   `network` (*type:* `String.t`, *default:* `nil`) - Deprecated: use vpc_connector
  *   `buildEnvironmentVariables` (*type:* `map()`, *default:* `nil`) - Build environment variables that shall be available during build time.
  *   `updateTime` (*type:* `DateTime.t`, *default:* `nil`) - Output only. The last update timestamp of a Cloud Function.
  *   `ingressSettings` (*type:* `String.t`, *default:* `nil`) - The ingress settings for the function, controlling what traffic can reach it.
  *   `serviceAccountEmail` (*type:* `String.t`, *default:* `nil`) - The email of the function's service account. If empty, defaults to `{project_id}@appspot.gserviceaccount.com`.
  *   `dockerRepository` (*type:* `String.t`, *default:* `nil`) - User-managed repository created in Artifact Registry to which the function's Docker image will be pushed after it is built by Cloud Build. May optionally be encrypted with a customer-managed encryption key (CMEK). If unspecified and `docker_registry` is not explicitly set to `CONTAINER_REGISTRY`, GCF will create and use a default Artifact Registry repository named 'gcf-artifacts' in the region. It must match the pattern `projects/{project}/locations/{location}/repositories/{repository}`. Cross-project repositories are not supported. Cross-location repositories are not supported. Repository format must be 'DOCKER'.
  *   `httpsTrigger` (*type:* `GoogleApi.CloudFunctions.V1.Model.HttpsTrigger.t`, *default:* `nil`) - An HTTPS endpoint type of source that can be triggered via URL.
  *   `status` (*type:* `String.t`, *default:* `nil`) - Output only. Status of the function deployment.
  *   `versionId` (*type:* `String.t`, *default:* `nil`) - Output only. The version identifier of the Cloud Function. Each deployment attempt results in a new version of a function being created.
  *   `buildId` (*type:* `String.t`, *default:* `nil`) - Output only. The Cloud Build ID of the latest successful deployment of the function.
  *   `buildServiceAccount` (*type:* `String.t`, *default:* `nil`) - A service account the user provides for use with Cloud Build. The format of this field is `projects/{projectId}/serviceAccounts/{serviceAccountEmail}`.
  *   `entryPoint` (*type:* `String.t`, *default:* `nil`) - The name of the function (as defined in source code) that will be executed. Defaults to the resource name suffix (ID of the function), if not specified.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :automaticUpdatePolicy =>
            GoogleApi.CloudFunctions.V1.Model.AutomaticUpdatePolicy.t() | nil,
          :labels => map() | nil,
          :name => String.t() | nil,
          :sourceUploadUrl => String.t() | nil,
          :sourceToken => String.t() | nil,
          :eventTrigger => GoogleApi.CloudFunctions.V1.Model.EventTrigger.t() | nil,
          :environmentVariables => map() | nil,
          :description => String.t() | nil,
          :vpcConnector => String.t() | nil,
          :timeout => String.t() | nil,
          :onDeployUpdatePolicy =>
            GoogleApi.CloudFunctions.V1.Model.OnDeployUpdatePolicy.t() | nil,
          :maxInstances => integer() | nil,
          :buildName => String.t() | nil,
          :secretVolumes => list(GoogleApi.CloudFunctions.V1.Model.SecretVolume.t()) | nil,
          :sourceRepository => GoogleApi.CloudFunctions.V1.Model.SourceRepository.t() | nil,
          :buildWorkerPool => String.t() | nil,
          :dockerRegistry => String.t() | nil,
          :kmsKeyName => String.t() | nil,
          :availableMemoryMb => integer() | nil,
          :runtime => String.t() | nil,
          :sourceArchiveUrl => String.t() | nil,
          :vpcConnectorEgressSettings => String.t() | nil,
          :minInstances => integer() | nil,
          :secretEnvironmentVariables =>
            list(GoogleApi.CloudFunctions.V1.Model.SecretEnvVar.t()) | nil,
          :network => String.t() | nil,
          :buildEnvironmentVariables => map() | nil,
          :updateTime => DateTime.t() | nil,
          :ingressSettings => String.t() | nil,
          :serviceAccountEmail => String.t() | nil,
          :dockerRepository => String.t() | nil,
          :httpsTrigger => GoogleApi.CloudFunctions.V1.Model.HttpsTrigger.t() | nil,
          :status => String.t() | nil,
          :versionId => String.t() | nil,
          :buildId => String.t() | nil,
          :buildServiceAccount => String.t() | nil,
          :entryPoint => String.t() | nil
        }

  field(:automaticUpdatePolicy, as: GoogleApi.CloudFunctions.V1.Model.AutomaticUpdatePolicy)
  field(:labels, type: :map)
  field(:name)
  field(:sourceUploadUrl)
  field(:sourceToken)
  field(:eventTrigger, as: GoogleApi.CloudFunctions.V1.Model.EventTrigger)
  field(:environmentVariables, type: :map)
  field(:description)
  field(:vpcConnector)
  field(:timeout)
  field(:onDeployUpdatePolicy, as: GoogleApi.CloudFunctions.V1.Model.OnDeployUpdatePolicy)
  field(:maxInstances)
  field(:buildName)
  field(:secretVolumes, as: GoogleApi.CloudFunctions.V1.Model.SecretVolume, type: :list)
  field(:sourceRepository, as: GoogleApi.CloudFunctions.V1.Model.SourceRepository)
  field(:buildWorkerPool)
  field(:dockerRegistry)
  field(:kmsKeyName)
  field(:availableMemoryMb)
  field(:runtime)
  field(:sourceArchiveUrl)
  field(:vpcConnectorEgressSettings)
  field(:minInstances)

  field(:secretEnvironmentVariables,
    as: GoogleApi.CloudFunctions.V1.Model.SecretEnvVar,
    type: :list
  )

  field(:network)
  field(:buildEnvironmentVariables, type: :map)
  field(:updateTime, as: DateTime)
  field(:ingressSettings)
  field(:serviceAccountEmail)
  field(:dockerRepository)
  field(:httpsTrigger, as: GoogleApi.CloudFunctions.V1.Model.HttpsTrigger)
  field(:status)
  field(:versionId)
  field(:buildId)
  field(:buildServiceAccount)
  field(:entryPoint)
end

defimpl Poison.Decoder, for: GoogleApi.CloudFunctions.V1.Model.CloudFunction do
  def decode(value, options) do
    GoogleApi.CloudFunctions.V1.Model.CloudFunction.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.CloudFunctions.V1.Model.CloudFunction do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
