// This file is @generated by prost-build.
/// \[\#next-free-field: 6\]
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct IpTagging {
    /// The type of request the filter should apply to.
    #[prost(enumeration = "ip_tagging::RequestType", tag = "1")]
    pub request_type: i32,
    /// \[\#comment:TODO(ccaraman): Extend functionality to load IP tags from file system.
    /// Tracked by issue <https://github.com/envoyproxy/envoy/issues/2695\]>
    /// The set of IP tags for the filter.
    #[prost(message, repeated, tag = "4")]
    pub ip_tags: ::prost::alloc::vec::Vec<ip_tagging::IpTag>,
    /// Specify to which header the tags will be written.
    ///
    /// If left unspecified, the tags will be appended to the `x-envoy-ip-tags` header.
    #[prost(message, optional, tag = "5")]
    pub ip_tag_header: ::core::option::Option<ip_tagging::IpTagHeader>,
}
/// Nested message and enum types in `IPTagging`.
pub mod ip_tagging {
    /// Supplies the IP tag name and the IP address subnets.
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct IpTag {
        /// Specifies the IP tag name to apply.
        #[prost(string, tag = "1")]
        pub ip_tag_name: ::prost::alloc::string::String,
        /// A list of IP address subnets that will be tagged with
        /// ip_tag_name. Both IPv4 and IPv6 are supported.
        #[prost(message, repeated, tag = "2")]
        pub ip_list: ::prost::alloc::vec::Vec<
            super::super::super::super::super::super::config::core::v3::CidrRange,
        >,
    }
    /// Specify to which header the tags will be written.
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct IpTagHeader {
        /// Header to use for ip-tagging.
        ///
        ///
        /// This header will be sanitized based on the config in
        /// : ref:`action <envoy_v3_api_field_extensions.filters.http.ip_tagging.v3.IPTagging.IpTagHeader.action>`
        ///   rather than the defaults for x-envoy prefixed headers.
        #[prost(string, tag = "1")]
        pub header: ::prost::alloc::string::String,
        /// Control if the :ref:`header <envoy_v3_api_field_extensions.filters.http.ip_tagging.v3.IPTagging.IpTagHeader.header>`
        /// will be sanitized, or be appended to.
        ///
        /// Default: *SANITIZE*.
        #[prost(enumeration = "ip_tag_header::HeaderAction", tag = "2")]
        pub action: i32,
    }
    /// Nested message and enum types in `IpTagHeader`.
    pub mod ip_tag_header {
        /// Describes how to apply the tags to the headers.
        #[derive(
            Clone,
            Copy,
            Debug,
            PartialEq,
            Eq,
            Hash,
            PartialOrd,
            Ord,
            ::prost::Enumeration
        )]
        #[repr(i32)]
        pub enum HeaderAction {
            /// (DEFAULT) The header specified in :ref:`ip_tag_header <envoy_v3_api_field_extensions.filters.http.ip_tagging.v3.IPTagging.ip_tag_header>`
            /// will be dropped, before the tags are applied. The incoming header will be "sanitized" regardless of whether the request is internal or external.
            ///
            /// Note that the header will be visible unsanitized to any filters that are invoked before the ip-tag-header filter, unless it has an *x-envoy* prefix.
            Sanitize = 0,
            ///
            /// Tags will be appended to the header specified in
            /// : ref:`ip_tag_header <envoy_v3_api_field_extensions.filters.http.ip_tagging.v3.IPTagging.ip_tag_header>`.
            ///
            ///
            /// Please note that this could cause the header to retain values set by the http client regardless of whether the request is internal or external.
            AppendIfExistsOrAdd = 1,
        }
        impl HeaderAction {
            /// String value of the enum field names used in the ProtoBuf definition.
            ///
            /// The values are not transformed in any way and thus are considered stable
            /// (if the ProtoBuf definition does not change) and safe for programmatic use.
            pub fn as_str_name(&self) -> &'static str {
                match self {
                    Self::Sanitize => "SANITIZE",
                    Self::AppendIfExistsOrAdd => "APPEND_IF_EXISTS_OR_ADD",
                }
            }
            /// Creates an enum from field names used in the ProtoBuf definition.
            pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
                match value {
                    "SANITIZE" => Some(Self::Sanitize),
                    "APPEND_IF_EXISTS_OR_ADD" => Some(Self::AppendIfExistsOrAdd),
                    _ => None,
                }
            }
        }
    }
    ///
    /// The type of requests the filter should apply to. The supported types
    /// are internal, external or both. The
    /// : ref:`x-forwarded-for<config_http_conn_man_headers_x-forwarded-for_internal_origin>` header is
    ///   used to determine if a request is internal and will result in
    /// : ref:`x-envoy-internal<config_http_conn_man_headers_x-envoy-internal>`
    ///   being set. The filter defaults to both, and it will apply to all request types.
    #[derive(
        Clone,
        Copy,
        Debug,
        PartialEq,
        Eq,
        Hash,
        PartialOrd,
        Ord,
        ::prost::Enumeration
    )]
    #[repr(i32)]
    pub enum RequestType {
        /// Both external and internal requests will be tagged. This is the default value.
        Both = 0,
        /// Only internal requests will be tagged.
        Internal = 1,
        /// Only external requests will be tagged.
        External = 2,
    }
    impl RequestType {
        /// String value of the enum field names used in the ProtoBuf definition.
        ///
        /// The values are not transformed in any way and thus are considered stable
        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
        pub fn as_str_name(&self) -> &'static str {
            match self {
                Self::Both => "BOTH",
                Self::Internal => "INTERNAL",
                Self::External => "EXTERNAL",
            }
        }
        /// Creates an enum from field names used in the ProtoBuf definition.
        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
            match value {
                "BOTH" => Some(Self::Both),
                "INTERNAL" => Some(Self::Internal),
                "EXTERNAL" => Some(Self::External),
                _ => None,
            }
        }
    }
}
