# 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.ServiceControl.V2.Model.RequestMetadata do
  @moduledoc """
  Metadata about the request.

  ## Attributes

  *   `callerIp` (*type:* `String.t`, *default:* `nil`) - The IP address of the caller. For a caller from the internet, this will be the public IPv4 or IPv6 address. For calls made from inside Google's internal production network from one GCP service to another, `caller_ip` will be redacted to "private". For a caller from a Compute Engine VM with a external IP address, `caller_ip` will be the VM's external IP address. For a caller from a Compute Engine VM without a external IP address, if the VM is in the same organization (or project) as the accessed resource, `caller_ip` will be the VM's internal IPv4 address, otherwise `caller_ip` will be redacted to "gce-internal-ip". See https://cloud.google.com/compute/docs/vpc/ for more information.
  *   `callerNetwork` (*type:* `String.t`, *default:* `nil`) - The network of the caller. Set only if the network host project is part of the same GCP organization (or project) as the accessed resource. See https://cloud.google.com/compute/docs/vpc/ for more information. This is a scheme-less URI full resource name. For example: "//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_ID"
  *   `callerSuppliedUserAgent` (*type:* `String.t`, *default:* `nil`) - The user agent of the caller. This information is not authenticated and should be treated accordingly. For example: + `google-api-python-client/1.4.0`: The request was made by the Google API client for Python. + `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`: The request was made by the Google Cloud SDK CLI (gcloud). + `AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project`: The request was made from the `my-project` App Engine app.
  *   `destinationAttributes` (*type:* `GoogleApi.ServiceControl.V2.Model.Peer.t`, *default:* `nil`) - The destination of a network activity, such as accepting a TCP connection. In a multi hop network activity, the destination represents the receiver of the last hop. Only two fields are used in this message, Peer.port and Peer.ip. These fields are optionally populated by those services utilizing the IAM condition feature.
  *   `requestAttributes` (*type:* `GoogleApi.ServiceControl.V2.Model.Request.t`, *default:* `nil`) - Request attributes used in IAM condition evaluation. This field contains request attributes like request time and access levels associated with the request. To get the whole view of the attributes used in IAM condition evaluation, the user must also look into `AuditLog.authentication_info.resource_attributes`.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :callerIp => String.t() | nil,
          :callerNetwork => String.t() | nil,
          :callerSuppliedUserAgent => String.t() | nil,
          :destinationAttributes => GoogleApi.ServiceControl.V2.Model.Peer.t() | nil,
          :requestAttributes => GoogleApi.ServiceControl.V2.Model.Request.t() | nil
        }

  field(:callerIp)
  field(:callerNetwork)
  field(:callerSuppliedUserAgent)
  field(:destinationAttributes, as: GoogleApi.ServiceControl.V2.Model.Peer)
  field(:requestAttributes, as: GoogleApi.ServiceControl.V2.Model.Request)
end

defimpl Poison.Decoder, for: GoogleApi.ServiceControl.V2.Model.RequestMetadata do
  def decode(value, options) do
    GoogleApi.ServiceControl.V2.Model.RequestMetadata.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.ServiceControl.V2.Model.RequestMetadata do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
