// This file is @generated by prost-build.
/// Configuration for the Override Host Load Balancing policy.
///
/// This policy allows endpoint picking to be implemented in downstream HTTP filters. For example an ext_proc RPC to a service
/// that implements k8s proposal for AI gateway inferences extensions
/// <https://github.com/kubernetes-sigs/gateway-api-inference-extension/tree/main/docs/proposals/004-endpoint-picker-protocol>
/// can provide hosts for serving a request using Override Host load balancing policy.
///
/// This policy extracts selected override hosts from a list of `OverrideHostSource` (request headers, metadata, etc.).
///
/// The override host source must specify at least one host in `IP:Port` format or multiple hosts in `IP:Port,IP:Port,...`
/// format. For example `10.0.0.5:8080` or `\[2600:4040:5204::1574:24ae\]:80`. The IPv6 address is enclosed in square brackets.
///
/// For specific example, to support k8s gateway inference extensions, which uses the `x-gateway-destination-endpoint`
/// header or metadata value under the "envoy.lb" key for selected hosts, the Override Host load balancing policy should be
/// configured in the following way:
///
/// .. code-block:: yaml
///
/// ```text
/// override_host_sources:
///   - header: "x-gateway-destination-endpoint"
///   - metadata:
///       key: "envoy.lb"
///       path:
///       - key: "x-gateway-destination-endpoint"
/// ```
///
/// If no valid host in the override host list, then the specified fallback load balancing policy is used. This allows load
/// balancing to degrade to a a built in policy (i.e. Round Robin) in case external endpoint picker fails.
///
/// See the :ref:`load balancing architecture  overview<arch_overview_load_balancing_types>` for more information.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OverrideHost {
    /// A list of sources to get host addresses from. The host sources are searched in the order
    /// specified. The request is forwarded to the first address and subsequent addresses are used
    /// for request retries or hedging.
    /// Note that if an overridden host address is not present in the current endpoint set, it is
    /// skipped and the next found address is used. If there are not enough overridden addresses to
    /// satisfy all retry attempts the fallback load balancing policy is used to pick a host.
    #[prost(message, repeated, tag = "1")]
    pub override_host_sources: ::prost::alloc::vec::Vec<
        override_host::OverrideHostSource,
    >,
    /// The child LB policy to use in case neither header nor metadata with selected
    /// hosts is present.
    #[prost(message, optional, tag = "3")]
    pub fallback_policy: ::core::option::Option<
        super::super::super::super::config::cluster::v3::LoadBalancingPolicy,
    >,
}
/// Nested message and enum types in `OverrideHost`.
pub mod override_host {
    #[derive(Clone, PartialEq, ::prost::Message)]
    pub struct OverrideHostSource {
        /// The header to get the override host addresses.
        ///
        /// Only one of the header or metadata field could be set.
        #[prost(string, tag = "1")]
        pub header: ::prost::alloc::string::String,
        /// The metadata key to get the override host addresses from the request dynamic metadata. If
        /// set this field then it will take precedence over the header field.
        ///
        /// Only one of the header or metadata field could be set.
        #[prost(message, optional, tag = "2")]
        pub metadata: ::core::option::Option<
            super::super::super::super::super::r#type::metadata::v3::MetadataKey,
        >,
    }
}
