use serde::{Deserialize, Serialize}; /*
                                      * Service Control API
                                      *
                                      * Provides admission control and telemetry reporting for services integrated with Service Infrastructure.
                                      *
                                      * The version of the OpenAPI document: v1
                                      *
                                      * Generated by: https://openapi-generator.tech
                                      */

use crate::google_rest_apis::servicecontrol_v1::models;

/// RequestMetadata : Metadata about the request.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct RequestMetadata {
    /// 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.
    #[serde(rename = "callerIp", skip_serializing_if = "Option::is_none")]
    pub caller_ip: Option<String>,
    /// 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\"
    #[serde(rename = "callerNetwork", skip_serializing_if = "Option::is_none")]
    pub caller_network: Option<String>,
    /// 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.
    #[serde(
        rename = "callerSuppliedUserAgent",
        skip_serializing_if = "Option::is_none"
    )]
    pub caller_supplied_user_agent: Option<String>,
    #[serde(
        rename = "destinationAttributes",
        skip_serializing_if = "Option::is_none"
    )]
    pub destination_attributes: Option<Box<models::Peer>>,
    #[serde(rename = "requestAttributes", skip_serializing_if = "Option::is_none")]
    pub request_attributes: Option<Box<models::Request>>,
}

impl RequestMetadata {
    /// Metadata about the request.
    pub fn new() -> RequestMetadata {
        RequestMetadata {
            caller_ip: None,
            caller_network: None,
            caller_supplied_user_agent: None,
            destination_attributes: None,
            request_attributes: None,
        }
    }
}
