# 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.SecretVolume do
  @moduledoc """
  Configuration for a secret volume. It has the information necessary to fetch the secret value from secret manager and make it available as files mounted at the requested paths within the application container. Secret value is not a part of the configuration. Every filesystem read operation performs a lookup in secret manager to retrieve the secret value.

  ## Attributes

  *   `mountPath` (*type:* `String.t`, *default:* `nil`) - The path within the container to mount the secret volume. For example, setting the mount_path as `/etc/secrets` would mount the secret value files under the `/etc/secrets` directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount paths: /etc/secrets Restricted mount paths: /cloudsql, /dev/log, /pod, /proc, /var/log
  *   `projectId` (*type:* `String.t`, *default:* `nil`) - Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
  *   `secret` (*type:* `String.t`, *default:* `nil`) - Name of the secret in secret manager (not the full resource name).
  *   `versions` (*type:* `list(GoogleApi.CloudFunctions.V1.Model.SecretVersion.t)`, *default:* `nil`) - List of secret versions to mount for this secret. If empty, the `latest` version of the secret will be made available in a file named after the secret under the mount point.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :mountPath => String.t() | nil,
          :projectId => String.t() | nil,
          :secret => String.t() | nil,
          :versions => list(GoogleApi.CloudFunctions.V1.Model.SecretVersion.t()) | nil
        }

  field(:mountPath)
  field(:projectId)
  field(:secret)
  field(:versions, as: GoogleApi.CloudFunctions.V1.Model.SecretVersion, type: :list)
end

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

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