All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.envoyproxy.envoy.config.cluster.v3.Cluster.scala Maven / Gradle / Ivy

There is a newer version: 1.23.0-dev-f04150-1
Show newest version
// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package io.envoyproxy.envoy.config.cluster.v3

/** Configuration for a single upstream cluster.
  * [#next-free-field: 57]
  *
  * @param transportSocketMatches
  *   Configuration to use different transport sockets for different endpoints.
  *   The entry of *envoy.transport_socket_match* in the
  *   :ref:`LbEndpoint.Metadata <envoy_v3_api_field_config.endpoint.v3.LbEndpoint.metadata>`
  *   is used to match against the transport sockets as they appear in the list. The first
  *   :ref:`match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` is used.
  *   For example, with the following match
  *  
  *   .. code-block:: yaml
  *  
  *    transport_socket_matches:
  *    - name: "enableMTLS"
  *      match:
  *        acceptMTLS: true
  *      transport_socket:
  *        name: envoy.transport_sockets.tls
  *        config: { ... } # tls socket configuration
  *    - name: "defaultToPlaintext"
  *      match: {}
  *      transport_socket:
  *        name: envoy.transport_sockets.raw_buffer
  *  
  *   Connections to the endpoints whose metadata value under *envoy.transport_socket_match*
  *   having "acceptMTLS"/"true" key/value pair use the "enableMTLS" socket configuration.
  *  
  *   If a :ref:`socket match <envoy_v3_api_msg_config.cluster.v3.Cluster.TransportSocketMatch>` with empty match
  *   criteria is provided, that always match any endpoint. For example, the "defaultToPlaintext"
  *   socket match in case above.
  *  
  *   If an endpoint metadata's value under *envoy.transport_socket_match* does not match any
  *   *TransportSocketMatch*, socket configuration fallbacks to use the *tls_context* or
  *   *transport_socket* specified in this cluster.
  *  
  *   This field allows gradual and flexible transport socket configuration changes.
  *  
  *   The metadata of endpoints in EDS can indicate transport socket capabilities. For example,
  *   an endpoint's metadata can have two key value pairs as "acceptMTLS": "true",
  *   "acceptPlaintext": "true". While some other endpoints, only accepting plaintext traffic
  *   has "acceptPlaintext": "true" metadata information.
  *  
  *   Then the xDS server can configure the CDS to a client, Envoy A, to send mutual TLS
  *   traffic for endpoints with "acceptMTLS": "true", by adding a corresponding
  *   *TransportSocketMatch* in this field. Other client Envoys receive CDS without
  *   *transport_socket_match* set, and still send plain text traffic to the same cluster.
  *  
  *   This field can be used to specify custom transport socket configurations for health
  *   checks by adding matching key/value pairs in a health check's
  *   :ref:`transport socket match criteria <envoy_v3_api_field_config.core.v3.HealthCheck.transport_socket_match_criteria>` field.
  *  
  *   [#comment:TODO(incfly): add a detailed architecture doc on intended usage.]
  * @param name
  *   Supplies the name of the cluster which must be unique across all clusters.
  *   The cluster name is used when emitting
  *   :ref:`statistics <config_cluster_manager_cluster_stats>` if :ref:`alt_stat_name
  *   <envoy_v3_api_field_config.cluster.v3.Cluster.alt_stat_name>` is not provided.
  *   Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics.
  * @param altStatName
  *   An optional alternative to the cluster name to be used for observability. This name is used
  *   emitting stats for the cluster and access logging the cluster name. This will appear as
  *   additional information in configuration dumps of a cluster's current status as
  *   :ref:`observability_name <envoy_v3_api_field_admin.v3.ClusterStatus.observability_name>`
  *   and as an additional tag "upstream_cluster.name" while tracing. Note: Any ``:`` in the name
  *   will be converted to ``_`` when emitting statistics. This should not be confused with
  *   :ref:`Router Filter Header <config_http_filters_router_x-envoy-upstream-alt-stat-name>`.
  * @param edsClusterConfig
  *   Configuration to use for EDS updates for the Cluster.
  * @param connectTimeout
  *   The timeout for new network connections to hosts in the cluster.
  *   If not set, a default value of 5s will be used.
  * @param perConnectionBufferLimitBytes
  *   Soft limit on size of the cluster’s connections read and write buffers. If
  *   unspecified, an implementation defined default is applied (1MiB).
  * @param lbPolicy
  *   The :ref:`load balancer type <arch_overview_load_balancing_types>` to use
  *   when picking a host in the cluster.
  * @param loadAssignment
  *   Setting this is required for specifying members of
  *   :ref:`STATIC<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STATIC>`,
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
  *   or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` clusters.
  *   This field supersedes the *hosts* field in the v2 API.
  *  
  *   .. attention::
  *  
  *     Setting this allows non-EDS cluster types to contain embedded EDS equivalent
  *     :ref:`endpoint assignments<envoy_v3_api_msg_config.endpoint.v3.ClusterLoadAssignment>`.
  * @param healthChecks
  *   Optional :ref:`active health checking <arch_overview_health_checking>`
  *   configuration for the cluster. If no
  *   configuration is specified no health checking will be done and all cluster
  *   members will be considered healthy at all times.
  * @param maxRequestsPerConnection
  *   Optional maximum requests for a single upstream connection. This parameter
  *   is respected by both the HTTP/1.1 and HTTP/2 connection pool
  *   implementations. If not specified, there is no limit. Setting this
  *   parameter to 1 will effectively disable keep alive.
  *  
  *   .. attention::
  *     This field has been deprecated in favor of the :ref:`max_requests_per_connection <envoy_v3_api_field_config.core.v3.HttpProtocolOptions.max_requests_per_connection>` field.
  * @param circuitBreakers
  *   Optional :ref:`circuit breaking <arch_overview_circuit_break>` for the cluster.
  * @param upstreamHttpProtocolOptions
  *   HTTP protocol options that are applied only to upstream HTTP connections.
  *   These options apply to all HTTP versions.
  *   This has been deprecated in favor of
  *   :ref:`upstream_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
  *   in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
  *   upstream_http_protocol_options can be set via the cluster's
  *   :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
  *   See :ref:`upstream_http_protocol_options
  *   <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
  *   for example usage.
  * @param commonHttpProtocolOptions
  *   Additional options when handling HTTP requests upstream. These options will be applicable to
  *   both HTTP1 and HTTP2 requests.
  *   This has been deprecated in favor of
  *   :ref:`common_http_protocol_options <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.common_http_protocol_options>`
  *   in the :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
  *   common_http_protocol_options can be set via the cluster's
  *   :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
  *   See :ref:`upstream_http_protocol_options
  *   <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
  *   for example usage.
  * @param httpProtocolOptions
  *   Additional options when handling HTTP1 requests.
  *   This has been deprecated in favor of http_protocol_options fields in the
  *   :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
  *   http_protocol_options can be set via the cluster's
  *   :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
  *   See :ref:`upstream_http_protocol_options
  *   <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
  *   for example usage.
  * @param http2ProtocolOptions
  *   Even if default HTTP2 protocol options are desired, this field must be
  *   set so that Envoy will assume that the upstream supports HTTP/2 when
  *   making new HTTP connection pool connections. Currently, Envoy only
  *   supports prior knowledge for upstream connections. Even if TLS is used
  *   with ALPN, `http2_protocol_options` must be specified. As an aside this allows HTTP/2
  *   connections to happen over plain text.
  *   This has been deprecated in favor of http2_protocol_options fields in the
  *   :ref:`http_protocol_options <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>`
  *   message. http2_protocol_options can be set via the cluster's
  *   :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
  *   See :ref:`upstream_http_protocol_options
  *   <envoy_v3_api_field_extensions.upstreams.http.v3.HttpProtocolOptions.upstream_http_protocol_options>`
  *   for example usage.
  * @param typedExtensionProtocolOptions
  *   The extension_protocol_options field is used to provide extension-specific protocol options
  *   for upstream connections. The key should match the extension filter name, such as
  *   "envoy.filters.network.thrift_proxy". See the extension's documentation for details on
  *   specific options.
  *   [#next-major-version: make this a list of typed extensions.]
  * @param dnsRefreshRate
  *   If the DNS refresh rate is specified and the cluster type is either
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
  *   or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
  *   this value is used as the cluster’s DNS refresh
  *   rate. The value configured must be at least 1ms. If this setting is not specified, the
  *   value defaults to 5000ms. For cluster types other than
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
  *   and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
  *   this setting is ignored.
  * @param dnsFailureRefreshRate
  *   If the DNS failure refresh rate is specified and the cluster type is either
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
  *   or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
  *   this is used as the cluster’s DNS refresh rate when requests are failing. If this setting is
  *   not specified, the failure refresh rate defaults to the DNS refresh rate. For cluster types
  *   other than :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
  *   :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>` this setting is
  *   ignored.
  * @param respectDnsTtl
  *   Optional configuration for setting cluster's DNS refresh rate. If the value is set to true,
  *   cluster's DNS refresh rate will be set to resource record's TTL which comes from DNS
  *   resolution.
  * @param dnsLookupFamily
  *   The DNS IP address resolution policy. If this setting is not specified, the
  *   value defaults to
  *   :ref:`AUTO<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DnsLookupFamily.AUTO>`.
  * @param dnsResolvers
  *   If DNS resolvers are specified and the cluster type is either
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
  *   or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
  *   this value is used to specify the cluster’s dns resolvers.
  *   If this setting is not specified, the value defaults to the default
  *   resolver, which uses /etc/resolv.conf for configuration. For cluster types
  *   other than
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`
  *   and :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`
  *   this setting is ignored.
  *   This field is deprecated in favor of *dns_resolution_config*
  *   which aggregates all of the DNS resolver configuration in a single message.
  * @param useTcpForDnsLookups
  *   Always use TCP queries instead of UDP queries for DNS lookups.
  *   This field is deprecated in favor of *dns_resolution_config*
  *   which aggregates all of the DNS resolver configuration in a single message.
  * @param dnsResolutionConfig
  *   DNS resolution configuration which includes the underlying dns resolver addresses and options.
  *   This field is deprecated in favor of
  *   :ref:`typed_dns_resolver_config <envoy_v3_api_field_config.cluster.v3.Cluster.typed_dns_resolver_config>`.
  * @param typedDnsResolverConfig
  *   DNS resolver type configuration extension. This extension can be used to configure c-ares, apple,
  *   or any other DNS resolver types and the related parameters.
  *   For example, an object of
  *   :ref:`CaresDnsResolverConfig <envoy_v3_api_msg_extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig>`
  *   can be packed into this *typed_dns_resolver_config*. This configuration replaces the
  *   :ref:`dns_resolution_config <envoy_v3_api_field_config.cluster.v3.Cluster.dns_resolution_config>`
  *   configuration.
  *   During the transition period when both *dns_resolution_config* and *typed_dns_resolver_config* exists,
  *   when *typed_dns_resolver_config* is in place, Envoy will use it and ignore *dns_resolution_config*.
  *   When *typed_dns_resolver_config* is missing, the default behavior is in place.
  *   [#extension-category: envoy.network.dns_resolver]
  * @param waitForWarmOnInit
  *   Optional configuration for having cluster readiness block on warm-up. Currently, only applicable for
  *   :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>`,
  *   or :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`.
  *   If true, cluster readiness blocks on warm-up. If false, the cluster will complete
  *   initialization whether or not warm-up has completed. Defaults to true.
  * @param outlierDetection
  *   If specified, outlier detection will be enabled for this upstream cluster.
  *   Each of the configuration values can be overridden via
  *   :ref:`runtime values <config_cluster_manager_cluster_runtime_outlier_detection>`.
  * @param cleanupInterval
  *   The interval for removing stale hosts from a cluster type
  *   :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`.
  *   Hosts are considered stale if they have not been used
  *   as upstream destinations during this interval. New hosts are added
  *   to original destination clusters on demand as new connections are
  *   redirected to Envoy, causing the number of hosts in the cluster to
  *   grow over time. Hosts that are not stale (they are actively used as
  *   destinations) are kept in the cluster, which allows connections to
  *   them remain open, saving the latency that would otherwise be spent
  *   on opening new connections. If this setting is not specified, the
  *   value defaults to 5000ms. For cluster types other than
  *   :ref:`ORIGINAL_DST<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.ORIGINAL_DST>`
  *   this setting is ignored.
  * @param upstreamBindConfig
  *   Optional configuration used to bind newly established upstream connections.
  *   This overrides any bind_config specified in the bootstrap proto.
  *   If the address and port are empty, no bind will be performed.
  * @param lbSubsetConfig
  *   Configuration for load balancing subsetting.
  * @param commonLbConfig
  *   Common configuration for all load balancer implementations.
  * @param transportSocket
  *   Optional custom transport socket implementation to use for upstream connections.
  *   To setup TLS, set a transport socket with name `envoy.transport_sockets.tls` and
  *   :ref:`UpstreamTlsContexts <envoy_v3_api_msg_extensions.transport_sockets.tls.v3.UpstreamTlsContext>` in the `typed_config`.
  *   If no transport socket configuration is specified, new connections
  *   will be set up with plaintext.
  * @param metadata
  *   The Metadata field can be used to provide additional information about the
  *   cluster. It can be used for stats, logging, and varying filter behavior.
  *   Fields should use reverse DNS notation to denote which entity within Envoy
  *   will need the information. For instance, if the metadata is intended for
  *   the Router filter, the filter name should be specified as *envoy.filters.http.router*.
  * @param protocolSelection
  *   Determines how Envoy selects the protocol used to speak to upstream hosts.
  *   This has been deprecated in favor of setting explicit protocol selection
  *   in the :ref:`http_protocol_options
  *   <envoy_v3_api_msg_extensions.upstreams.http.v3.HttpProtocolOptions>` message.
  *   http_protocol_options can be set via the cluster's
  *   :ref:`extension_protocol_options<envoy_v3_api_field_config.cluster.v3.Cluster.typed_extension_protocol_options>`.
  * @param upstreamConnectionOptions
  *   Optional options for upstream connections.
  * @param closeConnectionsOnHostHealthFailure
  *   If an upstream host becomes unhealthy (as determined by the configured health checks
  *   or outlier detection), immediately close all connections to the failed host.
  *  
  *   .. note::
  *  
  *     This is currently only supported for connections created by tcp_proxy.
  *  
  *   .. note::
  *  
  *     The current implementation of this feature closes all connections immediately when
  *     the unhealthy status is detected. If there are a large number of connections open
  *     to an upstream host that becomes unhealthy, Envoy may spend a substantial amount of
  *     time exclusively closing these connections, and not processing any other traffic.
  * @param ignoreHealthOnHostRemoval
  *   If set to true, Envoy will ignore the health value of a host when processing its removal
  *   from service discovery. This means that if active health checking is used, Envoy will *not*
  *   wait for the endpoint to go unhealthy before removing it.
  * @param filters
  *   An (optional) network filter chain, listed in the order the filters should be applied.
  *   The chain will be applied to all outgoing connections that Envoy makes to the upstream
  *   servers of this cluster.
  * @param loadBalancingPolicy
  *   If this field is set and is supported by the client, it will supersede the value of
  *   :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
  * @param lrsServer
  *   [#not-implemented-hide:]
  *   If present, tells the client where to send load reports via LRS. If not present, the
  *   client will fall back to a client-side default, which may be either (a) don't send any
  *   load reports or (b) send load reports for all clusters to a single default server
  *   (which may be configured in the bootstrap file).
  *  
  *   Note that if multiple clusters point to the same LRS server, the client may choose to
  *   create a separate stream for each cluster or it may choose to coalesce the data for
  *   multiple clusters onto a single stream. Either way, the client must make sure to send
  *   the data for any given cluster on no more than one stream.
  *  
  *   [#next-major-version: In the v3 API, we should consider restructuring this somehow,
  *   maybe by allowing LRS to go on the ADS stream, or maybe by moving some of the negotiation
  *   from the LRS stream here.]
  * @param trackTimeoutBudgets
  *   If track_timeout_budgets is true, the :ref:`timeout budget histograms
  *   <config_cluster_manager_cluster_stats_timeout_budgets>` will be published for each
  *   request. These show what percentage of a request's per try and global timeout was used. A value
  *   of 0 would indicate that none of the timeout was used or that the timeout was infinite. A value
  *   of 100 would indicate that the request took the entirety of the timeout given to it.
  *  
  *   .. attention::
  *  
  *     This field has been deprecated in favor of `timeout_budgets`, part of
  *     :ref:`track_cluster_stats <envoy_v3_api_field_config.cluster.v3.Cluster.track_cluster_stats>`.
  * @param upstreamConfig
  *   Optional customization and configuration of upstream connection pool, and upstream type.
  *  
  *   Currently this field only applies for HTTP traffic but is designed for eventual use for custom
  *   TCP upstreams.
  *  
  *   For HTTP traffic, Envoy will generally take downstream HTTP and send it upstream as upstream
  *   HTTP, using the http connection pool and the codec from `http2_protocol_options`
  *  
  *   For routes where CONNECT termination is configured, Envoy will take downstream CONNECT
  *   requests and forward the CONNECT payload upstream over raw TCP using the tcp connection pool.
  *  
  *   The default pool used is the generic connection pool which creates the HTTP upstream for most
  *   HTTP requests, and the TCP upstream if CONNECT termination is configured.
  *  
  *   If users desire custom connection pool or upstream behavior, for example terminating
  *   CONNECT only if a custom filter indicates it is appropriate, the custom factories
  *   can be registered and configured here.
  *   [#extension-category: envoy.upstreams]
  * @param trackClusterStats
  *   Configuration to track optional cluster stats.
  * @param preconnectPolicy
  *   Preconnect configuration for this cluster.
  * @param connectionPoolPerDownstreamConnection
  *   If `connection_pool_per_downstream_connection` is true, the cluster will use a separate
  *   connection pool for every downstream connection
  */
@SerialVersionUID(0L)
final case class Cluster(
    transportSocketMatches: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch] = _root_.scala.Seq.empty,
    name: _root_.scala.Predef.String = "",
    altStatName: _root_.scala.Predef.String = "",
    clusterDiscoveryType: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Empty,
    edsClusterConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] = _root_.scala.None,
    connectTimeout: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
    perConnectionBufferLimitBytes: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None,
    lbPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.ROUND_ROBIN,
    loadAssignment: _root_.scala.Option[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment] = _root_.scala.None,
    healthChecks: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.HealthCheck] = _root_.scala.Seq.empty,
    @scala.deprecated(message="Marked as deprecated in proto file", "") maxRequestsPerConnection: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None,
    circuitBreakers: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") upstreamHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") commonHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") httpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") http2ProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions] = _root_.scala.None,
    typedExtensionProtocolOptions: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, com.google.protobuf.any.Any] = _root_.scala.collection.immutable.Map.empty,
    dnsRefreshRate: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
    dnsFailureRefreshRate: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] = _root_.scala.None,
    respectDnsTtl: _root_.scala.Boolean = false,
    dnsLookupFamily: io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.AUTO,
    @scala.deprecated(message="Marked as deprecated in proto file", "") dnsResolvers: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.Address] = _root_.scala.Seq.empty,
    @scala.deprecated(message="Marked as deprecated in proto file", "") useTcpForDnsLookups: _root_.scala.Boolean = false,
    @scala.deprecated(message="Marked as deprecated in proto file", "") dnsResolutionConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig] = _root_.scala.None,
    typedDnsResolverConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = _root_.scala.None,
    waitForWarmOnInit: _root_.scala.Option[_root_.scala.Boolean] = _root_.scala.None,
    outlierDetection: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection] = _root_.scala.None,
    cleanupInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
    upstreamBindConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.BindConfig] = _root_.scala.None,
    lbSubsetConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] = _root_.scala.None,
    lbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.Empty,
    commonLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] = _root_.scala.None,
    transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket] = _root_.scala.None,
    metadata: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Metadata] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") protocolSelection: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.USE_CONFIGURED_PROTOCOL,
    upstreamConnectionOptions: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions] = _root_.scala.None,
    closeConnectionsOnHostHealthFailure: _root_.scala.Boolean = false,
    ignoreHealthOnHostRemoval: _root_.scala.Boolean = false,
    filters: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Filter] = _root_.scala.Seq.empty,
    loadBalancingPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy] = _root_.scala.None,
    lrsServer: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource] = _root_.scala.None,
    @scala.deprecated(message="Marked as deprecated in proto file", "") trackTimeoutBudgets: _root_.scala.Boolean = false,
    upstreamConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = _root_.scala.None,
    trackClusterStats: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats] = _root_.scala.None,
    preconnectPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] = _root_.scala.None,
    connectionPoolPerDownstreamConnection: _root_.scala.Boolean = false,
    unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
    ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Cluster] {
    @transient
    private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
    private[this] def __computeSerializedSize(): _root_.scala.Int = {
      var __size = 0
      transportSocketMatches.foreach { __item =>
        val __value = __item
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      
      {
        val __value = name
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
        }
      };
      
      {
        val __value = altStatName
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(28, __value)
        }
      };
      if (clusterDiscoveryType.`type`.isDefined) {
        val __value = clusterDiscoveryType.`type`.get.value
        __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(2, __value)
      };
      if (clusterDiscoveryType.clusterType.isDefined) {
        val __value = clusterDiscoveryType.clusterType.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (edsClusterConfig.isDefined) {
        val __value = edsClusterConfig.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (connectTimeout.isDefined) {
        val __value = connectTimeout.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (perConnectionBufferLimitBytes.isDefined) {
        val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toBase(perConnectionBufferLimitBytes.get)
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = lbPolicy.value
        if (__value != 0) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(6, __value)
        }
      };
      if (loadAssignment.isDefined) {
        val __value = loadAssignment.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      healthChecks.foreach { __item =>
        val __value = __item
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      if (maxRequestsPerConnection.isDefined) {
        val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toBase(maxRequestsPerConnection.get)
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (circuitBreakers.isDefined) {
        val __value = circuitBreakers.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (upstreamHttpProtocolOptions.isDefined) {
        val __value = upstreamHttpProtocolOptions.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (commonHttpProtocolOptions.isDefined) {
        val __value = commonHttpProtocolOptions.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (httpProtocolOptions.isDefined) {
        val __value = httpProtocolOptions.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (http2ProtocolOptions.isDefined) {
        val __value = http2ProtocolOptions.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      typedExtensionProtocolOptions.foreach { __item =>
        val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toBase(__item)
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      if (dnsRefreshRate.isDefined) {
        val __value = dnsRefreshRate.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (dnsFailureRefreshRate.isDefined) {
        val __value = dnsFailureRefreshRate.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = respectDnsTtl
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(39, __value)
        }
      };
      
      {
        val __value = dnsLookupFamily.value
        if (__value != 0) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(17, __value)
        }
      };
      dnsResolvers.foreach { __item =>
        val __value = __item
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      
      {
        val __value = useTcpForDnsLookups
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(45, __value)
        }
      };
      if (dnsResolutionConfig.isDefined) {
        val __value = dnsResolutionConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (typedDnsResolverConfig.isDefined) {
        val __value = typedDnsResolverConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (waitForWarmOnInit.isDefined) {
        val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toBase(waitForWarmOnInit.get)
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (outlierDetection.isDefined) {
        val __value = outlierDetection.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (cleanupInterval.isDefined) {
        val __value = cleanupInterval.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (upstreamBindConfig.isDefined) {
        val __value = upstreamBindConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbSubsetConfig.isDefined) {
        val __value = lbSubsetConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbConfig.ringHashLbConfig.isDefined) {
        val __value = lbConfig.ringHashLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbConfig.maglevLbConfig.isDefined) {
        val __value = lbConfig.maglevLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbConfig.originalDstLbConfig.isDefined) {
        val __value = lbConfig.originalDstLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbConfig.leastRequestLbConfig.isDefined) {
        val __value = lbConfig.leastRequestLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lbConfig.roundRobinLbConfig.isDefined) {
        val __value = lbConfig.roundRobinLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (commonLbConfig.isDefined) {
        val __value = commonLbConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (transportSocket.isDefined) {
        val __value = transportSocket.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (metadata.isDefined) {
        val __value = metadata.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = protocolSelection.value
        if (__value != 0) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(26, __value)
        }
      };
      if (upstreamConnectionOptions.isDefined) {
        val __value = upstreamConnectionOptions.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = closeConnectionsOnHostHealthFailure
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(31, __value)
        }
      };
      
      {
        val __value = ignoreHealthOnHostRemoval
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(32, __value)
        }
      };
      filters.foreach { __item =>
        val __value = __item
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      }
      if (loadBalancingPolicy.isDefined) {
        val __value = loadBalancingPolicy.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (lrsServer.isDefined) {
        val __value = lrsServer.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = trackTimeoutBudgets
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(47, __value)
        }
      };
      if (upstreamConfig.isDefined) {
        val __value = upstreamConfig.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (trackClusterStats.isDefined) {
        val __value = trackClusterStats.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (preconnectPolicy.isDefined) {
        val __value = preconnectPolicy.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = connectionPoolPerDownstreamConnection
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(51, __value)
        }
      };
      __size += unknownFields.serializedSize
      __size
    }
    override def serializedSize: _root_.scala.Int = {
      var __size = __serializedSizeMemoized
      if (__size == 0) {
        __size = __computeSerializedSize() + 1
        __serializedSizeMemoized = __size
      }
      __size - 1
      
    }
    def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
      {
        val __v = name
        if (!__v.isEmpty) {
          _output__.writeString(1, __v)
        }
      };
      clusterDiscoveryType.`type`.foreach { __v =>
        val __m = __v.value
        _output__.writeEnum(2, __m)
      };
      edsClusterConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(3, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      connectTimeout.foreach { __v =>
        val __m = __v
        _output__.writeTag(4, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      perConnectionBufferLimitBytes.foreach { __v =>
        val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toBase(__v)
        _output__.writeTag(5, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = lbPolicy.value
        if (__v != 0) {
          _output__.writeEnum(6, __v)
        }
      };
      healthChecks.foreach { __v =>
        val __m = __v
        _output__.writeTag(8, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      maxRequestsPerConnection.foreach { __v =>
        val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toBase(__v)
        _output__.writeTag(9, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      circuitBreakers.foreach { __v =>
        val __m = __v
        _output__.writeTag(10, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      httpProtocolOptions.foreach { __v =>
        val __m = __v
        _output__.writeTag(13, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      http2ProtocolOptions.foreach { __v =>
        val __m = __v
        _output__.writeTag(14, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      dnsRefreshRate.foreach { __v =>
        val __m = __v
        _output__.writeTag(16, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = dnsLookupFamily.value
        if (__v != 0) {
          _output__.writeEnum(17, __v)
        }
      };
      dnsResolvers.foreach { __v =>
        val __m = __v
        _output__.writeTag(18, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      outlierDetection.foreach { __v =>
        val __m = __v
        _output__.writeTag(19, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      cleanupInterval.foreach { __v =>
        val __m = __v
        _output__.writeTag(20, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      upstreamBindConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(21, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lbSubsetConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(22, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lbConfig.ringHashLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(23, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      transportSocket.foreach { __v =>
        val __m = __v
        _output__.writeTag(24, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      metadata.foreach { __v =>
        val __m = __v
        _output__.writeTag(25, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = protocolSelection.value
        if (__v != 0) {
          _output__.writeEnum(26, __v)
        }
      };
      commonLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(27, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = altStatName
        if (!__v.isEmpty) {
          _output__.writeString(28, __v)
        }
      };
      commonHttpProtocolOptions.foreach { __v =>
        val __m = __v
        _output__.writeTag(29, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      upstreamConnectionOptions.foreach { __v =>
        val __m = __v
        _output__.writeTag(30, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = closeConnectionsOnHostHealthFailure
        if (__v != false) {
          _output__.writeBool(31, __v)
        }
      };
      {
        val __v = ignoreHealthOnHostRemoval
        if (__v != false) {
          _output__.writeBool(32, __v)
        }
      };
      loadAssignment.foreach { __v =>
        val __m = __v
        _output__.writeTag(33, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lbConfig.originalDstLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(34, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      typedExtensionProtocolOptions.foreach { __v =>
        val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toBase(__v)
        _output__.writeTag(36, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lbConfig.leastRequestLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(37, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      clusterDiscoveryType.clusterType.foreach { __v =>
        val __m = __v
        _output__.writeTag(38, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = respectDnsTtl
        if (__v != false) {
          _output__.writeBool(39, __v)
        }
      };
      filters.foreach { __v =>
        val __m = __v
        _output__.writeTag(40, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      loadBalancingPolicy.foreach { __v =>
        val __m = __v
        _output__.writeTag(41, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lrsServer.foreach { __v =>
        val __m = __v
        _output__.writeTag(42, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      transportSocketMatches.foreach { __v =>
        val __m = __v
        _output__.writeTag(43, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      dnsFailureRefreshRate.foreach { __v =>
        val __m = __v
        _output__.writeTag(44, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = useTcpForDnsLookups
        if (__v != false) {
          _output__.writeBool(45, __v)
        }
      };
      upstreamHttpProtocolOptions.foreach { __v =>
        val __m = __v
        _output__.writeTag(46, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = trackTimeoutBudgets
        if (__v != false) {
          _output__.writeBool(47, __v)
        }
      };
      upstreamConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(48, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      trackClusterStats.foreach { __v =>
        val __m = __v
        _output__.writeTag(49, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      preconnectPolicy.foreach { __v =>
        val __m = __v
        _output__.writeTag(50, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = connectionPoolPerDownstreamConnection
        if (__v != false) {
          _output__.writeBool(51, __v)
        }
      };
      lbConfig.maglevLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(52, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      dnsResolutionConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(53, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      waitForWarmOnInit.foreach { __v =>
        val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toBase(__v)
        _output__.writeTag(54, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      typedDnsResolverConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(55, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      lbConfig.roundRobinLbConfig.foreach { __v =>
        val __m = __v
        _output__.writeTag(56, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      unknownFields.writeTo(_output__)
    }
    def clearTransportSocketMatches = copy(transportSocketMatches = _root_.scala.Seq.empty)
    def addTransportSocketMatches(__vs: io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch *): Cluster = addAllTransportSocketMatches(__vs)
    def addAllTransportSocketMatches(__vs: Iterable[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]): Cluster = copy(transportSocketMatches = transportSocketMatches ++ __vs)
    def withTransportSocketMatches(__v: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]): Cluster = copy(transportSocketMatches = __v)
    def withName(__v: _root_.scala.Predef.String): Cluster = copy(name = __v)
    def withAltStatName(__v: _root_.scala.Predef.String): Cluster = copy(altStatName = __v)
    def getType: io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType = clusterDiscoveryType.`type`.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType.STATIC)
    def withType(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType): Cluster = copy(clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Type(__v))
    def getClusterType: io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType = clusterDiscoveryType.clusterType.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType.defaultInstance)
    def withClusterType(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType): Cluster = copy(clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.ClusterType(__v))
    def getEdsClusterConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig = edsClusterConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig.defaultInstance)
    def clearEdsClusterConfig: Cluster = copy(edsClusterConfig = _root_.scala.None)
    def withEdsClusterConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig): Cluster = copy(edsClusterConfig = Option(__v))
    def getConnectTimeout: com.google.protobuf.duration.Duration = connectTimeout.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
    def clearConnectTimeout: Cluster = copy(connectTimeout = _root_.scala.None)
    def withConnectTimeout(__v: com.google.protobuf.duration.Duration): Cluster = copy(connectTimeout = Option(__v))
    def getPerConnectionBufferLimitBytes: _root_.scala.Int = perConnectionBufferLimitBytes.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toCustom(com.google.protobuf.wrappers.UInt32Value.defaultInstance))
    def clearPerConnectionBufferLimitBytes: Cluster = copy(perConnectionBufferLimitBytes = _root_.scala.None)
    def withPerConnectionBufferLimitBytes(__v: _root_.scala.Int): Cluster = copy(perConnectionBufferLimitBytes = Option(__v))
    def withLbPolicy(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy): Cluster = copy(lbPolicy = __v)
    def getLoadAssignment: io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment = loadAssignment.getOrElse(io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment.defaultInstance)
    def clearLoadAssignment: Cluster = copy(loadAssignment = _root_.scala.None)
    def withLoadAssignment(__v: io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment): Cluster = copy(loadAssignment = Option(__v))
    def clearHealthChecks = copy(healthChecks = _root_.scala.Seq.empty)
    def addHealthChecks(__vs: io.envoyproxy.envoy.config.core.v3.HealthCheck *): Cluster = addAllHealthChecks(__vs)
    def addAllHealthChecks(__vs: Iterable[io.envoyproxy.envoy.config.core.v3.HealthCheck]): Cluster = copy(healthChecks = healthChecks ++ __vs)
    def withHealthChecks(__v: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.HealthCheck]): Cluster = copy(healthChecks = __v)
    def getMaxRequestsPerConnection: _root_.scala.Int = maxRequestsPerConnection.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toCustom(com.google.protobuf.wrappers.UInt32Value.defaultInstance))
    def clearMaxRequestsPerConnection: Cluster = copy(maxRequestsPerConnection = _root_.scala.None)
    def withMaxRequestsPerConnection(__v: _root_.scala.Int): Cluster = copy(maxRequestsPerConnection = Option(__v))
    def getCircuitBreakers: io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers = circuitBreakers.getOrElse(io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers.defaultInstance)
    def clearCircuitBreakers: Cluster = copy(circuitBreakers = _root_.scala.None)
    def withCircuitBreakers(__v: io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers): Cluster = copy(circuitBreakers = Option(__v))
    def getUpstreamHttpProtocolOptions: io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions = upstreamHttpProtocolOptions.getOrElse(io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions.defaultInstance)
    def clearUpstreamHttpProtocolOptions: Cluster = copy(upstreamHttpProtocolOptions = _root_.scala.None)
    def withUpstreamHttpProtocolOptions(__v: io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions): Cluster = copy(upstreamHttpProtocolOptions = Option(__v))
    def getCommonHttpProtocolOptions: io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions = commonHttpProtocolOptions.getOrElse(io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions.defaultInstance)
    def clearCommonHttpProtocolOptions: Cluster = copy(commonHttpProtocolOptions = _root_.scala.None)
    def withCommonHttpProtocolOptions(__v: io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions): Cluster = copy(commonHttpProtocolOptions = Option(__v))
    def getHttpProtocolOptions: io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions = httpProtocolOptions.getOrElse(io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions.defaultInstance)
    def clearHttpProtocolOptions: Cluster = copy(httpProtocolOptions = _root_.scala.None)
    def withHttpProtocolOptions(__v: io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions): Cluster = copy(httpProtocolOptions = Option(__v))
    def getHttp2ProtocolOptions: io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions = http2ProtocolOptions.getOrElse(io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions.defaultInstance)
    def clearHttp2ProtocolOptions: Cluster = copy(http2ProtocolOptions = _root_.scala.None)
    def withHttp2ProtocolOptions(__v: io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions): Cluster = copy(http2ProtocolOptions = Option(__v))
    def clearTypedExtensionProtocolOptions = copy(typedExtensionProtocolOptions = _root_.scala.collection.immutable.Map.empty)
    def addTypedExtensionProtocolOptions(__vs: (_root_.scala.Predef.String, com.google.protobuf.any.Any) *): Cluster = addAllTypedExtensionProtocolOptions(__vs)
    def addAllTypedExtensionProtocolOptions(__vs: Iterable[(_root_.scala.Predef.String, com.google.protobuf.any.Any)]): Cluster = copy(typedExtensionProtocolOptions = typedExtensionProtocolOptions ++ __vs)
    def withTypedExtensionProtocolOptions(__v: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, com.google.protobuf.any.Any]): Cluster = copy(typedExtensionProtocolOptions = __v)
    def getDnsRefreshRate: com.google.protobuf.duration.Duration = dnsRefreshRate.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
    def clearDnsRefreshRate: Cluster = copy(dnsRefreshRate = _root_.scala.None)
    def withDnsRefreshRate(__v: com.google.protobuf.duration.Duration): Cluster = copy(dnsRefreshRate = Option(__v))
    def getDnsFailureRefreshRate: io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate = dnsFailureRefreshRate.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate.defaultInstance)
    def clearDnsFailureRefreshRate: Cluster = copy(dnsFailureRefreshRate = _root_.scala.None)
    def withDnsFailureRefreshRate(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate): Cluster = copy(dnsFailureRefreshRate = Option(__v))
    def withRespectDnsTtl(__v: _root_.scala.Boolean): Cluster = copy(respectDnsTtl = __v)
    def withDnsLookupFamily(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily): Cluster = copy(dnsLookupFamily = __v)
    def clearDnsResolvers = copy(dnsResolvers = _root_.scala.Seq.empty)
    def addDnsResolvers(__vs: io.envoyproxy.envoy.config.core.v3.Address *): Cluster = addAllDnsResolvers(__vs)
    def addAllDnsResolvers(__vs: Iterable[io.envoyproxy.envoy.config.core.v3.Address]): Cluster = copy(dnsResolvers = dnsResolvers ++ __vs)
    def withDnsResolvers(__v: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.Address]): Cluster = copy(dnsResolvers = __v)
    def withUseTcpForDnsLookups(__v: _root_.scala.Boolean): Cluster = copy(useTcpForDnsLookups = __v)
    def getDnsResolutionConfig: io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig = dnsResolutionConfig.getOrElse(io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig.defaultInstance)
    def clearDnsResolutionConfig: Cluster = copy(dnsResolutionConfig = _root_.scala.None)
    def withDnsResolutionConfig(__v: io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig): Cluster = copy(dnsResolutionConfig = Option(__v))
    def getTypedDnsResolverConfig: io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig = typedDnsResolverConfig.getOrElse(io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig.defaultInstance)
    def clearTypedDnsResolverConfig: Cluster = copy(typedDnsResolverConfig = _root_.scala.None)
    def withTypedDnsResolverConfig(__v: io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig): Cluster = copy(typedDnsResolverConfig = Option(__v))
    def getWaitForWarmOnInit: _root_.scala.Boolean = waitForWarmOnInit.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toCustom(com.google.protobuf.wrappers.BoolValue.defaultInstance))
    def clearWaitForWarmOnInit: Cluster = copy(waitForWarmOnInit = _root_.scala.None)
    def withWaitForWarmOnInit(__v: _root_.scala.Boolean): Cluster = copy(waitForWarmOnInit = Option(__v))
    def getOutlierDetection: io.envoyproxy.envoy.config.cluster.v3.OutlierDetection = outlierDetection.getOrElse(io.envoyproxy.envoy.config.cluster.v3.OutlierDetection.defaultInstance)
    def clearOutlierDetection: Cluster = copy(outlierDetection = _root_.scala.None)
    def withOutlierDetection(__v: io.envoyproxy.envoy.config.cluster.v3.OutlierDetection): Cluster = copy(outlierDetection = Option(__v))
    def getCleanupInterval: com.google.protobuf.duration.Duration = cleanupInterval.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
    def clearCleanupInterval: Cluster = copy(cleanupInterval = _root_.scala.None)
    def withCleanupInterval(__v: com.google.protobuf.duration.Duration): Cluster = copy(cleanupInterval = Option(__v))
    def getUpstreamBindConfig: io.envoyproxy.envoy.config.core.v3.BindConfig = upstreamBindConfig.getOrElse(io.envoyproxy.envoy.config.core.v3.BindConfig.defaultInstance)
    def clearUpstreamBindConfig: Cluster = copy(upstreamBindConfig = _root_.scala.None)
    def withUpstreamBindConfig(__v: io.envoyproxy.envoy.config.core.v3.BindConfig): Cluster = copy(upstreamBindConfig = Option(__v))
    def getLbSubsetConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig = lbSubsetConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.defaultInstance)
    def clearLbSubsetConfig: Cluster = copy(lbSubsetConfig = _root_.scala.None)
    def withLbSubsetConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig): Cluster = copy(lbSubsetConfig = Option(__v))
    def getRingHashLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig = lbConfig.ringHashLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.defaultInstance)
    def withRingHashLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig): Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RingHashLbConfig(__v))
    def getMaglevLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig = lbConfig.maglevLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig.defaultInstance)
    def withMaglevLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig): Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.MaglevLbConfig(__v))
    def getOriginalDstLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig = lbConfig.originalDstLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig.defaultInstance)
    def withOriginalDstLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig): Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.OriginalDstLbConfig(__v))
    def getLeastRequestLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig = lbConfig.leastRequestLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig.defaultInstance)
    def withLeastRequestLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig): Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.LeastRequestLbConfig(__v))
    def getRoundRobinLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig = lbConfig.roundRobinLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig.defaultInstance)
    def withRoundRobinLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig): Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RoundRobinLbConfig(__v))
    def getCommonLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig = commonLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.defaultInstance)
    def clearCommonLbConfig: Cluster = copy(commonLbConfig = _root_.scala.None)
    def withCommonLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig): Cluster = copy(commonLbConfig = Option(__v))
    def getTransportSocket: io.envoyproxy.envoy.config.core.v3.TransportSocket = transportSocket.getOrElse(io.envoyproxy.envoy.config.core.v3.TransportSocket.defaultInstance)
    def clearTransportSocket: Cluster = copy(transportSocket = _root_.scala.None)
    def withTransportSocket(__v: io.envoyproxy.envoy.config.core.v3.TransportSocket): Cluster = copy(transportSocket = Option(__v))
    def getMetadata: io.envoyproxy.envoy.config.core.v3.Metadata = metadata.getOrElse(io.envoyproxy.envoy.config.core.v3.Metadata.defaultInstance)
    def clearMetadata: Cluster = copy(metadata = _root_.scala.None)
    def withMetadata(__v: io.envoyproxy.envoy.config.core.v3.Metadata): Cluster = copy(metadata = Option(__v))
    def withProtocolSelection(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection): Cluster = copy(protocolSelection = __v)
    def getUpstreamConnectionOptions: io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions = upstreamConnectionOptions.getOrElse(io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions.defaultInstance)
    def clearUpstreamConnectionOptions: Cluster = copy(upstreamConnectionOptions = _root_.scala.None)
    def withUpstreamConnectionOptions(__v: io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions): Cluster = copy(upstreamConnectionOptions = Option(__v))
    def withCloseConnectionsOnHostHealthFailure(__v: _root_.scala.Boolean): Cluster = copy(closeConnectionsOnHostHealthFailure = __v)
    def withIgnoreHealthOnHostRemoval(__v: _root_.scala.Boolean): Cluster = copy(ignoreHealthOnHostRemoval = __v)
    def clearFilters = copy(filters = _root_.scala.Seq.empty)
    def addFilters(__vs: io.envoyproxy.envoy.config.cluster.v3.Filter *): Cluster = addAllFilters(__vs)
    def addAllFilters(__vs: Iterable[io.envoyproxy.envoy.config.cluster.v3.Filter]): Cluster = copy(filters = filters ++ __vs)
    def withFilters(__v: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Filter]): Cluster = copy(filters = __v)
    def getLoadBalancingPolicy: io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy = loadBalancingPolicy.getOrElse(io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy.defaultInstance)
    def clearLoadBalancingPolicy: Cluster = copy(loadBalancingPolicy = _root_.scala.None)
    def withLoadBalancingPolicy(__v: io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy): Cluster = copy(loadBalancingPolicy = Option(__v))
    def getLrsServer: io.envoyproxy.envoy.config.core.v3.ConfigSource = lrsServer.getOrElse(io.envoyproxy.envoy.config.core.v3.ConfigSource.defaultInstance)
    def clearLrsServer: Cluster = copy(lrsServer = _root_.scala.None)
    def withLrsServer(__v: io.envoyproxy.envoy.config.core.v3.ConfigSource): Cluster = copy(lrsServer = Option(__v))
    def withTrackTimeoutBudgets(__v: _root_.scala.Boolean): Cluster = copy(trackTimeoutBudgets = __v)
    def getUpstreamConfig: io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig = upstreamConfig.getOrElse(io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig.defaultInstance)
    def clearUpstreamConfig: Cluster = copy(upstreamConfig = _root_.scala.None)
    def withUpstreamConfig(__v: io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig): Cluster = copy(upstreamConfig = Option(__v))
    def getTrackClusterStats: io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats = trackClusterStats.getOrElse(io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats.defaultInstance)
    def clearTrackClusterStats: Cluster = copy(trackClusterStats = _root_.scala.None)
    def withTrackClusterStats(__v: io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats): Cluster = copy(trackClusterStats = Option(__v))
    def getPreconnectPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy = preconnectPolicy.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy.defaultInstance)
    def clearPreconnectPolicy: Cluster = copy(preconnectPolicy = _root_.scala.None)
    def withPreconnectPolicy(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy): Cluster = copy(preconnectPolicy = Option(__v))
    def withConnectionPoolPerDownstreamConnection(__v: _root_.scala.Boolean): Cluster = copy(connectionPoolPerDownstreamConnection = __v)
    def clearClusterDiscoveryType: Cluster = copy(clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Empty)
    def withClusterDiscoveryType(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType): Cluster = copy(clusterDiscoveryType = __v)
    def clearLbConfig: Cluster = copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.Empty)
    def withLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig): Cluster = copy(lbConfig = __v)
    def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
    def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
    def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 43 => transportSocketMatches
        case 1 => {
          val __t = name
          if (__t != "") __t else null
        }
        case 28 => {
          val __t = altStatName
          if (__t != "") __t else null
        }
        case 2 => clusterDiscoveryType.`type`.map(_.javaValueDescriptor).orNull
        case 38 => clusterDiscoveryType.clusterType.orNull
        case 3 => edsClusterConfig.orNull
        case 4 => connectTimeout.orNull
        case 5 => perConnectionBufferLimitBytes.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toBase(_)).orNull
        case 6 => {
          val __t = lbPolicy.javaValueDescriptor
          if (__t.getNumber() != 0) __t else null
        }
        case 33 => loadAssignment.orNull
        case 8 => healthChecks
        case 9 => maxRequestsPerConnection.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toBase(_)).orNull
        case 10 => circuitBreakers.orNull
        case 46 => upstreamHttpProtocolOptions.orNull
        case 29 => commonHttpProtocolOptions.orNull
        case 13 => httpProtocolOptions.orNull
        case 14 => http2ProtocolOptions.orNull
        case 36 => typedExtensionProtocolOptions.iterator.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toBase(_)).toSeq
        case 16 => dnsRefreshRate.orNull
        case 44 => dnsFailureRefreshRate.orNull
        case 39 => {
          val __t = respectDnsTtl
          if (__t != false) __t else null
        }
        case 17 => {
          val __t = dnsLookupFamily.javaValueDescriptor
          if (__t.getNumber() != 0) __t else null
        }
        case 18 => dnsResolvers
        case 45 => {
          val __t = useTcpForDnsLookups
          if (__t != false) __t else null
        }
        case 53 => dnsResolutionConfig.orNull
        case 55 => typedDnsResolverConfig.orNull
        case 54 => waitForWarmOnInit.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toBase(_)).orNull
        case 19 => outlierDetection.orNull
        case 20 => cleanupInterval.orNull
        case 21 => upstreamBindConfig.orNull
        case 22 => lbSubsetConfig.orNull
        case 23 => lbConfig.ringHashLbConfig.orNull
        case 52 => lbConfig.maglevLbConfig.orNull
        case 34 => lbConfig.originalDstLbConfig.orNull
        case 37 => lbConfig.leastRequestLbConfig.orNull
        case 56 => lbConfig.roundRobinLbConfig.orNull
        case 27 => commonLbConfig.orNull
        case 24 => transportSocket.orNull
        case 25 => metadata.orNull
        case 26 => {
          val __t = protocolSelection.javaValueDescriptor
          if (__t.getNumber() != 0) __t else null
        }
        case 30 => upstreamConnectionOptions.orNull
        case 31 => {
          val __t = closeConnectionsOnHostHealthFailure
          if (__t != false) __t else null
        }
        case 32 => {
          val __t = ignoreHealthOnHostRemoval
          if (__t != false) __t else null
        }
        case 40 => filters
        case 41 => loadBalancingPolicy.orNull
        case 42 => lrsServer.orNull
        case 47 => {
          val __t = trackTimeoutBudgets
          if (__t != false) __t else null
        }
        case 48 => upstreamConfig.orNull
        case 49 => trackClusterStats.orNull
        case 50 => preconnectPolicy.orNull
        case 51 => {
          val __t = connectionPoolPerDownstreamConnection
          if (__t != false) __t else null
        }
      }
    }
    def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
      _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
      (__field.number: @_root_.scala.unchecked) match {
        case 43 => _root_.scalapb.descriptors.PRepeated(transportSocketMatches.iterator.map(_.toPMessage).toVector)
        case 1 => _root_.scalapb.descriptors.PString(name)
        case 28 => _root_.scalapb.descriptors.PString(altStatName)
        case 2 => clusterDiscoveryType.`type`.map(__e => _root_.scalapb.descriptors.PEnum(__e.scalaValueDescriptor)).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 38 => clusterDiscoveryType.clusterType.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 3 => edsClusterConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 4 => connectTimeout.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 5 => perConnectionBufferLimitBytes.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 6 => _root_.scalapb.descriptors.PEnum(lbPolicy.scalaValueDescriptor)
        case 33 => loadAssignment.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 8 => _root_.scalapb.descriptors.PRepeated(healthChecks.iterator.map(_.toPMessage).toVector)
        case 9 => maxRequestsPerConnection.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 10 => circuitBreakers.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 46 => upstreamHttpProtocolOptions.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 29 => commonHttpProtocolOptions.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 13 => httpProtocolOptions.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 14 => http2ProtocolOptions.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 36 => _root_.scalapb.descriptors.PRepeated(typedExtensionProtocolOptions.iterator.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toBase(_).toPMessage).toVector)
        case 16 => dnsRefreshRate.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 44 => dnsFailureRefreshRate.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 39 => _root_.scalapb.descriptors.PBoolean(respectDnsTtl)
        case 17 => _root_.scalapb.descriptors.PEnum(dnsLookupFamily.scalaValueDescriptor)
        case 18 => _root_.scalapb.descriptors.PRepeated(dnsResolvers.iterator.map(_.toPMessage).toVector)
        case 45 => _root_.scalapb.descriptors.PBoolean(useTcpForDnsLookups)
        case 53 => dnsResolutionConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 55 => typedDnsResolverConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 54 => waitForWarmOnInit.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 19 => outlierDetection.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 20 => cleanupInterval.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 21 => upstreamBindConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 22 => lbSubsetConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 23 => lbConfig.ringHashLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 52 => lbConfig.maglevLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 34 => lbConfig.originalDstLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 37 => lbConfig.leastRequestLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 56 => lbConfig.roundRobinLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 27 => commonLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 24 => transportSocket.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 25 => metadata.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 26 => _root_.scalapb.descriptors.PEnum(protocolSelection.scalaValueDescriptor)
        case 30 => upstreamConnectionOptions.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 31 => _root_.scalapb.descriptors.PBoolean(closeConnectionsOnHostHealthFailure)
        case 32 => _root_.scalapb.descriptors.PBoolean(ignoreHealthOnHostRemoval)
        case 40 => _root_.scalapb.descriptors.PRepeated(filters.iterator.map(_.toPMessage).toVector)
        case 41 => loadBalancingPolicy.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 42 => lrsServer.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 47 => _root_.scalapb.descriptors.PBoolean(trackTimeoutBudgets)
        case 48 => upstreamConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 49 => trackClusterStats.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 50 => preconnectPolicy.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 51 => _root_.scalapb.descriptors.PBoolean(connectionPoolPerDownstreamConnection)
      }
    }
    def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
    def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.type = io.envoyproxy.envoy.config.cluster.v3.Cluster
    // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster])
}

object Cluster extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster] {
  implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster] = this
  def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster = {
    val __transportSocketMatches: _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch] = new _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]
    var __name: _root_.scala.Predef.String = ""
    var __altStatName: _root_.scala.Predef.String = ""
    var __edsClusterConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] = _root_.scala.None
    var __connectTimeout: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
    var __perConnectionBufferLimitBytes: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
    var __lbPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.ROUND_ROBIN
    var __loadAssignment: _root_.scala.Option[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment] = _root_.scala.None
    val __healthChecks: _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.core.v3.HealthCheck] = new _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.core.v3.HealthCheck]
    var __maxRequestsPerConnection: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
    var __circuitBreakers: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers] = _root_.scala.None
    var __upstreamHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions] = _root_.scala.None
    var __commonHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions] = _root_.scala.None
    var __httpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions] = _root_.scala.None
    var __http2ProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions] = _root_.scala.None
    val __typedExtensionProtocolOptions: _root_.scala.collection.mutable.Builder[(_root_.scala.Predef.String, com.google.protobuf.any.Any), _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, com.google.protobuf.any.Any]] = _root_.scala.collection.immutable.Map.newBuilder[_root_.scala.Predef.String, com.google.protobuf.any.Any]
    var __dnsRefreshRate: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
    var __dnsFailureRefreshRate: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] = _root_.scala.None
    var __respectDnsTtl: _root_.scala.Boolean = false
    var __dnsLookupFamily: io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.AUTO
    val __dnsResolvers: _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.core.v3.Address] = new _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.core.v3.Address]
    var __useTcpForDnsLookups: _root_.scala.Boolean = false
    var __dnsResolutionConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig] = _root_.scala.None
    var __typedDnsResolverConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = _root_.scala.None
    var __waitForWarmOnInit: _root_.scala.Option[_root_.scala.Boolean] = _root_.scala.None
    var __outlierDetection: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection] = _root_.scala.None
    var __cleanupInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
    var __upstreamBindConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.BindConfig] = _root_.scala.None
    var __lbSubsetConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] = _root_.scala.None
    var __commonLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] = _root_.scala.None
    var __transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket] = _root_.scala.None
    var __metadata: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Metadata] = _root_.scala.None
    var __protocolSelection: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.USE_CONFIGURED_PROTOCOL
    var __upstreamConnectionOptions: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions] = _root_.scala.None
    var __closeConnectionsOnHostHealthFailure: _root_.scala.Boolean = false
    var __ignoreHealthOnHostRemoval: _root_.scala.Boolean = false
    val __filters: _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Filter] = new _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Filter]
    var __loadBalancingPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy] = _root_.scala.None
    var __lrsServer: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource] = _root_.scala.None
    var __trackTimeoutBudgets: _root_.scala.Boolean = false
    var __upstreamConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = _root_.scala.None
    var __trackClusterStats: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats] = _root_.scala.None
    var __preconnectPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] = _root_.scala.None
    var __connectionPoolPerDownstreamConnection: _root_.scala.Boolean = false
    var __clusterDiscoveryType: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Empty
    var __lbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.Empty
    var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
    var _done__ = false
    while (!_done__) {
      val _tag__ = _input__.readTag()
      _tag__ match {
        case 0 => _done__ = true
        case 346 =>
          __transportSocketMatches += _root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch](_input__)
        case 10 =>
          __name = _input__.readStringRequireUtf8()
        case 226 =>
          __altStatName = _input__.readStringRequireUtf8()
        case 16 =>
          __clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Type(io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType.fromValue(_input__.readEnum()))
        case 306 =>
          __clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.ClusterType(__clusterDiscoveryType.clusterType.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 26 =>
          __edsClusterConfig = Option(__edsClusterConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 34 =>
          __connectTimeout = Option(__connectTimeout.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 42 =>
          __perConnectionBufferLimitBytes = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toCustom(__perConnectionBufferLimitBytes.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt32Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
        case 48 =>
          __lbPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.fromValue(_input__.readEnum())
        case 266 =>
          __loadAssignment = Option(__loadAssignment.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 66 =>
          __healthChecks += _root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.HealthCheck](_input__)
        case 74 =>
          __maxRequestsPerConnection = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toCustom(__maxRequestsPerConnection.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt32Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
        case 82 =>
          __circuitBreakers = Option(__circuitBreakers.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 370 =>
          __upstreamHttpProtocolOptions = Option(__upstreamHttpProtocolOptions.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 234 =>
          __commonHttpProtocolOptions = Option(__commonHttpProtocolOptions.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 106 =>
          __httpProtocolOptions = Option(__httpProtocolOptions.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 114 =>
          __http2ProtocolOptions = Option(__http2ProtocolOptions.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 290 =>
          __typedExtensionProtocolOptions += io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toCustom(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry](_input__))
        case 130 =>
          __dnsRefreshRate = Option(__dnsRefreshRate.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 354 =>
          __dnsFailureRefreshRate = Option(__dnsFailureRefreshRate.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 312 =>
          __respectDnsTtl = _input__.readBool()
        case 136 =>
          __dnsLookupFamily = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.fromValue(_input__.readEnum())
        case 146 =>
          __dnsResolvers += _root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.Address](_input__)
        case 360 =>
          __useTcpForDnsLookups = _input__.readBool()
        case 426 =>
          __dnsResolutionConfig = Option(__dnsResolutionConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 442 =>
          __typedDnsResolverConfig = Option(__typedDnsResolverConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 434 =>
          __waitForWarmOnInit = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toCustom(__waitForWarmOnInit.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.BoolValue](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
        case 154 =>
          __outlierDetection = Option(__outlierDetection.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 162 =>
          __cleanupInterval = Option(__cleanupInterval.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 170 =>
          __upstreamBindConfig = Option(__upstreamBindConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.BindConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 178 =>
          __lbSubsetConfig = Option(__lbSubsetConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 186 =>
          __lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RingHashLbConfig(__lbConfig.ringHashLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 418 =>
          __lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.MaglevLbConfig(__lbConfig.maglevLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 274 =>
          __lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.OriginalDstLbConfig(__lbConfig.originalDstLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 298 =>
          __lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.LeastRequestLbConfig(__lbConfig.leastRequestLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 450 =>
          __lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RoundRobinLbConfig(__lbConfig.roundRobinLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 218 =>
          __commonLbConfig = Option(__commonLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 194 =>
          __transportSocket = Option(__transportSocket.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.TransportSocket](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 202 =>
          __metadata = Option(__metadata.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.Metadata](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 208 =>
          __protocolSelection = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.fromValue(_input__.readEnum())
        case 242 =>
          __upstreamConnectionOptions = Option(__upstreamConnectionOptions.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 248 =>
          __closeConnectionsOnHostHealthFailure = _input__.readBool()
        case 256 =>
          __ignoreHealthOnHostRemoval = _input__.readBool()
        case 322 =>
          __filters += _root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Filter](_input__)
        case 330 =>
          __loadBalancingPolicy = Option(__loadBalancingPolicy.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 338 =>
          __lrsServer = Option(__lrsServer.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.ConfigSource](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 376 =>
          __trackTimeoutBudgets = _input__.readBool()
        case 386 =>
          __upstreamConfig = Option(__upstreamConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 394 =>
          __trackClusterStats = Option(__trackClusterStats.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 402 =>
          __preconnectPolicy = Option(__preconnectPolicy.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 408 =>
          __connectionPoolPerDownstreamConnection = _input__.readBool()
        case tag =>
          if (_unknownFields__ == null) {
            _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
          }
          _unknownFields__.parseField(tag, _input__)
      }
    }
    io.envoyproxy.envoy.config.cluster.v3.Cluster(
        transportSocketMatches = __transportSocketMatches.result(),
        name = __name,
        altStatName = __altStatName,
        edsClusterConfig = __edsClusterConfig,
        connectTimeout = __connectTimeout,
        perConnectionBufferLimitBytes = __perConnectionBufferLimitBytes,
        lbPolicy = __lbPolicy,
        loadAssignment = __loadAssignment,
        healthChecks = __healthChecks.result(),
        maxRequestsPerConnection = __maxRequestsPerConnection,
        circuitBreakers = __circuitBreakers,
        upstreamHttpProtocolOptions = __upstreamHttpProtocolOptions,
        commonHttpProtocolOptions = __commonHttpProtocolOptions,
        httpProtocolOptions = __httpProtocolOptions,
        http2ProtocolOptions = __http2ProtocolOptions,
        typedExtensionProtocolOptions = __typedExtensionProtocolOptions.result(),
        dnsRefreshRate = __dnsRefreshRate,
        dnsFailureRefreshRate = __dnsFailureRefreshRate,
        respectDnsTtl = __respectDnsTtl,
        dnsLookupFamily = __dnsLookupFamily,
        dnsResolvers = __dnsResolvers.result(),
        useTcpForDnsLookups = __useTcpForDnsLookups,
        dnsResolutionConfig = __dnsResolutionConfig,
        typedDnsResolverConfig = __typedDnsResolverConfig,
        waitForWarmOnInit = __waitForWarmOnInit,
        outlierDetection = __outlierDetection,
        cleanupInterval = __cleanupInterval,
        upstreamBindConfig = __upstreamBindConfig,
        lbSubsetConfig = __lbSubsetConfig,
        commonLbConfig = __commonLbConfig,
        transportSocket = __transportSocket,
        metadata = __metadata,
        protocolSelection = __protocolSelection,
        upstreamConnectionOptions = __upstreamConnectionOptions,
        closeConnectionsOnHostHealthFailure = __closeConnectionsOnHostHealthFailure,
        ignoreHealthOnHostRemoval = __ignoreHealthOnHostRemoval,
        filters = __filters.result(),
        loadBalancingPolicy = __loadBalancingPolicy,
        lrsServer = __lrsServer,
        trackTimeoutBudgets = __trackTimeoutBudgets,
        upstreamConfig = __upstreamConfig,
        trackClusterStats = __trackClusterStats,
        preconnectPolicy = __preconnectPolicy,
        connectionPoolPerDownstreamConnection = __connectionPoolPerDownstreamConnection,
        clusterDiscoveryType = __clusterDiscoveryType,
        lbConfig = __lbConfig,
        unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
    )
  }
  implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster] = _root_.scalapb.descriptors.Reads{
    case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
      _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
      io.envoyproxy.envoy.config.cluster.v3.Cluster(
        transportSocketMatches = __fieldsMap.get(scalaDescriptor.findFieldByNumber(43).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]]).getOrElse(_root_.scala.Seq.empty),
        name = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        altStatName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(28).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        edsClusterConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig]]),
        connectTimeout = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
        perConnectionBufferLimitBytes = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt32Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_perConnectionBufferLimitBytes.toCustom(_)),
        lbPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.ROUND_ROBIN.scalaValueDescriptor).number),
        loadAssignment = __fieldsMap.get(scalaDescriptor.findFieldByNumber(33).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment]]),
        healthChecks = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.HealthCheck]]).getOrElse(_root_.scala.Seq.empty),
        maxRequestsPerConnection = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt32Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_maxRequestsPerConnection.toCustom(_)),
        circuitBreakers = __fieldsMap.get(scalaDescriptor.findFieldByNumber(10).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers]]),
        upstreamHttpProtocolOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(46).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions]]),
        commonHttpProtocolOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(29).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions]]),
        httpProtocolOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(13).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions]]),
        http2ProtocolOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(14).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions]]),
        typedExtensionProtocolOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(36).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry]]).getOrElse(_root_.scala.Seq.empty).iterator.map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_typedExtensionProtocolOptions.toCustom(_)).toMap,
        dnsRefreshRate = __fieldsMap.get(scalaDescriptor.findFieldByNumber(16).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
        dnsFailureRefreshRate = __fieldsMap.get(scalaDescriptor.findFieldByNumber(44).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate]]),
        respectDnsTtl = __fieldsMap.get(scalaDescriptor.findFieldByNumber(39).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        dnsLookupFamily = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(17).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.AUTO.scalaValueDescriptor).number),
        dnsResolvers = __fieldsMap.get(scalaDescriptor.findFieldByNumber(18).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.Address]]).getOrElse(_root_.scala.Seq.empty),
        useTcpForDnsLookups = __fieldsMap.get(scalaDescriptor.findFieldByNumber(45).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        dnsResolutionConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(53).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig]]),
        typedDnsResolverConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(55).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig]]),
        waitForWarmOnInit = __fieldsMap.get(scalaDescriptor.findFieldByNumber(54).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.BoolValue]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster._typemapper_waitForWarmOnInit.toCustom(_)),
        outlierDetection = __fieldsMap.get(scalaDescriptor.findFieldByNumber(19).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection]]),
        cleanupInterval = __fieldsMap.get(scalaDescriptor.findFieldByNumber(20).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
        upstreamBindConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(21).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.BindConfig]]),
        lbSubsetConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(22).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig]]),
        commonLbConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(27).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig]]),
        transportSocket = __fieldsMap.get(scalaDescriptor.findFieldByNumber(24).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket]]),
        metadata = __fieldsMap.get(scalaDescriptor.findFieldByNumber(25).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Metadata]]),
        protocolSelection = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(26).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.USE_CONFIGURED_PROTOCOL.scalaValueDescriptor).number),
        upstreamConnectionOptions = __fieldsMap.get(scalaDescriptor.findFieldByNumber(30).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions]]),
        closeConnectionsOnHostHealthFailure = __fieldsMap.get(scalaDescriptor.findFieldByNumber(31).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        ignoreHealthOnHostRemoval = __fieldsMap.get(scalaDescriptor.findFieldByNumber(32).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        filters = __fieldsMap.get(scalaDescriptor.findFieldByNumber(40).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Filter]]).getOrElse(_root_.scala.Seq.empty),
        loadBalancingPolicy = __fieldsMap.get(scalaDescriptor.findFieldByNumber(41).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy]]),
        lrsServer = __fieldsMap.get(scalaDescriptor.findFieldByNumber(42).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource]]),
        trackTimeoutBudgets = __fieldsMap.get(scalaDescriptor.findFieldByNumber(47).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        upstreamConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(48).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig]]),
        trackClusterStats = __fieldsMap.get(scalaDescriptor.findFieldByNumber(49).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats]]),
        preconnectPolicy = __fieldsMap.get(scalaDescriptor.findFieldByNumber(50).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy]]),
        connectionPoolPerDownstreamConnection = __fieldsMap.get(scalaDescriptor.findFieldByNumber(51).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        clusterDiscoveryType = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[_root_.scalapb.descriptors.EnumValueDescriptor]]).map(__e => io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Type(io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType.fromValue(__e.number)))
            .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType](__fieldsMap.get(scalaDescriptor.findFieldByNumber(38).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.ClusterType(_)))
            .getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Empty),
        lbConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(23).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RingHashLbConfig(_))
            .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(52).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.MaglevLbConfig(_)))
            .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(34).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.OriginalDstLbConfig(_)))
            .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(37).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.LeastRequestLbConfig(_)))
            .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig](__fieldsMap.get(scalaDescriptor.findFieldByNumber(56).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RoundRobinLbConfig(_)))
            .getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.Empty)
      )
    case _ => throw new RuntimeException("Expected PMessage")
  }
  def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ClusterProto.javaDescriptor.getMessageTypes().get(1)
  def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ClusterProto.scalaDescriptor.messages(1)
  def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
    var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
    (__number: @_root_.scala.unchecked) match {
      case 43 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch
      case 38 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType
      case 3 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig
      case 4 => __out = com.google.protobuf.duration.Duration
      case 5 => __out = com.google.protobuf.wrappers.UInt32Value
      case 33 => __out = io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment
      case 8 => __out = io.envoyproxy.envoy.config.core.v3.HealthCheck
      case 9 => __out = com.google.protobuf.wrappers.UInt32Value
      case 10 => __out = io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers
      case 46 => __out = io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions
      case 29 => __out = io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions
      case 13 => __out = io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions
      case 14 => __out = io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions
      case 36 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry
      case 16 => __out = com.google.protobuf.duration.Duration
      case 44 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate
      case 18 => __out = io.envoyproxy.envoy.config.core.v3.Address
      case 53 => __out = io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig
      case 55 => __out = io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig
      case 54 => __out = com.google.protobuf.wrappers.BoolValue
      case 19 => __out = io.envoyproxy.envoy.config.cluster.v3.OutlierDetection
      case 20 => __out = com.google.protobuf.duration.Duration
      case 21 => __out = io.envoyproxy.envoy.config.core.v3.BindConfig
      case 22 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig
      case 23 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig
      case 52 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig
      case 34 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig
      case 37 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig
      case 56 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig
      case 27 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig
      case 24 => __out = io.envoyproxy.envoy.config.core.v3.TransportSocket
      case 25 => __out = io.envoyproxy.envoy.config.core.v3.Metadata
      case 30 => __out = io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions
      case 40 => __out = io.envoyproxy.envoy.config.cluster.v3.Filter
      case 41 => __out = io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy
      case 42 => __out = io.envoyproxy.envoy.config.core.v3.ConfigSource
      case 48 => __out = io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig
      case 49 => __out = io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats
      case 50 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy
    }
    __out
  }
  lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
    Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy,
      _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry
    )
  def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
    (__fieldNumber: @_root_.scala.unchecked) match {
      case 2 => io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType
      case 6 => io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy
      case 17 => io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily
      case 26 => io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection
    }
  }
  lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster(
    transportSocketMatches = _root_.scala.Seq.empty,
    name = "",
    altStatName = "",
    edsClusterConfig = _root_.scala.None,
    connectTimeout = _root_.scala.None,
    perConnectionBufferLimitBytes = _root_.scala.None,
    lbPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.ROUND_ROBIN,
    loadAssignment = _root_.scala.None,
    healthChecks = _root_.scala.Seq.empty,
    maxRequestsPerConnection = _root_.scala.None,
    circuitBreakers = _root_.scala.None,
    upstreamHttpProtocolOptions = _root_.scala.None,
    commonHttpProtocolOptions = _root_.scala.None,
    httpProtocolOptions = _root_.scala.None,
    http2ProtocolOptions = _root_.scala.None,
    typedExtensionProtocolOptions = _root_.scala.collection.immutable.Map.empty,
    dnsRefreshRate = _root_.scala.None,
    dnsFailureRefreshRate = _root_.scala.None,
    respectDnsTtl = false,
    dnsLookupFamily = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.AUTO,
    dnsResolvers = _root_.scala.Seq.empty,
    useTcpForDnsLookups = false,
    dnsResolutionConfig = _root_.scala.None,
    typedDnsResolverConfig = _root_.scala.None,
    waitForWarmOnInit = _root_.scala.None,
    outlierDetection = _root_.scala.None,
    cleanupInterval = _root_.scala.None,
    upstreamBindConfig = _root_.scala.None,
    lbSubsetConfig = _root_.scala.None,
    commonLbConfig = _root_.scala.None,
    transportSocket = _root_.scala.None,
    metadata = _root_.scala.None,
    protocolSelection = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.USE_CONFIGURED_PROTOCOL,
    upstreamConnectionOptions = _root_.scala.None,
    closeConnectionsOnHostHealthFailure = false,
    ignoreHealthOnHostRemoval = false,
    filters = _root_.scala.Seq.empty,
    loadBalancingPolicy = _root_.scala.None,
    lrsServer = _root_.scala.None,
    trackTimeoutBudgets = false,
    upstreamConfig = _root_.scala.None,
    trackClusterStats = _root_.scala.None,
    preconnectPolicy = _root_.scala.None,
    connectionPoolPerDownstreamConnection = false,
    clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Empty,
    lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.Empty
  )
  /** Refer to :ref:`service discovery type <arch_overview_service_discovery_types>`
    * for an explanation on each type.
    */
  sealed abstract class DiscoveryType(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = DiscoveryType
    def isStatic: _root_.scala.Boolean = false
    def isStrictDns: _root_.scala.Boolean = false
    def isLogicalDns: _root_.scala.Boolean = false
    def isEds: _root_.scala.Boolean = false
    def isOriginalDst: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[DiscoveryType] = io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType
    final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType.Recognized])
  }
  
  object DiscoveryType extends _root_.scalapb.GeneratedEnumCompanion[DiscoveryType] {
    sealed trait Recognized extends DiscoveryType
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[DiscoveryType] = this
    
    /** Refer to the :ref:`static discovery type<arch_overview_service_discovery_types_static>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object STATIC extends DiscoveryType(0) with DiscoveryType.Recognized {
      val index = 0
      val name = "STATIC"
      override def isStatic: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`strict DNS discovery
      * type<arch_overview_service_discovery_types_strict_dns>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object STRICT_DNS extends DiscoveryType(1) with DiscoveryType.Recognized {
      val index = 1
      val name = "STRICT_DNS"
      override def isStrictDns: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`logical DNS discovery
      * type<arch_overview_service_discovery_types_logical_dns>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object LOGICAL_DNS extends DiscoveryType(2) with DiscoveryType.Recognized {
      val index = 2
      val name = "LOGICAL_DNS"
      override def isLogicalDns: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`service discovery type<arch_overview_service_discovery_types_eds>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object EDS extends DiscoveryType(3) with DiscoveryType.Recognized {
      val index = 3
      val name = "EDS"
      override def isEds: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`original destination discovery
      * type<arch_overview_service_discovery_types_original_destination>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object ORIGINAL_DST extends DiscoveryType(4) with DiscoveryType.Recognized {
      val index = 4
      val name = "ORIGINAL_DST"
      override def isOriginalDst: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends DiscoveryType(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values = scala.collection.immutable.Seq(STATIC, STRICT_DNS, LOGICAL_DNS, EDS, ORIGINAL_DST)
    def fromValue(__value: _root_.scala.Int): DiscoveryType = __value match {
      case 0 => STATIC
      case 1 => STRICT_DNS
      case 2 => LOGICAL_DNS
      case 3 => EDS
      case 4 => ORIGINAL_DST
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getEnumTypes().get(0)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.enums(0)
  }
  /** Refer to :ref:`load balancer type <arch_overview_load_balancing_types>` architecture
    * overview section for information on each type.
    */
  sealed abstract class LbPolicy(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = LbPolicy
    def isRoundRobin: _root_.scala.Boolean = false
    def isLeastRequest: _root_.scala.Boolean = false
    def isRingHash: _root_.scala.Boolean = false
    def isRandom: _root_.scala.Boolean = false
    def isMaglev: _root_.scala.Boolean = false
    def isClusterProvided: _root_.scala.Boolean = false
    def isLoadBalancingPolicyConfig: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[LbPolicy] = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy
    final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy.Recognized])
  }
  
  object LbPolicy extends _root_.scalapb.GeneratedEnumCompanion[LbPolicy] {
    sealed trait Recognized extends LbPolicy
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[LbPolicy] = this
    
    /** Refer to the :ref:`round robin load balancing
      * policy<arch_overview_load_balancing_types_round_robin>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object ROUND_ROBIN extends LbPolicy(0) with LbPolicy.Recognized {
      val index = 0
      val name = "ROUND_ROBIN"
      override def isRoundRobin: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`least request load balancing
      * policy<arch_overview_load_balancing_types_least_request>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object LEAST_REQUEST extends LbPolicy(1) with LbPolicy.Recognized {
      val index = 1
      val name = "LEAST_REQUEST"
      override def isLeastRequest: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`ring hash load balancing
      * policy<arch_overview_load_balancing_types_ring_hash>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object RING_HASH extends LbPolicy(2) with LbPolicy.Recognized {
      val index = 2
      val name = "RING_HASH"
      override def isRingHash: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`random load balancing
      * policy<arch_overview_load_balancing_types_random>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object RANDOM extends LbPolicy(3) with LbPolicy.Recognized {
      val index = 3
      val name = "RANDOM"
      override def isRandom: _root_.scala.Boolean = true
    }
    
    /** Refer to the :ref:`Maglev load balancing policy<arch_overview_load_balancing_types_maglev>`
      * for an explanation.
      */
    @SerialVersionUID(0L)
    case object MAGLEV extends LbPolicy(5) with LbPolicy.Recognized {
      val index = 4
      val name = "MAGLEV"
      override def isMaglev: _root_.scala.Boolean = true
    }
    
    /** This load balancer type must be specified if the configured cluster provides a cluster
      * specific load balancer. Consult the configured cluster's documentation for whether to set
      * this option or not.
      */
    @SerialVersionUID(0L)
    case object CLUSTER_PROVIDED extends LbPolicy(6) with LbPolicy.Recognized {
      val index = 5
      val name = "CLUSTER_PROVIDED"
      override def isClusterProvided: _root_.scala.Boolean = true
    }
    
    /** Use the new :ref:`load_balancing_policy
      * <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field to determine the LB policy.
      * This has been deprecated in favor of using the :ref:`load_balancing_policy
      * <envoy_v3_api_field_config.cluster.v3.Cluster.load_balancing_policy>` field without
      * setting any value in :ref:`lb_policy<envoy_v3_api_field_config.cluster.v3.Cluster.lb_policy>`.
      */
    @SerialVersionUID(0L)
    case object LOAD_BALANCING_POLICY_CONFIG extends LbPolicy(7) with LbPolicy.Recognized {
      val index = 6
      val name = "LOAD_BALANCING_POLICY_CONFIG"
      override def isLoadBalancingPolicyConfig: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends LbPolicy(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values = scala.collection.immutable.Seq(ROUND_ROBIN, LEAST_REQUEST, RING_HASH, RANDOM, MAGLEV, CLUSTER_PROVIDED, LOAD_BALANCING_POLICY_CONFIG)
    def fromValue(__value: _root_.scala.Int): LbPolicy = __value match {
      case 0 => ROUND_ROBIN
      case 1 => LEAST_REQUEST
      case 2 => RING_HASH
      case 3 => RANDOM
      case 5 => MAGLEV
      case 6 => CLUSTER_PROVIDED
      case 7 => LOAD_BALANCING_POLICY_CONFIG
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getEnumTypes().get(1)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.enums(1)
  }
  /** When V4_ONLY is selected, the DNS resolver will only perform a lookup for
    * addresses in the IPv4 family. If V6_ONLY is selected, the DNS resolver will
    * only perform a lookup for addresses in the IPv6 family. If AUTO is
    * specified, the DNS resolver will first perform a lookup for addresses in
    * the IPv6 family and fallback to a lookup for addresses in the IPv4 family.
    * This is semantically equivalent to a non-existent V6_PREFERRED option.
    * AUTO is a legacy name that is more opaque than
    * necessary and will be deprecated in favor of V6_PREFERRED in a future major version of the API.
    * If V4_PREFERRED is specified, the DNS resolver will first perform a lookup for addresses in the
    * IPv4 family and fallback to a lookup for addresses in the IPv6 family. i.e., the callback
    * target will only get v6 addresses if there were NO v4 addresses to return.
    * If ALL is specified, the DNS resolver will perform a lookup for both IPv4 and IPv6 families,
    * and return all resolved addresses. When this is used, Happy Eyeballs will be enabled for
    * upstream connections. Refer to :ref:`Happy Eyeballs Support <arch_overview_happy_eyeballs>`
    * for more information.
    * For cluster types other than
    * :ref:`STRICT_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.STRICT_DNS>` and
    * :ref:`LOGICAL_DNS<envoy_v3_api_enum_value_config.cluster.v3.Cluster.DiscoveryType.LOGICAL_DNS>`,
    * this setting is
    * ignored.
    * [#next-major-version: deprecate AUTO in favor of a V6_PREFERRED option.]
    */
  sealed abstract class DnsLookupFamily(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = DnsLookupFamily
    def isAuto: _root_.scala.Boolean = false
    def isV4Only: _root_.scala.Boolean = false
    def isV6Only: _root_.scala.Boolean = false
    def isV4Preferred: _root_.scala.Boolean = false
    def isAll: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[DnsLookupFamily] = io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily
    final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily.Recognized])
  }
  
  object DnsLookupFamily extends _root_.scalapb.GeneratedEnumCompanion[DnsLookupFamily] {
    sealed trait Recognized extends DnsLookupFamily
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[DnsLookupFamily] = this
    
    @SerialVersionUID(0L)
    case object AUTO extends DnsLookupFamily(0) with DnsLookupFamily.Recognized {
      val index = 0
      val name = "AUTO"
      override def isAuto: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    case object V4_ONLY extends DnsLookupFamily(1) with DnsLookupFamily.Recognized {
      val index = 1
      val name = "V4_ONLY"
      override def isV4Only: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    case object V6_ONLY extends DnsLookupFamily(2) with DnsLookupFamily.Recognized {
      val index = 2
      val name = "V6_ONLY"
      override def isV6Only: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    case object V4_PREFERRED extends DnsLookupFamily(3) with DnsLookupFamily.Recognized {
      val index = 3
      val name = "V4_PREFERRED"
      override def isV4Preferred: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    case object ALL extends DnsLookupFamily(4) with DnsLookupFamily.Recognized {
      val index = 4
      val name = "ALL"
      override def isAll: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends DnsLookupFamily(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values = scala.collection.immutable.Seq(AUTO, V4_ONLY, V6_ONLY, V4_PREFERRED, ALL)
    def fromValue(__value: _root_.scala.Int): DnsLookupFamily = __value match {
      case 0 => AUTO
      case 1 => V4_ONLY
      case 2 => V6_ONLY
      case 3 => V4_PREFERRED
      case 4 => ALL
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getEnumTypes().get(2)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.enums(2)
  }
  sealed abstract class ClusterProtocolSelection(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
    type EnumType = ClusterProtocolSelection
    def isUseConfiguredProtocol: _root_.scala.Boolean = false
    def isUseDownstreamProtocol: _root_.scala.Boolean = false
    def companion: _root_.scalapb.GeneratedEnumCompanion[ClusterProtocolSelection] = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection
    final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection.Recognized])
  }
  
  object ClusterProtocolSelection extends _root_.scalapb.GeneratedEnumCompanion[ClusterProtocolSelection] {
    sealed trait Recognized extends ClusterProtocolSelection
    implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[ClusterProtocolSelection] = this
    
    /** Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2).
      * If :ref:`http2_protocol_options <envoy_v3_api_field_config.cluster.v3.Cluster.http2_protocol_options>` are
      * present, HTTP2 will be used, otherwise HTTP1.1 will be used.
      */
    @SerialVersionUID(0L)
    case object USE_CONFIGURED_PROTOCOL extends ClusterProtocolSelection(0) with ClusterProtocolSelection.Recognized {
      val index = 0
      val name = "USE_CONFIGURED_PROTOCOL"
      override def isUseConfiguredProtocol: _root_.scala.Boolean = true
    }
    
    /** Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection.
      */
    @SerialVersionUID(0L)
    case object USE_DOWNSTREAM_PROTOCOL extends ClusterProtocolSelection(1) with ClusterProtocolSelection.Recognized {
      val index = 1
      val name = "USE_DOWNSTREAM_PROTOCOL"
      override def isUseDownstreamProtocol: _root_.scala.Boolean = true
    }
    
    @SerialVersionUID(0L)
    final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends ClusterProtocolSelection(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
    lazy val values = scala.collection.immutable.Seq(USE_CONFIGURED_PROTOCOL, USE_DOWNSTREAM_PROTOCOL)
    def fromValue(__value: _root_.scala.Int): ClusterProtocolSelection = __value match {
      case 0 => USE_CONFIGURED_PROTOCOL
      case 1 => USE_DOWNSTREAM_PROTOCOL
      case __other => Unrecognized(__other)
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getEnumTypes().get(3)
    def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.enums(3)
  }
  sealed trait ClusterDiscoveryType extends _root_.scalapb.GeneratedOneof {
    def isEmpty: _root_.scala.Boolean = false
    def isDefined: _root_.scala.Boolean = true
    def isType: _root_.scala.Boolean = false
    def isClusterType: _root_.scala.Boolean = false
    def `type`: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType] = _root_.scala.None
    def clusterType: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] = _root_.scala.None
  }
  object ClusterDiscoveryType {
    @SerialVersionUID(0L)
    case object Empty extends io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType {
      type ValueType = _root_.scala.Nothing
      override def isEmpty: _root_.scala.Boolean = true
      override def isDefined: _root_.scala.Boolean = false
      override def number: _root_.scala.Int = 0
      override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
    }
  
    @SerialVersionUID(0L)
    final case class Type(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType
      override def isType: _root_.scala.Boolean = true
      override def `type`: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType] = Some(value)
      override def number: _root_.scala.Int = 2
    }
    @SerialVersionUID(0L)
    final case class ClusterType(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType
      override def isClusterType: _root_.scala.Boolean = true
      override def clusterType: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] = Some(value)
      override def number: _root_.scala.Int = 38
    }
  }
  sealed trait LbConfig extends _root_.scalapb.GeneratedOneof {
    def isEmpty: _root_.scala.Boolean = false
    def isDefined: _root_.scala.Boolean = true
    def isRingHashLbConfig: _root_.scala.Boolean = false
    def isMaglevLbConfig: _root_.scala.Boolean = false
    def isOriginalDstLbConfig: _root_.scala.Boolean = false
    def isLeastRequestLbConfig: _root_.scala.Boolean = false
    def isRoundRobinLbConfig: _root_.scala.Boolean = false
    def ringHashLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] = _root_.scala.None
    def maglevLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] = _root_.scala.None
    def originalDstLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] = _root_.scala.None
    def leastRequestLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] = _root_.scala.None
    def roundRobinLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] = _root_.scala.None
  }
  object LbConfig {
    @SerialVersionUID(0L)
    case object Empty extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = _root_.scala.Nothing
      override def isEmpty: _root_.scala.Boolean = true
      override def isDefined: _root_.scala.Boolean = false
      override def number: _root_.scala.Int = 0
      override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
    }
  
    @SerialVersionUID(0L)
    final case class RingHashLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig
      override def isRingHashLbConfig: _root_.scala.Boolean = true
      override def ringHashLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] = Some(value)
      override def number: _root_.scala.Int = 23
    }
    @SerialVersionUID(0L)
    final case class MaglevLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig
      override def isMaglevLbConfig: _root_.scala.Boolean = true
      override def maglevLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] = Some(value)
      override def number: _root_.scala.Int = 52
    }
    @SerialVersionUID(0L)
    final case class OriginalDstLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig
      override def isOriginalDstLbConfig: _root_.scala.Boolean = true
      override def originalDstLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] = Some(value)
      override def number: _root_.scala.Int = 34
    }
    @SerialVersionUID(0L)
    final case class LeastRequestLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig
      override def isLeastRequestLbConfig: _root_.scala.Boolean = true
      override def leastRequestLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] = Some(value)
      override def number: _root_.scala.Int = 37
    }
    @SerialVersionUID(0L)
    final case class RoundRobinLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig {
      type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig
      override def isRoundRobinLbConfig: _root_.scala.Boolean = true
      override def roundRobinLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] = Some(value)
      override def number: _root_.scala.Int = 56
    }
  }
  /** TransportSocketMatch specifies what transport socket config will be used
    * when the match conditions are satisfied.
    *
    * @param name
    *   The name of the match, used in stats generation.
    * @param match
    *   Optional endpoint metadata match criteria.
    *   The connection to the endpoint with metadata matching what is set in this field
    *   will use the transport socket configuration specified here.
    *   The endpoint's metadata entry in *envoy.transport_socket_match* is used to match
    *   against the values specified in this field.
    * @param transportSocket
    *   The configuration of the transport socket.
    *   [#extension-category: envoy.transport_sockets.upstream]
    */
  @SerialVersionUID(0L)
  final case class TransportSocketMatch(
      name: _root_.scala.Predef.String = "",
      `match`: _root_.scala.Option[com.google.protobuf.struct.Struct] = _root_.scala.None,
      transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[TransportSocketMatch] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = name
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        if (`match`.isDefined) {
          val __value = `match`.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (transportSocket.isDefined) {
          val __value = transportSocket.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = name
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        `match`.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        transportSocket.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def withName(__v: _root_.scala.Predef.String): TransportSocketMatch = copy(name = __v)
      def getMatch: com.google.protobuf.struct.Struct = `match`.getOrElse(com.google.protobuf.struct.Struct.defaultInstance)
      def clearMatch: TransportSocketMatch = copy(`match` = _root_.scala.None)
      def withMatch(__v: com.google.protobuf.struct.Struct): TransportSocketMatch = copy(`match` = Option(__v))
      def getTransportSocket: io.envoyproxy.envoy.config.core.v3.TransportSocket = transportSocket.getOrElse(io.envoyproxy.envoy.config.core.v3.TransportSocket.defaultInstance)
      def clearTransportSocket: TransportSocketMatch = copy(transportSocket = _root_.scala.None)
      def withTransportSocket(__v: io.envoyproxy.envoy.config.core.v3.TransportSocket): TransportSocketMatch = copy(transportSocket = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = name
            if (__t != "") __t else null
          }
          case 2 => `match`.orNull
          case 3 => transportSocket.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(name)
          case 2 => `match`.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => transportSocket.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.TransportSocketMatch])
  }
  
  object TransportSocketMatch extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch = {
      var __name: _root_.scala.Predef.String = ""
      var __match: _root_.scala.Option[com.google.protobuf.struct.Struct] = _root_.scala.None
      var __transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __name = _input__.readStringRequireUtf8()
          case 18 =>
            __match = Option(__match.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.struct.Struct](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __transportSocket = Option(__transportSocket.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.TransportSocket](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch(
          name = __name,
          `match` = __match,
          transportSocket = __transportSocket,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch(
          name = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          `match` = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.struct.Struct]]),
          transportSocket = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(0)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(0)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = com.google.protobuf.struct.Struct
        case 3 => __out = io.envoyproxy.envoy.config.core.v3.TransportSocket
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch(
      name = "",
      `match` = _root_.scala.None,
      transportSocket = _root_.scala.None
    )
    implicit class TransportSocketMatchLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch](_l) {
      def name: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.name)((c_, f_) => c_.copy(name = f_))
      def `match`: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.struct.Struct] = field(_.getMatch)((c_, f_) => c_.copy(`match` = Option(f_)))
      def optionalMatch: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.struct.Struct]] = field(_.`match`)((c_, f_) => c_.copy(`match` = f_))
      def transportSocket: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.TransportSocket] = field(_.getTransportSocket)((c_, f_) => c_.copy(transportSocket = Option(f_)))
      def optionalTransportSocket: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket]] = field(_.transportSocket)((c_, f_) => c_.copy(transportSocket = f_))
    }
    final val NAME_FIELD_NUMBER = 1
    final val MATCH_FIELD_NUMBER = 2
    final val TRANSPORT_SOCKET_FIELD_NUMBER = 3
    def of(
      name: _root_.scala.Predef.String,
      `match`: _root_.scala.Option[com.google.protobuf.struct.Struct],
      transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch(
      name,
      `match`,
      transportSocket
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.TransportSocketMatch])
  }
  
  /** Extended cluster type.
    *
    * @param name
    *   The type of the cluster to instantiate. The name must match a supported cluster type.
    * @param typedConfig
    *   Cluster specific configuration which depends on the cluster being instantiated.
    *   See the supported cluster for further documentation.
    *   [#extension-category: envoy.clusters]
    */
  @SerialVersionUID(0L)
  final case class CustomClusterType(
      name: _root_.scala.Predef.String = "",
      typedConfig: _root_.scala.Option[com.google.protobuf.any.Any] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CustomClusterType] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = name
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        if (typedConfig.isDefined) {
          val __value = typedConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = name
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        typedConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def withName(__v: _root_.scala.Predef.String): CustomClusterType = copy(name = __v)
      def getTypedConfig: com.google.protobuf.any.Any = typedConfig.getOrElse(com.google.protobuf.any.Any.defaultInstance)
      def clearTypedConfig: CustomClusterType = copy(typedConfig = _root_.scala.None)
      def withTypedConfig(__v: com.google.protobuf.any.Any): CustomClusterType = copy(typedConfig = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = name
            if (__t != "") __t else null
          }
          case 2 => typedConfig.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(name)
          case 2 => typedConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.CustomClusterType])
  }
  
  object CustomClusterType extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType = {
      var __name: _root_.scala.Predef.String = ""
      var __typedConfig: _root_.scala.Option[com.google.protobuf.any.Any] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __name = _input__.readStringRequireUtf8()
          case 18 =>
            __typedConfig = Option(__typedConfig.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.any.Any](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType(
          name = __name,
          typedConfig = __typedConfig,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType(
          name = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          typedConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.any.Any]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(1)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(1)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = com.google.protobuf.any.Any
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType(
      name = "",
      typedConfig = _root_.scala.None
    )
    implicit class CustomClusterTypeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType](_l) {
      def name: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.name)((c_, f_) => c_.copy(name = f_))
      def typedConfig: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.any.Any] = field(_.getTypedConfig)((c_, f_) => c_.copy(typedConfig = Option(f_)))
      def optionalTypedConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.any.Any]] = field(_.typedConfig)((c_, f_) => c_.copy(typedConfig = f_))
    }
    final val NAME_FIELD_NUMBER = 1
    final val TYPED_CONFIG_FIELD_NUMBER = 2
    def of(
      name: _root_.scala.Predef.String,
      typedConfig: _root_.scala.Option[com.google.protobuf.any.Any]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType(
      name,
      typedConfig
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.CustomClusterType])
  }
  
  /** Only valid when discovery type is EDS.
    *
    * @param edsConfig
    *   Configuration for the source of EDS updates for this Cluster.
    * @param serviceName
    *   Optional alternative to cluster name to present to EDS. This does not
    *   have the same restrictions as cluster name, i.e. it may be arbitrary
    *   length. This may be a xdstp:// URL.
    */
  @SerialVersionUID(0L)
  final case class EdsClusterConfig(
      edsConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource] = _root_.scala.None,
      serviceName: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[EdsClusterConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (edsConfig.isDefined) {
          val __value = edsConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        
        {
          val __value = serviceName
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        edsConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = serviceName
          if (!__v.isEmpty) {
            _output__.writeString(2, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def getEdsConfig: io.envoyproxy.envoy.config.core.v3.ConfigSource = edsConfig.getOrElse(io.envoyproxy.envoy.config.core.v3.ConfigSource.defaultInstance)
      def clearEdsConfig: EdsClusterConfig = copy(edsConfig = _root_.scala.None)
      def withEdsConfig(__v: io.envoyproxy.envoy.config.core.v3.ConfigSource): EdsClusterConfig = copy(edsConfig = Option(__v))
      def withServiceName(__v: _root_.scala.Predef.String): EdsClusterConfig = copy(serviceName = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => edsConfig.orNull
          case 2 => {
            val __t = serviceName
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => edsConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => _root_.scalapb.descriptors.PString(serviceName)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.EdsClusterConfig])
  }
  
  object EdsClusterConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig = {
      var __edsConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource] = _root_.scala.None
      var __serviceName: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __edsConfig = Option(__edsConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.ConfigSource](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __serviceName = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig(
          edsConfig = __edsConfig,
          serviceName = __serviceName,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig(
          edsConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource]]),
          serviceName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(2)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(2)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = io.envoyproxy.envoy.config.core.v3.ConfigSource
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig(
      edsConfig = _root_.scala.None,
      serviceName = ""
    )
    implicit class EdsClusterConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig](_l) {
      def edsConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.ConfigSource] = field(_.getEdsConfig)((c_, f_) => c_.copy(edsConfig = Option(f_)))
      def optionalEdsConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource]] = field(_.edsConfig)((c_, f_) => c_.copy(edsConfig = f_))
      def serviceName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.serviceName)((c_, f_) => c_.copy(serviceName = f_))
    }
    final val EDS_CONFIG_FIELD_NUMBER = 1
    final val SERVICE_NAME_FIELD_NUMBER = 2
    def of(
      edsConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource],
      serviceName: _root_.scala.Predef.String
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig(
      edsConfig,
      serviceName
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.EdsClusterConfig])
  }
  
  /** Optionally divide the endpoints in this cluster into subsets defined by
    * endpoint metadata and selected by route and weighted cluster metadata.
    * [#next-free-field: 8]
    *
    * @param fallbackPolicy
    *   The behavior used when no endpoint subset matches the selected route's
    *   metadata. The value defaults to
    *   :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
    * @param defaultSubset
    *   Specifies the default subset of endpoints used during fallback if
    *   fallback_policy is
    *   :ref:`DEFAULT_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.DEFAULT_SUBSET>`.
    *   Each field in default_subset is
    *   compared to the matching LbEndpoint.Metadata under the *envoy.lb*
    *   namespace. It is valid for no hosts to match, in which case the behavior
    *   is the same as a fallback_policy of
    *   :ref:`NO_FALLBACK<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK>`.
    * @param subsetSelectors
    *   For each entry, LbEndpoint.Metadata's
    *   *envoy.lb* namespace is traversed and a subset is created for each unique
    *   combination of key and value. For example:
    *  
    *   .. code-block:: json
    *  
    *     { "subset_selectors": [
    *         { "keys": [ "version" ] },
    *         { "keys": [ "stage", "hardware_type" ] }
    *     ]}
    *  
    *   A subset is matched when the metadata from the selected route and
    *   weighted cluster contains the same keys and values as the subset's
    *   metadata. The same host may appear in multiple subsets.
    * @param localityWeightAware
    *   If true, routing to subsets will take into account the localities and locality weights of the
    *   endpoints when making the routing decision.
    *  
    *   There are some potential pitfalls associated with enabling this feature, as the resulting
    *   traffic split after applying both a subset match and locality weights might be undesirable.
    *  
    *   Consider for example a situation in which you have 50/50 split across two localities X/Y
    *   which have 100 hosts each without subsetting. If the subset LB results in X having only 1
    *   host selected but Y having 100, then a lot more load is being dumped on the single host in X
    *   than originally anticipated in the load balancing assignment delivered via EDS.
    * @param scaleLocalityWeight
    *   When used with locality_weight_aware, scales the weight of each locality by the ratio
    *   of hosts in the subset vs hosts in the original subset. This aims to even out the load
    *   going to an individual locality if said locality is disproportionately affected by the
    *   subset predicate.
    * @param panicModeAny
    *   If true, when a fallback policy is configured and its corresponding subset fails to find
    *   a host this will cause any host to be selected instead.
    *  
    *   This is useful when using the default subset as the fallback policy, given the default
    *   subset might become empty. With this option enabled, if that happens the LB will attempt
    *   to select a host from the entire cluster.
    * @param listAsAny
    *   If true, metadata specified for a metadata key will be matched against the corresponding
    *   endpoint metadata if the endpoint metadata matches the value exactly OR it is a list value
    *   and any of the elements in the list matches the criteria.
    */
  @SerialVersionUID(0L)
  final case class LbSubsetConfig(
      fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK,
      defaultSubset: _root_.scala.Option[com.google.protobuf.struct.Struct] = _root_.scala.None,
      subsetSelectors: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector] = _root_.scala.Seq.empty,
      localityWeightAware: _root_.scala.Boolean = false,
      scaleLocalityWeight: _root_.scala.Boolean = false,
      panicModeAny: _root_.scala.Boolean = false,
      listAsAny: _root_.scala.Boolean = false,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[LbSubsetConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = fallbackPolicy.value
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(1, __value)
          }
        };
        if (defaultSubset.isDefined) {
          val __value = defaultSubset.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        subsetSelectors.foreach { __item =>
          val __value = __item
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        
        {
          val __value = localityWeightAware
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(4, __value)
          }
        };
        
        {
          val __value = scaleLocalityWeight
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(5, __value)
          }
        };
        
        {
          val __value = panicModeAny
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(6, __value)
          }
        };
        
        {
          val __value = listAsAny
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(7, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = fallbackPolicy.value
          if (__v != 0) {
            _output__.writeEnum(1, __v)
          }
        };
        defaultSubset.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        subsetSelectors.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = localityWeightAware
          if (__v != false) {
            _output__.writeBool(4, __v)
          }
        };
        {
          val __v = scaleLocalityWeight
          if (__v != false) {
            _output__.writeBool(5, __v)
          }
        };
        {
          val __v = panicModeAny
          if (__v != false) {
            _output__.writeBool(6, __v)
          }
        };
        {
          val __v = listAsAny
          if (__v != false) {
            _output__.writeBool(7, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withFallbackPolicy(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy): LbSubsetConfig = copy(fallbackPolicy = __v)
      def getDefaultSubset: com.google.protobuf.struct.Struct = defaultSubset.getOrElse(com.google.protobuf.struct.Struct.defaultInstance)
      def clearDefaultSubset: LbSubsetConfig = copy(defaultSubset = _root_.scala.None)
      def withDefaultSubset(__v: com.google.protobuf.struct.Struct): LbSubsetConfig = copy(defaultSubset = Option(__v))
      def clearSubsetSelectors = copy(subsetSelectors = _root_.scala.Seq.empty)
      def addSubsetSelectors(__vs: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector *): LbSubsetConfig = addAllSubsetSelectors(__vs)
      def addAllSubsetSelectors(__vs: Iterable[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]): LbSubsetConfig = copy(subsetSelectors = subsetSelectors ++ __vs)
      def withSubsetSelectors(__v: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]): LbSubsetConfig = copy(subsetSelectors = __v)
      def withLocalityWeightAware(__v: _root_.scala.Boolean): LbSubsetConfig = copy(localityWeightAware = __v)
      def withScaleLocalityWeight(__v: _root_.scala.Boolean): LbSubsetConfig = copy(scaleLocalityWeight = __v)
      def withPanicModeAny(__v: _root_.scala.Boolean): LbSubsetConfig = copy(panicModeAny = __v)
      def withListAsAny(__v: _root_.scala.Boolean): LbSubsetConfig = copy(listAsAny = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = fallbackPolicy.javaValueDescriptor
            if (__t.getNumber() != 0) __t else null
          }
          case 2 => defaultSubset.orNull
          case 3 => subsetSelectors
          case 4 => {
            val __t = localityWeightAware
            if (__t != false) __t else null
          }
          case 5 => {
            val __t = scaleLocalityWeight
            if (__t != false) __t else null
          }
          case 6 => {
            val __t = panicModeAny
            if (__t != false) __t else null
          }
          case 7 => {
            val __t = listAsAny
            if (__t != false) __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PEnum(fallbackPolicy.scalaValueDescriptor)
          case 2 => defaultSubset.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => _root_.scalapb.descriptors.PRepeated(subsetSelectors.iterator.map(_.toPMessage).toVector)
          case 4 => _root_.scalapb.descriptors.PBoolean(localityWeightAware)
          case 5 => _root_.scalapb.descriptors.PBoolean(scaleLocalityWeight)
          case 6 => _root_.scalapb.descriptors.PBoolean(panicModeAny)
          case 7 => _root_.scalapb.descriptors.PBoolean(listAsAny)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.LbSubsetConfig])
  }
  
  object LbSubsetConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig = {
      var __fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK
      var __defaultSubset: _root_.scala.Option[com.google.protobuf.struct.Struct] = _root_.scala.None
      val __subsetSelectors: _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector] = new _root_.scala.collection.immutable.VectorBuilder[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]
      var __localityWeightAware: _root_.scala.Boolean = false
      var __scaleLocalityWeight: _root_.scala.Boolean = false
      var __panicModeAny: _root_.scala.Boolean = false
      var __listAsAny: _root_.scala.Boolean = false
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 8 =>
            __fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.fromValue(_input__.readEnum())
          case 18 =>
            __defaultSubset = Option(__defaultSubset.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.struct.Struct](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __subsetSelectors += _root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector](_input__)
          case 32 =>
            __localityWeightAware = _input__.readBool()
          case 40 =>
            __scaleLocalityWeight = _input__.readBool()
          case 48 =>
            __panicModeAny = _input__.readBool()
          case 56 =>
            __listAsAny = _input__.readBool()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig(
          fallbackPolicy = __fallbackPolicy,
          defaultSubset = __defaultSubset,
          subsetSelectors = __subsetSelectors.result(),
          localityWeightAware = __localityWeightAware,
          scaleLocalityWeight = __scaleLocalityWeight,
          panicModeAny = __panicModeAny,
          listAsAny = __listAsAny,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig(
          fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK.scalaValueDescriptor).number),
          defaultSubset = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.struct.Struct]]),
          subsetSelectors = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]]).getOrElse(_root_.scala.Seq.empty),
          localityWeightAware = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          scaleLocalityWeight = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          panicModeAny = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          listAsAny = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).map(_.as[_root_.scala.Boolean]).getOrElse(false)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(3)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(3)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = com.google.protobuf.struct.Struct
        case 3 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
      Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
        _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector
      )
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 1 => io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy
      }
    }
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig(
      fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.NO_FALLBACK,
      defaultSubset = _root_.scala.None,
      subsetSelectors = _root_.scala.Seq.empty,
      localityWeightAware = false,
      scaleLocalityWeight = false,
      panicModeAny = false,
      listAsAny = false
    )
    /** If NO_FALLBACK is selected, a result
      * equivalent to no healthy hosts is reported. If ANY_ENDPOINT is selected,
      * any cluster endpoint may be returned (subject to policy, health checks,
      * etc). If DEFAULT_SUBSET is selected, load balancing is performed over the
      * endpoints matching the values from the default_subset field.
      */
    sealed abstract class LbSubsetFallbackPolicy(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
      type EnumType = LbSubsetFallbackPolicy
      def isNoFallback: _root_.scala.Boolean = false
      def isAnyEndpoint: _root_.scala.Boolean = false
      def isDefaultSubset: _root_.scala.Boolean = false
      def companion: _root_.scalapb.GeneratedEnumCompanion[LbSubsetFallbackPolicy] = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy
      final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy.Recognized])
    }
    
    object LbSubsetFallbackPolicy extends _root_.scalapb.GeneratedEnumCompanion[LbSubsetFallbackPolicy] {
      sealed trait Recognized extends LbSubsetFallbackPolicy
      implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[LbSubsetFallbackPolicy] = this
      
      @SerialVersionUID(0L)
      case object NO_FALLBACK extends LbSubsetFallbackPolicy(0) with LbSubsetFallbackPolicy.Recognized {
        val index = 0
        val name = "NO_FALLBACK"
        override def isNoFallback: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object ANY_ENDPOINT extends LbSubsetFallbackPolicy(1) with LbSubsetFallbackPolicy.Recognized {
        val index = 1
        val name = "ANY_ENDPOINT"
        override def isAnyEndpoint: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object DEFAULT_SUBSET extends LbSubsetFallbackPolicy(2) with LbSubsetFallbackPolicy.Recognized {
        val index = 2
        val name = "DEFAULT_SUBSET"
        override def isDefaultSubset: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends LbSubsetFallbackPolicy(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
      lazy val values = scala.collection.immutable.Seq(NO_FALLBACK, ANY_ENDPOINT, DEFAULT_SUBSET)
      def fromValue(__value: _root_.scala.Int): LbSubsetFallbackPolicy = __value match {
        case 0 => NO_FALLBACK
        case 1 => ANY_ENDPOINT
        case 2 => DEFAULT_SUBSET
        case __other => Unrecognized(__other)
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.javaDescriptor.getEnumTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.scalaDescriptor.enums(0)
    }
    /** Specifications for subsets.
      *
      * @param keys
      *   List of keys to match with the weighted cluster metadata.
      * @param singleHostPerSubset
      *   Selects a mode of operation in which each subset has only one host. This mode uses the same rules for
      *   choosing a host, but updating hosts is faster, especially for large numbers of hosts.
      *  
      *   If a match is found to a host, that host will be used regardless of priority levels, unless the host is unhealthy.
      *  
      *   Currently, this mode is only supported if `subset_selectors` has only one entry, and `keys` contains
      *   only one entry.
      *  
      *   When this mode is enabled, configurations that contain more than one host with the same metadata value for the single key in `keys`
      *   will use only one of the hosts with the given key; no requests will be routed to the others. The cluster gauge
      *   :ref:`lb_subsets_single_host_per_subset_duplicate<config_cluster_manager_cluster_stats_subset_lb>` indicates how many duplicates are
      *   present in the current configuration.
      * @param fallbackPolicy
      *   The behavior used when no endpoint subset matches the selected route's
      *   metadata.
      * @param fallbackKeysSubset
      *   Subset of
      *   :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` used by
      *   :ref:`KEYS_SUBSET<envoy_v3_api_enum_value_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.KEYS_SUBSET>`
      *   fallback policy.
      *   It has to be a non empty list if KEYS_SUBSET fallback policy is selected.
      *   For any other fallback policy the parameter is not used and should not be set.
      *   Only values also present in
      *   :ref:`keys<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.keys>` are allowed, but
      *   `fallback_keys_subset` cannot be equal to `keys`.
      */
    @SerialVersionUID(0L)
    final case class LbSubsetSelector(
        keys: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
        singleHostPerSubset: _root_.scala.Boolean = false,
        fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.NOT_DEFINED,
        fallbackKeysSubset: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[LbSubsetSelector] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          keys.foreach { __item =>
            val __value = __item
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
          
          {
            val __value = singleHostPerSubset
            if (__value != false) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(4, __value)
            }
          };
          
          {
            val __value = fallbackPolicy.value
            if (__value != 0) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(2, __value)
            }
          };
          fallbackKeysSubset.foreach { __item =>
            val __value = __item
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(3, __value)
          }
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          keys.foreach { __v =>
            val __m = __v
            _output__.writeString(1, __m)
          };
          {
            val __v = fallbackPolicy.value
            if (__v != 0) {
              _output__.writeEnum(2, __v)
            }
          };
          fallbackKeysSubset.foreach { __v =>
            val __m = __v
            _output__.writeString(3, __m)
          };
          {
            val __v = singleHostPerSubset
            if (__v != false) {
              _output__.writeBool(4, __v)
            }
          };
          unknownFields.writeTo(_output__)
        }
        def clearKeys = copy(keys = _root_.scala.Seq.empty)
        def addKeys(__vs: _root_.scala.Predef.String *): LbSubsetSelector = addAllKeys(__vs)
        def addAllKeys(__vs: Iterable[_root_.scala.Predef.String]): LbSubsetSelector = copy(keys = keys ++ __vs)
        def withKeys(__v: _root_.scala.Seq[_root_.scala.Predef.String]): LbSubsetSelector = copy(keys = __v)
        def withSingleHostPerSubset(__v: _root_.scala.Boolean): LbSubsetSelector = copy(singleHostPerSubset = __v)
        def withFallbackPolicy(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy): LbSubsetSelector = copy(fallbackPolicy = __v)
        def clearFallbackKeysSubset = copy(fallbackKeysSubset = _root_.scala.Seq.empty)
        def addFallbackKeysSubset(__vs: _root_.scala.Predef.String *): LbSubsetSelector = addAllFallbackKeysSubset(__vs)
        def addAllFallbackKeysSubset(__vs: Iterable[_root_.scala.Predef.String]): LbSubsetSelector = copy(fallbackKeysSubset = fallbackKeysSubset ++ __vs)
        def withFallbackKeysSubset(__v: _root_.scala.Seq[_root_.scala.Predef.String]): LbSubsetSelector = copy(fallbackKeysSubset = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => keys
            case 4 => {
              val __t = singleHostPerSubset
              if (__t != false) __t else null
            }
            case 2 => {
              val __t = fallbackPolicy.javaValueDescriptor
              if (__t.getNumber() != 0) __t else null
            }
            case 3 => fallbackKeysSubset
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PRepeated(keys.iterator.map(_root_.scalapb.descriptors.PString(_)).toVector)
            case 4 => _root_.scalapb.descriptors.PBoolean(singleHostPerSubset)
            case 2 => _root_.scalapb.descriptors.PEnum(fallbackPolicy.scalaValueDescriptor)
            case 3 => _root_.scalapb.descriptors.PRepeated(fallbackKeysSubset.iterator.map(_root_.scalapb.descriptors.PString(_)).toVector)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector
        // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector])
    }
    
    object LbSubsetSelector extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector = {
        val __keys: _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] = new _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String]
        var __singleHostPerSubset: _root_.scala.Boolean = false
        var __fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.NOT_DEFINED
        val __fallbackKeysSubset: _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] = new _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String]
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __keys += _input__.readStringRequireUtf8()
            case 32 =>
              __singleHostPerSubset = _input__.readBool()
            case 16 =>
              __fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.fromValue(_input__.readEnum())
            case 26 =>
              __fallbackKeysSubset += _input__.readStringRequireUtf8()
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector(
            keys = __keys.result(),
            singleHostPerSubset = __singleHostPerSubset,
            fallbackPolicy = __fallbackPolicy,
            fallbackKeysSubset = __fallbackKeysSubset.result(),
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector(
            keys = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[_root_.scala.Predef.String]]).getOrElse(_root_.scala.Seq.empty),
            singleHostPerSubset = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
            fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.NOT_DEFINED.scalaValueDescriptor).number),
            fallbackKeysSubset = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Seq[_root_.scala.Predef.String]]).getOrElse(_root_.scala.Seq.empty)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.javaDescriptor.getNestedTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.scalaDescriptor.nestedMessages(0)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 2 => io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy
        }
      }
      lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector(
        keys = _root_.scala.Seq.empty,
        singleHostPerSubset = false,
        fallbackPolicy = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.NOT_DEFINED,
        fallbackKeysSubset = _root_.scala.Seq.empty
      )
      /** Allows to override top level fallback policy per selector.
        */
      sealed abstract class LbSubsetSelectorFallbackPolicy(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
        type EnumType = LbSubsetSelectorFallbackPolicy
        def isNotDefined: _root_.scala.Boolean = false
        def isNoFallback: _root_.scala.Boolean = false
        def isAnyEndpoint: _root_.scala.Boolean = false
        def isDefaultSubset: _root_.scala.Boolean = false
        def isKeysSubset: _root_.scala.Boolean = false
        def companion: _root_.scalapb.GeneratedEnumCompanion[LbSubsetSelectorFallbackPolicy] = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy
        final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy.Recognized])
      }
      
      object LbSubsetSelectorFallbackPolicy extends _root_.scalapb.GeneratedEnumCompanion[LbSubsetSelectorFallbackPolicy] {
        sealed trait Recognized extends LbSubsetSelectorFallbackPolicy
        implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[LbSubsetSelectorFallbackPolicy] = this
        
        /** If NOT_DEFINED top level config fallback policy is used instead.
          */
        @SerialVersionUID(0L)
        case object NOT_DEFINED extends LbSubsetSelectorFallbackPolicy(0) with LbSubsetSelectorFallbackPolicy.Recognized {
          val index = 0
          val name = "NOT_DEFINED"
          override def isNotDefined: _root_.scala.Boolean = true
        }
        
        /** If NO_FALLBACK is selected, a result equivalent to no healthy hosts is reported.
          */
        @SerialVersionUID(0L)
        case object NO_FALLBACK extends LbSubsetSelectorFallbackPolicy(1) with LbSubsetSelectorFallbackPolicy.Recognized {
          val index = 1
          val name = "NO_FALLBACK"
          override def isNoFallback: _root_.scala.Boolean = true
        }
        
        /** If ANY_ENDPOINT is selected, any cluster endpoint may be returned
          * (subject to policy, health checks, etc).
          */
        @SerialVersionUID(0L)
        case object ANY_ENDPOINT extends LbSubsetSelectorFallbackPolicy(2) with LbSubsetSelectorFallbackPolicy.Recognized {
          val index = 2
          val name = "ANY_ENDPOINT"
          override def isAnyEndpoint: _root_.scala.Boolean = true
        }
        
        /** If DEFAULT_SUBSET is selected, load balancing is performed over the
          * endpoints matching the values from the default_subset field.
          */
        @SerialVersionUID(0L)
        case object DEFAULT_SUBSET extends LbSubsetSelectorFallbackPolicy(3) with LbSubsetSelectorFallbackPolicy.Recognized {
          val index = 3
          val name = "DEFAULT_SUBSET"
          override def isDefaultSubset: _root_.scala.Boolean = true
        }
        
        /** If KEYS_SUBSET is selected, subset selector matching is performed again with metadata
          * keys reduced to
          * :ref:`fallback_keys_subset<envoy_v3_api_field_config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.fallback_keys_subset>`.
          * It allows for a fallback to a different, less specific selector if some of the keys of
          * the selector are considered optional.
          */
        @SerialVersionUID(0L)
        case object KEYS_SUBSET extends LbSubsetSelectorFallbackPolicy(4) with LbSubsetSelectorFallbackPolicy.Recognized {
          val index = 4
          val name = "KEYS_SUBSET"
          override def isKeysSubset: _root_.scala.Boolean = true
        }
        
        @SerialVersionUID(0L)
        final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends LbSubsetSelectorFallbackPolicy(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
        lazy val values = scala.collection.immutable.Seq(NOT_DEFINED, NO_FALLBACK, ANY_ENDPOINT, DEFAULT_SUBSET, KEYS_SUBSET)
        def fromValue(__value: _root_.scala.Int): LbSubsetSelectorFallbackPolicy = __value match {
          case 0 => NOT_DEFINED
          case 1 => NO_FALLBACK
          case 2 => ANY_ENDPOINT
          case 3 => DEFAULT_SUBSET
          case 4 => KEYS_SUBSET
          case __other => Unrecognized(__other)
        }
        def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.javaDescriptor.getEnumTypes().get(0)
        def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.scalaDescriptor.enums(0)
      }
      implicit class LbSubsetSelectorLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector](_l) {
        def keys: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[_root_.scala.Predef.String]] = field(_.keys)((c_, f_) => c_.copy(keys = f_))
        def singleHostPerSubset: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.singleHostPerSubset)((c_, f_) => c_.copy(singleHostPerSubset = f_))
        def fallbackPolicy: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy] = field(_.fallbackPolicy)((c_, f_) => c_.copy(fallbackPolicy = f_))
        def fallbackKeysSubset: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[_root_.scala.Predef.String]] = field(_.fallbackKeysSubset)((c_, f_) => c_.copy(fallbackKeysSubset = f_))
      }
      final val KEYS_FIELD_NUMBER = 1
      final val SINGLE_HOST_PER_SUBSET_FIELD_NUMBER = 4
      final val FALLBACK_POLICY_FIELD_NUMBER = 2
      final val FALLBACK_KEYS_SUBSET_FIELD_NUMBER = 3
      def of(
        keys: _root_.scala.Seq[_root_.scala.Predef.String],
        singleHostPerSubset: _root_.scala.Boolean,
        fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector.LbSubsetSelectorFallbackPolicy,
        fallbackKeysSubset: _root_.scala.Seq[_root_.scala.Predef.String]
      ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector(
        keys,
        singleHostPerSubset,
        fallbackPolicy,
        fallbackKeysSubset
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector])
    }
    
    implicit class LbSubsetConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig](_l) {
      def fallbackPolicy: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy] = field(_.fallbackPolicy)((c_, f_) => c_.copy(fallbackPolicy = f_))
      def defaultSubset: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.struct.Struct] = field(_.getDefaultSubset)((c_, f_) => c_.copy(defaultSubset = Option(f_)))
      def optionalDefaultSubset: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.struct.Struct]] = field(_.defaultSubset)((c_, f_) => c_.copy(defaultSubset = f_))
      def subsetSelectors: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector]] = field(_.subsetSelectors)((c_, f_) => c_.copy(subsetSelectors = f_))
      def localityWeightAware: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.localityWeightAware)((c_, f_) => c_.copy(localityWeightAware = f_))
      def scaleLocalityWeight: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.scaleLocalityWeight)((c_, f_) => c_.copy(scaleLocalityWeight = f_))
      def panicModeAny: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.panicModeAny)((c_, f_) => c_.copy(panicModeAny = f_))
      def listAsAny: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.listAsAny)((c_, f_) => c_.copy(listAsAny = f_))
    }
    final val FALLBACK_POLICY_FIELD_NUMBER = 1
    final val DEFAULT_SUBSET_FIELD_NUMBER = 2
    final val SUBSET_SELECTORS_FIELD_NUMBER = 3
    final val LOCALITY_WEIGHT_AWARE_FIELD_NUMBER = 4
    final val SCALE_LOCALITY_WEIGHT_FIELD_NUMBER = 5
    final val PANIC_MODE_ANY_FIELD_NUMBER = 6
    final val LIST_AS_ANY_FIELD_NUMBER = 7
    def of(
      fallbackPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy,
      defaultSubset: _root_.scala.Option[com.google.protobuf.struct.Struct],
      subsetSelectors: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig.LbSubsetSelector],
      localityWeightAware: _root_.scala.Boolean,
      scaleLocalityWeight: _root_.scala.Boolean,
      panicModeAny: _root_.scala.Boolean,
      listAsAny: _root_.scala.Boolean
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig(
      fallbackPolicy,
      defaultSubset,
      subsetSelectors,
      localityWeightAware,
      scaleLocalityWeight,
      panicModeAny,
      listAsAny
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.LbSubsetConfig])
  }
  
  /** Configuration for :ref:`slow start mode <arch_overview_load_balancing_slow_start>`.
    *
    * @param slowStartWindow
    *   Represents the size of slow start window.
    *   If set, the newly created host remains in slow start mode starting from its creation time
    *   for the duration of slow start window.
    * @param aggression
    *   This parameter controls the speed of traffic increase over the slow start window. Defaults to 1.0,
    *   so that endpoint would get linearly increasing amount of traffic.
    *   When increasing the value for this parameter, the speed of traffic ramp-up increases non-linearly.
    *   The value of aggression parameter should be greater than 0.0.
    *   By tuning the parameter, is possible to achieve polynomial or exponential shape of ramp-up curve.
    *  
    *   During slow start window, effective weight of an endpoint would be scaled with time factor and aggression:
    *   `new_weight = weight * max(min_weight_percent, time_factor ^ (1 / aggression))`,
    *   where `time_factor=(time_since_start_seconds / slow_start_time_seconds)`.
    *  
    *   As time progresses, more and more traffic would be sent to endpoint, which is in slow start window.
    *   Once host exits slow start, time_factor and aggression no longer affect its weight.
    * @param minWeightPercent
    *   Configures the minimum percentage of origin weight that avoids too small new weight,
    *   which may cause endpoints in slow start mode receive no traffic in slow start window.
    *   If not specified, the default is 10%.
    */
  @SerialVersionUID(0L)
  final case class SlowStartConfig(
      slowStartWindow: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
      aggression: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = _root_.scala.None,
      minWeightPercent: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[SlowStartConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (slowStartWindow.isDefined) {
          val __value = slowStartWindow.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (aggression.isDefined) {
          val __value = aggression.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (minWeightPercent.isDefined) {
          val __value = minWeightPercent.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        slowStartWindow.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        aggression.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        minWeightPercent.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getSlowStartWindow: com.google.protobuf.duration.Duration = slowStartWindow.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
      def clearSlowStartWindow: SlowStartConfig = copy(slowStartWindow = _root_.scala.None)
      def withSlowStartWindow(__v: com.google.protobuf.duration.Duration): SlowStartConfig = copy(slowStartWindow = Option(__v))
      def getAggression: io.envoyproxy.envoy.config.core.v3.RuntimeDouble = aggression.getOrElse(io.envoyproxy.envoy.config.core.v3.RuntimeDouble.defaultInstance)
      def clearAggression: SlowStartConfig = copy(aggression = _root_.scala.None)
      def withAggression(__v: io.envoyproxy.envoy.config.core.v3.RuntimeDouble): SlowStartConfig = copy(aggression = Option(__v))
      def getMinWeightPercent: io.envoyproxy.envoy.`type`.v3.Percent = minWeightPercent.getOrElse(io.envoyproxy.envoy.`type`.v3.Percent.defaultInstance)
      def clearMinWeightPercent: SlowStartConfig = copy(minWeightPercent = _root_.scala.None)
      def withMinWeightPercent(__v: io.envoyproxy.envoy.`type`.v3.Percent): SlowStartConfig = copy(minWeightPercent = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => slowStartWindow.orNull
          case 2 => aggression.orNull
          case 3 => minWeightPercent.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => slowStartWindow.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => aggression.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => minWeightPercent.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.SlowStartConfig])
  }
  
  object SlowStartConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig = {
      var __slowStartWindow: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
      var __aggression: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = _root_.scala.None
      var __minWeightPercent: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __slowStartWindow = Option(__slowStartWindow.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __aggression = Option(__aggression.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.RuntimeDouble](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __minWeightPercent = Option(__minWeightPercent.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.`type`.v3.Percent](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig(
          slowStartWindow = __slowStartWindow,
          aggression = __aggression,
          minWeightPercent = __minWeightPercent,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig(
          slowStartWindow = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
          aggression = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble]]),
          minWeightPercent = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(4)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(4)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.duration.Duration
        case 2 => __out = io.envoyproxy.envoy.config.core.v3.RuntimeDouble
        case 3 => __out = io.envoyproxy.envoy.`type`.v3.Percent
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig(
      slowStartWindow = _root_.scala.None,
      aggression = _root_.scala.None,
      minWeightPercent = _root_.scala.None
    )
    implicit class SlowStartConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig](_l) {
      def slowStartWindow: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getSlowStartWindow)((c_, f_) => c_.copy(slowStartWindow = Option(f_)))
      def optionalSlowStartWindow: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.slowStartWindow)((c_, f_) => c_.copy(slowStartWindow = f_))
      def aggression: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = field(_.getAggression)((c_, f_) => c_.copy(aggression = Option(f_)))
      def optionalAggression: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble]] = field(_.aggression)((c_, f_) => c_.copy(aggression = f_))
      def minWeightPercent: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.`type`.v3.Percent] = field(_.getMinWeightPercent)((c_, f_) => c_.copy(minWeightPercent = Option(f_)))
      def optionalMinWeightPercent: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]] = field(_.minWeightPercent)((c_, f_) => c_.copy(minWeightPercent = f_))
    }
    final val SLOW_START_WINDOW_FIELD_NUMBER = 1
    final val AGGRESSION_FIELD_NUMBER = 2
    final val MIN_WEIGHT_PERCENT_FIELD_NUMBER = 3
    def of(
      slowStartWindow: _root_.scala.Option[com.google.protobuf.duration.Duration],
      aggression: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble],
      minWeightPercent: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig(
      slowStartWindow,
      aggression,
      minWeightPercent
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.SlowStartConfig])
  }
  
  /** Specific configuration for the RoundRobin load balancing policy.
    *
    * @param slowStartConfig
    *   Configuration for slow start mode.
    *   If this configuration is not set, slow start will not be not enabled.
    */
  @SerialVersionUID(0L)
  final case class RoundRobinLbConfig(
      slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[RoundRobinLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (slowStartConfig.isDefined) {
          val __value = slowStartConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        slowStartConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getSlowStartConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig = slowStartConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig.defaultInstance)
      def clearSlowStartConfig: RoundRobinLbConfig = copy(slowStartConfig = _root_.scala.None)
      def withSlowStartConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig): RoundRobinLbConfig = copy(slowStartConfig = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => slowStartConfig.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => slowStartConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.RoundRobinLbConfig])
  }
  
  object RoundRobinLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig = {
      var __slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __slowStartConfig = Option(__slowStartConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig(
          slowStartConfig = __slowStartConfig,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig(
          slowStartConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(5)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(5)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig(
      slowStartConfig = _root_.scala.None
    )
    implicit class RoundRobinLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig](_l) {
      def slowStartConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = field(_.getSlowStartConfig)((c_, f_) => c_.copy(slowStartConfig = Option(f_)))
      def optionalSlowStartConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]] = field(_.slowStartConfig)((c_, f_) => c_.copy(slowStartConfig = f_))
    }
    final val SLOW_START_CONFIG_FIELD_NUMBER = 1
    def of(
      slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig(
      slowStartConfig
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.RoundRobinLbConfig])
  }
  
  /** Specific configuration for the LeastRequest load balancing policy.
    *
    * @param choiceCount
    *   The number of random healthy hosts from which the host with the fewest active requests will
    *   be chosen. Defaults to 2 so that we perform two-choice selection if the field is not set.
    * @param activeRequestBias
    *   The following formula is used to calculate the dynamic weights when hosts have different load
    *   balancing weights:
    *  
    *   `weight = load_balancing_weight / (active_requests + 1)^active_request_bias`
    *  
    *   The larger the active request bias is, the more aggressively active requests will lower the
    *   effective weight when all host weights are not equal.
    *  
    *   `active_request_bias` must be greater than or equal to 0.0.
    *  
    *   When `active_request_bias == 0.0` the Least Request Load Balancer doesn't consider the number
    *   of active requests at the time it picks a host and behaves like the Round Robin Load
    *   Balancer.
    *  
    *   When `active_request_bias > 0.0` the Least Request Load Balancer scales the load balancing
    *   weight by the number of active requests at the time it does a pick.
    *  
    *   The value is cached for performance reasons and refreshed whenever one of the Load Balancer's
    *   host sets changes, e.g., whenever there is a host membership update or a host load balancing
    *   weight change.
    *  
    *   .. note::
    *     This setting only takes effect if all host weights are not equal.
    * @param slowStartConfig
    *   Configuration for slow start mode.
    *   If this configuration is not set, slow start will not be not enabled.
    */
  @SerialVersionUID(0L)
  final case class LeastRequestLbConfig(
      choiceCount: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None,
      activeRequestBias: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = _root_.scala.None,
      slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[LeastRequestLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (choiceCount.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toBase(choiceCount.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (activeRequestBias.isDefined) {
          val __value = activeRequestBias.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (slowStartConfig.isDefined) {
          val __value = slowStartConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        choiceCount.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toBase(__v)
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        activeRequestBias.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        slowStartConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getChoiceCount: _root_.scala.Int = choiceCount.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toCustom(com.google.protobuf.wrappers.UInt32Value.defaultInstance))
      def clearChoiceCount: LeastRequestLbConfig = copy(choiceCount = _root_.scala.None)
      def withChoiceCount(__v: _root_.scala.Int): LeastRequestLbConfig = copy(choiceCount = Option(__v))
      def getActiveRequestBias: io.envoyproxy.envoy.config.core.v3.RuntimeDouble = activeRequestBias.getOrElse(io.envoyproxy.envoy.config.core.v3.RuntimeDouble.defaultInstance)
      def clearActiveRequestBias: LeastRequestLbConfig = copy(activeRequestBias = _root_.scala.None)
      def withActiveRequestBias(__v: io.envoyproxy.envoy.config.core.v3.RuntimeDouble): LeastRequestLbConfig = copy(activeRequestBias = Option(__v))
      def getSlowStartConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig = slowStartConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig.defaultInstance)
      def clearSlowStartConfig: LeastRequestLbConfig = copy(slowStartConfig = _root_.scala.None)
      def withSlowStartConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig): LeastRequestLbConfig = copy(slowStartConfig = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => choiceCount.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toBase(_)).orNull
          case 2 => activeRequestBias.orNull
          case 3 => slowStartConfig.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => choiceCount.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => activeRequestBias.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => slowStartConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.LeastRequestLbConfig])
  }
  
  object LeastRequestLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig = {
      var __choiceCount: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
      var __activeRequestBias: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = _root_.scala.None
      var __slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __choiceCount = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toCustom(__choiceCount.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt32Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case 18 =>
            __activeRequestBias = Option(__activeRequestBias.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.RuntimeDouble](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __slowStartConfig = Option(__slowStartConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig(
          choiceCount = __choiceCount,
          activeRequestBias = __activeRequestBias,
          slowStartConfig = __slowStartConfig,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig(
          choiceCount = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt32Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig._typemapper_choiceCount.toCustom(_)),
          activeRequestBias = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble]]),
          slowStartConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(6)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(6)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.wrappers.UInt32Value
        case 2 => __out = io.envoyproxy.envoy.config.core.v3.RuntimeDouble
        case 3 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig(
      choiceCount = _root_.scala.None,
      activeRequestBias = _root_.scala.None,
      slowStartConfig = _root_.scala.None
    )
    implicit class LeastRequestLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig](_l) {
      def choiceCount: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getChoiceCount)((c_, f_) => c_.copy(choiceCount = Option(f_)))
      def optionalChoiceCount: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Int]] = field(_.choiceCount)((c_, f_) => c_.copy(choiceCount = f_))
      def activeRequestBias: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.RuntimeDouble] = field(_.getActiveRequestBias)((c_, f_) => c_.copy(activeRequestBias = Option(f_)))
      def optionalActiveRequestBias: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble]] = field(_.activeRequestBias)((c_, f_) => c_.copy(activeRequestBias = f_))
      def slowStartConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig] = field(_.getSlowStartConfig)((c_, f_) => c_.copy(slowStartConfig = Option(f_)))
      def optionalSlowStartConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]] = field(_.slowStartConfig)((c_, f_) => c_.copy(slowStartConfig = f_))
    }
    final val CHOICE_COUNT_FIELD_NUMBER = 1
    final val ACTIVE_REQUEST_BIAS_FIELD_NUMBER = 2
    final val SLOW_START_CONFIG_FIELD_NUMBER = 3
    @transient
    private[v3] val _typemapper_choiceCount: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int]]
    def of(
      choiceCount: _root_.scala.Option[_root_.scala.Int],
      activeRequestBias: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.RuntimeDouble],
      slowStartConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.SlowStartConfig]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig(
      choiceCount,
      activeRequestBias,
      slowStartConfig
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.LeastRequestLbConfig])
  }
  
  /** Specific configuration for the :ref:`RingHash<arch_overview_load_balancing_types_ring_hash>`
    * load balancing policy.
    *
    * @param minimumRingSize
    *   Minimum hash ring size. The larger the ring is (that is, the more hashes there are for each
    *   provided host) the better the request distribution will reflect the desired weights. Defaults
    *   to 1024 entries, and limited to 8M entries. See also
    *   :ref:`maximum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.maximum_ring_size>`.
    * @param hashFunction
    *   The hash function used to hash hosts onto the ketama ring. The value defaults to
    *   :ref:`XX_HASH<envoy_v3_api_enum_value_config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH>`.
    * @param maximumRingSize
    *   Maximum hash ring size. Defaults to 8M entries, and limited to 8M entries, but can be lowered
    *   to further constrain resource use. See also
    *   :ref:`minimum_ring_size<envoy_v3_api_field_config.cluster.v3.Cluster.RingHashLbConfig.minimum_ring_size>`.
    */
  @SerialVersionUID(0L)
  final case class RingHashLbConfig(
      minimumRingSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None,
      hashFunction: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH,
      maximumRingSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[RingHashLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (minimumRingSize.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toBase(minimumRingSize.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        
        {
          val __value = hashFunction.value
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(3, __value)
          }
        };
        if (maximumRingSize.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toBase(maximumRingSize.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        minimumRingSize.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toBase(__v)
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = hashFunction.value
          if (__v != 0) {
            _output__.writeEnum(3, __v)
          }
        };
        maximumRingSize.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toBase(__v)
          _output__.writeTag(4, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getMinimumRingSize: _root_.scala.Long = minimumRingSize.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toCustom(com.google.protobuf.wrappers.UInt64Value.defaultInstance))
      def clearMinimumRingSize: RingHashLbConfig = copy(minimumRingSize = _root_.scala.None)
      def withMinimumRingSize(__v: _root_.scala.Long): RingHashLbConfig = copy(minimumRingSize = Option(__v))
      def withHashFunction(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction): RingHashLbConfig = copy(hashFunction = __v)
      def getMaximumRingSize: _root_.scala.Long = maximumRingSize.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toCustom(com.google.protobuf.wrappers.UInt64Value.defaultInstance))
      def clearMaximumRingSize: RingHashLbConfig = copy(maximumRingSize = _root_.scala.None)
      def withMaximumRingSize(__v: _root_.scala.Long): RingHashLbConfig = copy(maximumRingSize = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => minimumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toBase(_)).orNull
          case 3 => {
            val __t = hashFunction.javaValueDescriptor
            if (__t.getNumber() != 0) __t else null
          }
          case 4 => maximumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toBase(_)).orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => minimumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => _root_.scalapb.descriptors.PEnum(hashFunction.scalaValueDescriptor)
          case 4 => maximumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.RingHashLbConfig])
  }
  
  object RingHashLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig = {
      var __minimumRingSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None
      var __hashFunction: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH
      var __maximumRingSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __minimumRingSize = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toCustom(__minimumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt64Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case 24 =>
            __hashFunction = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.fromValue(_input__.readEnum())
          case 34 =>
            __maximumRingSize = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toCustom(__maximumRingSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt64Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig(
          minimumRingSize = __minimumRingSize,
          hashFunction = __hashFunction,
          maximumRingSize = __maximumRingSize,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig(
          minimumRingSize = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt64Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_minimumRingSize.toCustom(_)),
          hashFunction = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH.scalaValueDescriptor).number),
          maximumRingSize = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt64Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig._typemapper_maximumRingSize.toCustom(_))
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(7)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(7)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.wrappers.UInt64Value
        case 4 => __out = com.google.protobuf.wrappers.UInt64Value
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 3 => io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction
      }
    }
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig(
      minimumRingSize = _root_.scala.None,
      hashFunction = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.XX_HASH,
      maximumRingSize = _root_.scala.None
    )
    /** The hash function used to hash hosts onto the ketama ring.
      */
    sealed abstract class HashFunction(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
      type EnumType = HashFunction
      def isXxHash: _root_.scala.Boolean = false
      def isMurmurHash2: _root_.scala.Boolean = false
      def companion: _root_.scalapb.GeneratedEnumCompanion[HashFunction] = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction
      final def asRecognized: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction.Recognized])
    }
    
    object HashFunction extends _root_.scalapb.GeneratedEnumCompanion[HashFunction] {
      sealed trait Recognized extends HashFunction
      implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[HashFunction] = this
      
      /** Use `xxHash <https://github.com/Cyan4973/xxHash>`_, this is the default hash function.
        */
      @SerialVersionUID(0L)
      case object XX_HASH extends HashFunction(0) with HashFunction.Recognized {
        val index = 0
        val name = "XX_HASH"
        override def isXxHash: _root_.scala.Boolean = true
      }
      
      /** Use `MurmurHash2 <https://sites.google.com/site/murmurhash/>`_, this is compatible with
        * std:hash<string> in GNU libstdc++ 3.4.20 or above. This is typically the case when compiled
        * on Linux and not macOS.
        */
      @SerialVersionUID(0L)
      case object MURMUR_HASH_2 extends HashFunction(1) with HashFunction.Recognized {
        val index = 1
        val name = "MURMUR_HASH_2"
        override def isMurmurHash2: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends HashFunction(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
      lazy val values = scala.collection.immutable.Seq(XX_HASH, MURMUR_HASH_2)
      def fromValue(__value: _root_.scala.Int): HashFunction = __value match {
        case 0 => XX_HASH
        case 1 => MURMUR_HASH_2
        case __other => Unrecognized(__other)
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.javaDescriptor.getEnumTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.scalaDescriptor.enums(0)
    }
    implicit class RingHashLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig](_l) {
      def minimumRingSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getMinimumRingSize)((c_, f_) => c_.copy(minimumRingSize = Option(f_)))
      def optionalMinimumRingSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.minimumRingSize)((c_, f_) => c_.copy(minimumRingSize = f_))
      def hashFunction: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction] = field(_.hashFunction)((c_, f_) => c_.copy(hashFunction = f_))
      def maximumRingSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getMaximumRingSize)((c_, f_) => c_.copy(maximumRingSize = Option(f_)))
      def optionalMaximumRingSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.maximumRingSize)((c_, f_) => c_.copy(maximumRingSize = f_))
    }
    final val MINIMUM_RING_SIZE_FIELD_NUMBER = 1
    final val HASH_FUNCTION_FIELD_NUMBER = 3
    final val MAXIMUM_RING_SIZE_FIELD_NUMBER = 4
    @transient
    private[v3] val _typemapper_minimumRingSize: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long]]
    @transient
    private[v3] val _typemapper_maximumRingSize: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long]]
    def of(
      minimumRingSize: _root_.scala.Option[_root_.scala.Long],
      hashFunction: io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig.HashFunction,
      maximumRingSize: _root_.scala.Option[_root_.scala.Long]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig(
      minimumRingSize,
      hashFunction,
      maximumRingSize
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.RingHashLbConfig])
  }
  
  /** Specific configuration for the :ref:`Maglev<arch_overview_load_balancing_types_maglev>`
    * load balancing policy.
    *
    * @param tableSize
    *   The table size for Maglev hashing. The Maglev aims for ‘minimal disruption’ rather than an absolute guarantee.
    *   Minimal disruption means that when the set of upstreams changes, a connection will likely be sent to the same
    *   upstream as it was before. Increasing the table size reduces the amount of disruption.
    *   The table size must be prime number limited to 5000011. If it is not specified, the default is 65537.
    */
  @SerialVersionUID(0L)
  final case class MaglevLbConfig(
      tableSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[MaglevLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (tableSize.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toBase(tableSize.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        tableSize.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toBase(__v)
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getTableSize: _root_.scala.Long = tableSize.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toCustom(com.google.protobuf.wrappers.UInt64Value.defaultInstance))
      def clearTableSize: MaglevLbConfig = copy(tableSize = _root_.scala.None)
      def withTableSize(__v: _root_.scala.Long): MaglevLbConfig = copy(tableSize = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => tableSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toBase(_)).orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => tableSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.MaglevLbConfig])
  }
  
  object MaglevLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig = {
      var __tableSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __tableSize = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toCustom(__tableSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt64Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig(
          tableSize = __tableSize,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig(
          tableSize = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt64Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig._typemapper_tableSize.toCustom(_))
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(8)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(8)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.wrappers.UInt64Value
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig(
      tableSize = _root_.scala.None
    )
    implicit class MaglevLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig](_l) {
      def tableSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getTableSize)((c_, f_) => c_.copy(tableSize = Option(f_)))
      def optionalTableSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.tableSize)((c_, f_) => c_.copy(tableSize = f_))
    }
    final val TABLE_SIZE_FIELD_NUMBER = 1
    @transient
    private[v3] val _typemapper_tableSize: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long]]
    def of(
      tableSize: _root_.scala.Option[_root_.scala.Long]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig(
      tableSize
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.MaglevLbConfig])
  }
  
  /** Specific configuration for the
    * :ref:`Original Destination <arch_overview_load_balancing_types_original_destination>`
    * load balancing policy.
    *
    * @param useHttpHeader
    *   When true, a HTTP header can be used to override the original dst address. The default header is
    *   :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>`.
    *  
    *   .. attention::
    *  
    *     This header isn't sanitized by default, so enabling this feature allows HTTP clients to
    *     route traffic to arbitrary hosts and/or ports, which may have serious security
    *     consequences.
    *  
    *   .. note::
    *  
    *     If the header appears multiple times only the first value is used.
    * @param httpHeaderName
    *   The http header to override destination address if :ref:`use_http_header <envoy_v3_api_field_config.cluster.v3.Cluster.OriginalDstLbConfig.use_http_header>`.
    *   is set to true. If the value is empty, :ref:`x-envoy-original-dst-host <config_http_conn_man_headers_x-envoy-original-dst-host>` will be used.
    */
  @SerialVersionUID(0L)
  final case class OriginalDstLbConfig(
      useHttpHeader: _root_.scala.Boolean = false,
      httpHeaderName: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[OriginalDstLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = useHttpHeader
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(1, __value)
          }
        };
        
        {
          val __value = httpHeaderName
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = useHttpHeader
          if (__v != false) {
            _output__.writeBool(1, __v)
          }
        };
        {
          val __v = httpHeaderName
          if (!__v.isEmpty) {
            _output__.writeString(2, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withUseHttpHeader(__v: _root_.scala.Boolean): OriginalDstLbConfig = copy(useHttpHeader = __v)
      def withHttpHeaderName(__v: _root_.scala.Predef.String): OriginalDstLbConfig = copy(httpHeaderName = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = useHttpHeader
            if (__t != false) __t else null
          }
          case 2 => {
            val __t = httpHeaderName
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PBoolean(useHttpHeader)
          case 2 => _root_.scalapb.descriptors.PString(httpHeaderName)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.OriginalDstLbConfig])
  }
  
  object OriginalDstLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig = {
      var __useHttpHeader: _root_.scala.Boolean = false
      var __httpHeaderName: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 8 =>
            __useHttpHeader = _input__.readBool()
          case 18 =>
            __httpHeaderName = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig(
          useHttpHeader = __useHttpHeader,
          httpHeaderName = __httpHeaderName,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig(
          useHttpHeader = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          httpHeaderName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(9)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(9)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig(
      useHttpHeader = false,
      httpHeaderName = ""
    )
    implicit class OriginalDstLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig](_l) {
      def useHttpHeader: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.useHttpHeader)((c_, f_) => c_.copy(useHttpHeader = f_))
      def httpHeaderName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.httpHeaderName)((c_, f_) => c_.copy(httpHeaderName = f_))
    }
    final val USE_HTTP_HEADER_FIELD_NUMBER = 1
    final val HTTP_HEADER_NAME_FIELD_NUMBER = 2
    def of(
      useHttpHeader: _root_.scala.Boolean,
      httpHeaderName: _root_.scala.Predef.String
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig(
      useHttpHeader,
      httpHeaderName
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.OriginalDstLbConfig])
  }
  
  /** Common configuration for all load balancer implementations.
    * [#next-free-field: 9]
    *
    * @param healthyPanicThreshold
    *   Configures the :ref:`healthy panic threshold <arch_overview_load_balancing_panic_threshold>`.
    *   If not specified, the default is 50%.
    *   To disable panic mode, set to 0%.
    *  
    *   .. note::
    *     The specified percent will be truncated to the nearest 1%.
    * @param updateMergeWindow
    *   If set, all health check/weight/metadata updates that happen within this duration will be
    *   merged and delivered in one shot when the duration expires. The start of the duration is when
    *   the first update happens. This is useful for big clusters, with potentially noisy deploys
    *   that might trigger excessive CPU usage due to a constant stream of healthcheck state changes
    *   or metadata updates. The first set of updates to be seen apply immediately (e.g.: a new
    *   cluster). Please always keep in mind that the use of sandbox technologies may change this
    *   behavior.
    *  
    *   If this is not set, we default to a merge window of 1000ms. To disable it, set the merge
    *   window to 0.
    *  
    *   Note: merging does not apply to cluster membership changes (e.g.: adds/removes); this is
    *   because merging those updates isn't currently safe. See
    *   https://github.com/envoyproxy/envoy/pull/3941.
    * @param ignoreNewHostsUntilFirstHc
    *   If set to true, Envoy will :ref:`exclude <arch_overview_load_balancing_excluded>` new hosts
    *   when computing load balancing weights until they have been health checked for the first time.
    *   This will have no effect unless active health checking is also configured.
    * @param closeConnectionsOnHostSetChange
    *   If set to `true`, the cluster manager will drain all existing
    *   connections to upstream hosts whenever hosts are added or removed from the cluster.
    * @param consistentHashingLbConfig
    *   Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
    * @param overrideHostStatus
    *   This controls what hosts are considered valid when using
    *   :ref:`host overrides <arch_overview_load_balancing_override_host>`, which is used by some
    *   filters to modify the load balancing decision.
    *  
    *   If this is unset then [UNKNOWN, HEALTHY, DEGRADED] will be applied by default. If this is
    *   set with an empty set of statuses then host overrides will be ignored by the load balancing.
    */
  @SerialVersionUID(0L)
  final case class CommonLbConfig(
      healthyPanicThreshold: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None,
      localityConfigSpecifier: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.Empty,
      updateMergeWindow: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
      ignoreNewHostsUntilFirstHc: _root_.scala.Boolean = false,
      closeConnectionsOnHostSetChange: _root_.scala.Boolean = false,
      consistentHashingLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] = _root_.scala.None,
      overrideHostStatus: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HealthStatusSet] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CommonLbConfig] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (healthyPanicThreshold.isDefined) {
          val __value = healthyPanicThreshold.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (localityConfigSpecifier.zoneAwareLbConfig.isDefined) {
          val __value = localityConfigSpecifier.zoneAwareLbConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (localityConfigSpecifier.localityWeightedLbConfig.isDefined) {
          val __value = localityConfigSpecifier.localityWeightedLbConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (updateMergeWindow.isDefined) {
          val __value = updateMergeWindow.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        
        {
          val __value = ignoreNewHostsUntilFirstHc
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(5, __value)
          }
        };
        
        {
          val __value = closeConnectionsOnHostSetChange
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(6, __value)
          }
        };
        if (consistentHashingLbConfig.isDefined) {
          val __value = consistentHashingLbConfig.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (overrideHostStatus.isDefined) {
          val __value = overrideHostStatus.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        healthyPanicThreshold.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        localityConfigSpecifier.zoneAwareLbConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        localityConfigSpecifier.localityWeightedLbConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        updateMergeWindow.foreach { __v =>
          val __m = __v
          _output__.writeTag(4, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = ignoreNewHostsUntilFirstHc
          if (__v != false) {
            _output__.writeBool(5, __v)
          }
        };
        {
          val __v = closeConnectionsOnHostSetChange
          if (__v != false) {
            _output__.writeBool(6, __v)
          }
        };
        consistentHashingLbConfig.foreach { __v =>
          val __m = __v
          _output__.writeTag(7, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        overrideHostStatus.foreach { __v =>
          val __m = __v
          _output__.writeTag(8, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getHealthyPanicThreshold: io.envoyproxy.envoy.`type`.v3.Percent = healthyPanicThreshold.getOrElse(io.envoyproxy.envoy.`type`.v3.Percent.defaultInstance)
      def clearHealthyPanicThreshold: CommonLbConfig = copy(healthyPanicThreshold = _root_.scala.None)
      def withHealthyPanicThreshold(__v: io.envoyproxy.envoy.`type`.v3.Percent): CommonLbConfig = copy(healthyPanicThreshold = Option(__v))
      def getZoneAwareLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig = localityConfigSpecifier.zoneAwareLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig.defaultInstance)
      def withZoneAwareLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig): CommonLbConfig = copy(localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.ZoneAwareLbConfig(__v))
      def getLocalityWeightedLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig = localityConfigSpecifier.localityWeightedLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig.defaultInstance)
      def withLocalityWeightedLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig): CommonLbConfig = copy(localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.LocalityWeightedLbConfig(__v))
      def getUpdateMergeWindow: com.google.protobuf.duration.Duration = updateMergeWindow.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
      def clearUpdateMergeWindow: CommonLbConfig = copy(updateMergeWindow = _root_.scala.None)
      def withUpdateMergeWindow(__v: com.google.protobuf.duration.Duration): CommonLbConfig = copy(updateMergeWindow = Option(__v))
      def withIgnoreNewHostsUntilFirstHc(__v: _root_.scala.Boolean): CommonLbConfig = copy(ignoreNewHostsUntilFirstHc = __v)
      def withCloseConnectionsOnHostSetChange(__v: _root_.scala.Boolean): CommonLbConfig = copy(closeConnectionsOnHostSetChange = __v)
      def getConsistentHashingLbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig = consistentHashingLbConfig.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig.defaultInstance)
      def clearConsistentHashingLbConfig: CommonLbConfig = copy(consistentHashingLbConfig = _root_.scala.None)
      def withConsistentHashingLbConfig(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig): CommonLbConfig = copy(consistentHashingLbConfig = Option(__v))
      def getOverrideHostStatus: io.envoyproxy.envoy.config.core.v3.HealthStatusSet = overrideHostStatus.getOrElse(io.envoyproxy.envoy.config.core.v3.HealthStatusSet.defaultInstance)
      def clearOverrideHostStatus: CommonLbConfig = copy(overrideHostStatus = _root_.scala.None)
      def withOverrideHostStatus(__v: io.envoyproxy.envoy.config.core.v3.HealthStatusSet): CommonLbConfig = copy(overrideHostStatus = Option(__v))
      def clearLocalityConfigSpecifier: CommonLbConfig = copy(localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.Empty)
      def withLocalityConfigSpecifier(__v: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier): CommonLbConfig = copy(localityConfigSpecifier = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => healthyPanicThreshold.orNull
          case 2 => localityConfigSpecifier.zoneAwareLbConfig.orNull
          case 3 => localityConfigSpecifier.localityWeightedLbConfig.orNull
          case 4 => updateMergeWindow.orNull
          case 5 => {
            val __t = ignoreNewHostsUntilFirstHc
            if (__t != false) __t else null
          }
          case 6 => {
            val __t = closeConnectionsOnHostSetChange
            if (__t != false) __t else null
          }
          case 7 => consistentHashingLbConfig.orNull
          case 8 => overrideHostStatus.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => healthyPanicThreshold.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => localityConfigSpecifier.zoneAwareLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => localityConfigSpecifier.localityWeightedLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 4 => updateMergeWindow.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 5 => _root_.scalapb.descriptors.PBoolean(ignoreNewHostsUntilFirstHc)
          case 6 => _root_.scalapb.descriptors.PBoolean(closeConnectionsOnHostSetChange)
          case 7 => consistentHashingLbConfig.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 8 => overrideHostStatus.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.CommonLbConfig])
  }
  
  object CommonLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig = {
      var __healthyPanicThreshold: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None
      var __updateMergeWindow: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
      var __ignoreNewHostsUntilFirstHc: _root_.scala.Boolean = false
      var __closeConnectionsOnHostSetChange: _root_.scala.Boolean = false
      var __consistentHashingLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] = _root_.scala.None
      var __overrideHostStatus: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HealthStatusSet] = _root_.scala.None
      var __localityConfigSpecifier: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.Empty
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __healthyPanicThreshold = Option(__healthyPanicThreshold.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.`type`.v3.Percent](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.ZoneAwareLbConfig(__localityConfigSpecifier.zoneAwareLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.LocalityWeightedLbConfig(__localityConfigSpecifier.localityWeightedLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 34 =>
            __updateMergeWindow = Option(__updateMergeWindow.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 40 =>
            __ignoreNewHostsUntilFirstHc = _input__.readBool()
          case 48 =>
            __closeConnectionsOnHostSetChange = _input__.readBool()
          case 58 =>
            __consistentHashingLbConfig = Option(__consistentHashingLbConfig.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 66 =>
            __overrideHostStatus = Option(__overrideHostStatus.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.config.core.v3.HealthStatusSet](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig(
          healthyPanicThreshold = __healthyPanicThreshold,
          updateMergeWindow = __updateMergeWindow,
          ignoreNewHostsUntilFirstHc = __ignoreNewHostsUntilFirstHc,
          closeConnectionsOnHostSetChange = __closeConnectionsOnHostSetChange,
          consistentHashingLbConfig = __consistentHashingLbConfig,
          overrideHostStatus = __overrideHostStatus,
          localityConfigSpecifier = __localityConfigSpecifier,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig(
          healthyPanicThreshold = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]]),
          updateMergeWindow = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
          ignoreNewHostsUntilFirstHc = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          closeConnectionsOnHostSetChange = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          consistentHashingLbConfig = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig]]),
          overrideHostStatus = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HealthStatusSet]]),
          localityConfigSpecifier = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.ZoneAwareLbConfig(_))
              .orElse[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.LocalityWeightedLbConfig(_)))
              .getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.Empty)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(10)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(10)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = io.envoyproxy.envoy.`type`.v3.Percent
        case 2 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig
        case 3 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig
        case 4 => __out = com.google.protobuf.duration.Duration
        case 7 => __out = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig
        case 8 => __out = io.envoyproxy.envoy.config.core.v3.HealthStatusSet
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
      Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
        _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig,
        _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig,
        _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig
      )
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig(
      healthyPanicThreshold = _root_.scala.None,
      updateMergeWindow = _root_.scala.None,
      ignoreNewHostsUntilFirstHc = false,
      closeConnectionsOnHostSetChange = false,
      consistentHashingLbConfig = _root_.scala.None,
      overrideHostStatus = _root_.scala.None,
      localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.Empty
    )
    sealed trait LocalityConfigSpecifier extends _root_.scalapb.GeneratedOneof {
      def isEmpty: _root_.scala.Boolean = false
      def isDefined: _root_.scala.Boolean = true
      def isZoneAwareLbConfig: _root_.scala.Boolean = false
      def isLocalityWeightedLbConfig: _root_.scala.Boolean = false
      def zoneAwareLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] = _root_.scala.None
      def localityWeightedLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] = _root_.scala.None
    }
    object LocalityConfigSpecifier {
      @SerialVersionUID(0L)
      case object Empty extends io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier {
        type ValueType = _root_.scala.Nothing
        override def isEmpty: _root_.scala.Boolean = true
        override def isDefined: _root_.scala.Boolean = false
        override def number: _root_.scala.Int = 0
        override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
      }
    
      @SerialVersionUID(0L)
      final case class ZoneAwareLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier {
        type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig
        override def isZoneAwareLbConfig: _root_.scala.Boolean = true
        override def zoneAwareLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] = Some(value)
        override def number: _root_.scala.Int = 2
      }
      @SerialVersionUID(0L)
      final case class LocalityWeightedLbConfig(value: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig) extends io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier {
        type ValueType = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig
        override def isLocalityWeightedLbConfig: _root_.scala.Boolean = true
        override def localityWeightedLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] = Some(value)
        override def number: _root_.scala.Int = 3
      }
    }
    /** Configuration for :ref:`zone aware routing
      * <arch_overview_load_balancing_zone_aware_routing>`.
      *
      * @param routingEnabled
      *   Configures percentage of requests that will be considered for zone aware routing
      *   if zone aware routing is configured. If not specified, the default is 100%.
      *   * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
      *   * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
      * @param minClusterSize
      *   Configures minimum upstream cluster size required for zone aware routing
      *   If upstream cluster size is less than specified, zone aware routing is not performed
      *   even if zone aware routing is configured. If not specified, the default is 6.
      *   * :ref:`runtime values <config_cluster_manager_cluster_runtime_zone_routing>`.
      *   * :ref:`Zone aware routing support <arch_overview_load_balancing_zone_aware_routing>`.
      * @param failTrafficOnPanic
      *   If set to true, Envoy will not consider any hosts when the cluster is in :ref:`panic
      *   mode<arch_overview_load_balancing_panic_threshold>`. Instead, the cluster will fail all
      *   requests as if all hosts are unhealthy. This can help avoid potentially overwhelming a
      *   failing service.
      */
    @SerialVersionUID(0L)
    final case class ZoneAwareLbConfig(
        routingEnabled: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None,
        minClusterSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None,
        failTrafficOnPanic: _root_.scala.Boolean = false,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[ZoneAwareLbConfig] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          if (routingEnabled.isDefined) {
            val __value = routingEnabled.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          if (minClusterSize.isDefined) {
            val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toBase(minClusterSize.get)
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          
          {
            val __value = failTrafficOnPanic
            if (__value != false) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(3, __value)
            }
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          routingEnabled.foreach { __v =>
            val __m = __v
            _output__.writeTag(1, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          minClusterSize.foreach { __v =>
            val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toBase(__v)
            _output__.writeTag(2, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          {
            val __v = failTrafficOnPanic
            if (__v != false) {
              _output__.writeBool(3, __v)
            }
          };
          unknownFields.writeTo(_output__)
        }
        def getRoutingEnabled: io.envoyproxy.envoy.`type`.v3.Percent = routingEnabled.getOrElse(io.envoyproxy.envoy.`type`.v3.Percent.defaultInstance)
        def clearRoutingEnabled: ZoneAwareLbConfig = copy(routingEnabled = _root_.scala.None)
        def withRoutingEnabled(__v: io.envoyproxy.envoy.`type`.v3.Percent): ZoneAwareLbConfig = copy(routingEnabled = Option(__v))
        def getMinClusterSize: _root_.scala.Long = minClusterSize.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toCustom(com.google.protobuf.wrappers.UInt64Value.defaultInstance))
        def clearMinClusterSize: ZoneAwareLbConfig = copy(minClusterSize = _root_.scala.None)
        def withMinClusterSize(__v: _root_.scala.Long): ZoneAwareLbConfig = copy(minClusterSize = Option(__v))
        def withFailTrafficOnPanic(__v: _root_.scala.Boolean): ZoneAwareLbConfig = copy(failTrafficOnPanic = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => routingEnabled.orNull
            case 2 => minClusterSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toBase(_)).orNull
            case 3 => {
              val __t = failTrafficOnPanic
              if (__t != false) __t else null
            }
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => routingEnabled.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
            case 2 => minClusterSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
            case 3 => _root_.scalapb.descriptors.PBoolean(failTrafficOnPanic)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig
        // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig])
    }
    
    object ZoneAwareLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig = {
        var __routingEnabled: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent] = _root_.scala.None
        var __minClusterSize: _root_.scala.Option[_root_.scala.Long] = _root_.scala.None
        var __failTrafficOnPanic: _root_.scala.Boolean = false
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __routingEnabled = Option(__routingEnabled.fold(_root_.scalapb.LiteParser.readMessage[io.envoyproxy.envoy.`type`.v3.Percent](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case 18 =>
              __minClusterSize = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toCustom(__minClusterSize.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt64Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
            case 24 =>
              __failTrafficOnPanic = _input__.readBool()
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig(
            routingEnabled = __routingEnabled,
            minClusterSize = __minClusterSize,
            failTrafficOnPanic = __failTrafficOnPanic,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig(
            routingEnabled = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]]),
            minClusterSize = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt64Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig._typemapper_minClusterSize.toCustom(_)),
            failTrafficOnPanic = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Boolean]).getOrElse(false)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.javaDescriptor.getNestedTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.scalaDescriptor.nestedMessages(0)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 1 => __out = io.envoyproxy.envoy.`type`.v3.Percent
          case 2 => __out = com.google.protobuf.wrappers.UInt64Value
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig(
        routingEnabled = _root_.scala.None,
        minClusterSize = _root_.scala.None,
        failTrafficOnPanic = false
      )
      implicit class ZoneAwareLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig](_l) {
        def routingEnabled: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.`type`.v3.Percent] = field(_.getRoutingEnabled)((c_, f_) => c_.copy(routingEnabled = Option(f_)))
        def optionalRoutingEnabled: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]] = field(_.routingEnabled)((c_, f_) => c_.copy(routingEnabled = f_))
        def minClusterSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.getMinClusterSize)((c_, f_) => c_.copy(minClusterSize = Option(f_)))
        def optionalMinClusterSize: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Long]] = field(_.minClusterSize)((c_, f_) => c_.copy(minClusterSize = f_))
        def failTrafficOnPanic: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.failTrafficOnPanic)((c_, f_) => c_.copy(failTrafficOnPanic = f_))
      }
      final val ROUTING_ENABLED_FIELD_NUMBER = 1
      final val MIN_CLUSTER_SIZE_FIELD_NUMBER = 2
      final val FAIL_TRAFFIC_ON_PANIC_FIELD_NUMBER = 3
      @transient
      private[v3] val _typemapper_minClusterSize: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt64Value, _root_.scala.Long]]
      def of(
        routingEnabled: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent],
        minClusterSize: _root_.scala.Option[_root_.scala.Long],
        failTrafficOnPanic: _root_.scala.Boolean
      ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig(
        routingEnabled,
        minClusterSize,
        failTrafficOnPanic
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig])
    }
    
    /** Configuration for :ref:`locality weighted load balancing
      * <arch_overview_load_balancing_locality_weighted_lb>`
      */
    @SerialVersionUID(0L)
    final case class LocalityWeightedLbConfig(
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[LocalityWeightedLbConfig] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          unknownFields.writeTo(_output__)
        }
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = throw new MatchError(__fieldNumber)
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = throw new MatchError(__field)
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig
        // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig])
    }
    
    object LocalityWeightedLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig = {
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig(
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig(
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.javaDescriptor.getNestedTypes().get(1)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.scalaDescriptor.nestedMessages(1)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig(
      )
      implicit class LocalityWeightedLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig](_l) {
      }
      def of(
      ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig(
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig])
    }
    
    /** Common Configuration for all consistent hashing load balancers (MaglevLb, RingHashLb, etc.)
      *
      * @param useHostnameForHashing
      *   If set to `true`, the cluster will use hostname instead of the resolved
      *   address as the key to consistently hash to an upstream host. Only valid for StrictDNS clusters with hostnames which resolve to a single IP address.
      * @param hashBalanceFactor
      *   Configures percentage of average cluster load to bound per upstream host. For example, with a value of 150
      *   no upstream host will get a load more than 1.5 times the average load of all the hosts in the cluster.
      *   If not specified, the load is not bounded for any upstream host. Typical value for this parameter is between 120 and 200.
      *   Minimum is 100.
      *  
      *   Applies to both Ring Hash and Maglev load balancers.
      *  
      *   This is implemented based on the method described in the paper https://arxiv.org/abs/1608.01350. For the specified
      *   `hash_balance_factor`, requests to any upstream host are capped at `hash_balance_factor/100` times the average number of requests
      *   across the cluster. When a request arrives for an upstream host that is currently serving at its max capacity, linear probing
      *   is used to identify an eligible host. Further, the linear probe is implemented using a random jump in hosts ring/table to identify
      *   the eligible host (this technique is as described in the paper https://arxiv.org/abs/1908.08762 - the random jump avoids the
      *   cascading overflow effect when choosing the next host in the ring/table).
      *  
      *   If weights are specified on the hosts, they are respected.
      *  
      *   This is an O(N) algorithm, unlike other load balancers. Using a lower `hash_balance_factor` results in more hosts
      *   being probed, so use a higher value if you require better performance.
      */
    @SerialVersionUID(0L)
    final case class ConsistentHashingLbConfig(
        useHostnameForHashing: _root_.scala.Boolean = false,
        hashBalanceFactor: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[ConsistentHashingLbConfig] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = useHostnameForHashing
            if (__value != false) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(1, __value)
            }
          };
          if (hashBalanceFactor.isDefined) {
            val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toBase(hashBalanceFactor.get)
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = useHostnameForHashing
            if (__v != false) {
              _output__.writeBool(1, __v)
            }
          };
          hashBalanceFactor.foreach { __v =>
            val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toBase(__v)
            _output__.writeTag(2, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def withUseHostnameForHashing(__v: _root_.scala.Boolean): ConsistentHashingLbConfig = copy(useHostnameForHashing = __v)
        def getHashBalanceFactor: _root_.scala.Int = hashBalanceFactor.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toCustom(com.google.protobuf.wrappers.UInt32Value.defaultInstance))
        def clearHashBalanceFactor: ConsistentHashingLbConfig = copy(hashBalanceFactor = _root_.scala.None)
        def withHashBalanceFactor(__v: _root_.scala.Int): ConsistentHashingLbConfig = copy(hashBalanceFactor = Option(__v))
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = useHostnameForHashing
              if (__t != false) __t else null
            }
            case 2 => hashBalanceFactor.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toBase(_)).orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PBoolean(useHostnameForHashing)
            case 2 => hashBalanceFactor.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig
        // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig])
    }
    
    object ConsistentHashingLbConfig extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig = {
        var __useHostnameForHashing: _root_.scala.Boolean = false
        var __hashBalanceFactor: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 8 =>
              __useHostnameForHashing = _input__.readBool()
            case 18 =>
              __hashBalanceFactor = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toCustom(__hashBalanceFactor.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.UInt32Value](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig(
            useHostnameForHashing = __useHostnameForHashing,
            hashBalanceFactor = __hashBalanceFactor,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig(
            useHostnameForHashing = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
            hashBalanceFactor = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.UInt32Value]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig._typemapper_hashBalanceFactor.toCustom(_))
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.javaDescriptor.getNestedTypes().get(2)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.scalaDescriptor.nestedMessages(2)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 2 => __out = com.google.protobuf.wrappers.UInt32Value
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig(
        useHostnameForHashing = false,
        hashBalanceFactor = _root_.scala.None
      )
      implicit class ConsistentHashingLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig](_l) {
        def useHostnameForHashing: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.useHostnameForHashing)((c_, f_) => c_.copy(useHostnameForHashing = f_))
        def hashBalanceFactor: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getHashBalanceFactor)((c_, f_) => c_.copy(hashBalanceFactor = Option(f_)))
        def optionalHashBalanceFactor: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Int]] = field(_.hashBalanceFactor)((c_, f_) => c_.copy(hashBalanceFactor = f_))
      }
      final val USE_HOSTNAME_FOR_HASHING_FIELD_NUMBER = 1
      final val HASH_BALANCE_FACTOR_FIELD_NUMBER = 2
      @transient
      private[v3] val _typemapper_hashBalanceFactor: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int]]
      def of(
        useHostnameForHashing: _root_.scala.Boolean,
        hashBalanceFactor: _root_.scala.Option[_root_.scala.Int]
      ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig(
        useHostnameForHashing,
        hashBalanceFactor
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig])
    }
    
    implicit class CommonLbConfigLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig](_l) {
      def healthyPanicThreshold: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.`type`.v3.Percent] = field(_.getHealthyPanicThreshold)((c_, f_) => c_.copy(healthyPanicThreshold = Option(f_)))
      def optionalHealthyPanicThreshold: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent]] = field(_.healthyPanicThreshold)((c_, f_) => c_.copy(healthyPanicThreshold = f_))
      def zoneAwareLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ZoneAwareLbConfig] = field(_.getZoneAwareLbConfig)((c_, f_) => c_.copy(localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.ZoneAwareLbConfig(f_)))
      def localityWeightedLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityWeightedLbConfig] = field(_.getLocalityWeightedLbConfig)((c_, f_) => c_.copy(localityConfigSpecifier = io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier.LocalityWeightedLbConfig(f_)))
      def updateMergeWindow: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getUpdateMergeWindow)((c_, f_) => c_.copy(updateMergeWindow = Option(f_)))
      def optionalUpdateMergeWindow: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.updateMergeWindow)((c_, f_) => c_.copy(updateMergeWindow = f_))
      def ignoreNewHostsUntilFirstHc: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.ignoreNewHostsUntilFirstHc)((c_, f_) => c_.copy(ignoreNewHostsUntilFirstHc = f_))
      def closeConnectionsOnHostSetChange: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.closeConnectionsOnHostSetChange)((c_, f_) => c_.copy(closeConnectionsOnHostSetChange = f_))
      def consistentHashingLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig] = field(_.getConsistentHashingLbConfig)((c_, f_) => c_.copy(consistentHashingLbConfig = Option(f_)))
      def optionalConsistentHashingLbConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig]] = field(_.consistentHashingLbConfig)((c_, f_) => c_.copy(consistentHashingLbConfig = f_))
      def overrideHostStatus: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.HealthStatusSet] = field(_.getOverrideHostStatus)((c_, f_) => c_.copy(overrideHostStatus = Option(f_)))
      def optionalOverrideHostStatus: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HealthStatusSet]] = field(_.overrideHostStatus)((c_, f_) => c_.copy(overrideHostStatus = f_))
      def localityConfigSpecifier: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier] = field(_.localityConfigSpecifier)((c_, f_) => c_.copy(localityConfigSpecifier = f_))
    }
    final val HEALTHY_PANIC_THRESHOLD_FIELD_NUMBER = 1
    final val ZONE_AWARE_LB_CONFIG_FIELD_NUMBER = 2
    final val LOCALITY_WEIGHTED_LB_CONFIG_FIELD_NUMBER = 3
    final val UPDATE_MERGE_WINDOW_FIELD_NUMBER = 4
    final val IGNORE_NEW_HOSTS_UNTIL_FIRST_HC_FIELD_NUMBER = 5
    final val CLOSE_CONNECTIONS_ON_HOST_SET_CHANGE_FIELD_NUMBER = 6
    final val CONSISTENT_HASHING_LB_CONFIG_FIELD_NUMBER = 7
    final val OVERRIDE_HOST_STATUS_FIELD_NUMBER = 8
    def of(
      healthyPanicThreshold: _root_.scala.Option[io.envoyproxy.envoy.`type`.v3.Percent],
      localityConfigSpecifier: io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.LocalityConfigSpecifier,
      updateMergeWindow: _root_.scala.Option[com.google.protobuf.duration.Duration],
      ignoreNewHostsUntilFirstHc: _root_.scala.Boolean,
      closeConnectionsOnHostSetChange: _root_.scala.Boolean,
      consistentHashingLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig.ConsistentHashingLbConfig],
      overrideHostStatus: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HealthStatusSet]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig(
      healthyPanicThreshold,
      localityConfigSpecifier,
      updateMergeWindow,
      ignoreNewHostsUntilFirstHc,
      closeConnectionsOnHostSetChange,
      consistentHashingLbConfig,
      overrideHostStatus
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.CommonLbConfig])
  }
  
  /** @param baseInterval
    *   Specifies the base interval between refreshes. This parameter is required and must be greater
    *   than zero and less than
    *   :ref:`max_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.max_interval>`.
    * @param maxInterval
    *   Specifies the maximum interval between refreshes. This parameter is optional, but must be
    *   greater than or equal to the
    *   :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>`  if set. The default
    *   is 10 times the :ref:`base_interval <envoy_v3_api_field_config.cluster.v3.Cluster.RefreshRate.base_interval>`.
    */
  @SerialVersionUID(0L)
  final case class RefreshRate(
      baseInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
      maxInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[RefreshRate] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (baseInterval.isDefined) {
          val __value = baseInterval.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (maxInterval.isDefined) {
          val __value = maxInterval.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        baseInterval.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        maxInterval.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getBaseInterval: com.google.protobuf.duration.Duration = baseInterval.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
      def clearBaseInterval: RefreshRate = copy(baseInterval = _root_.scala.None)
      def withBaseInterval(__v: com.google.protobuf.duration.Duration): RefreshRate = copy(baseInterval = Option(__v))
      def getMaxInterval: com.google.protobuf.duration.Duration = maxInterval.getOrElse(com.google.protobuf.duration.Duration.defaultInstance)
      def clearMaxInterval: RefreshRate = copy(maxInterval = _root_.scala.None)
      def withMaxInterval(__v: com.google.protobuf.duration.Duration): RefreshRate = copy(maxInterval = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => baseInterval.orNull
          case 2 => maxInterval.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => baseInterval.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => maxInterval.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.RefreshRate])
  }
  
  object RefreshRate extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate = {
      var __baseInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
      var __maxInterval: _root_.scala.Option[com.google.protobuf.duration.Duration] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __baseInterval = Option(__baseInterval.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __maxInterval = Option(__maxInterval.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.duration.Duration](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate(
          baseInterval = __baseInterval,
          maxInterval = __maxInterval,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate(
          baseInterval = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]]),
          maxInterval = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.duration.Duration]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(11)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(11)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.duration.Duration
        case 2 => __out = com.google.protobuf.duration.Duration
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate(
      baseInterval = _root_.scala.None,
      maxInterval = _root_.scala.None
    )
    implicit class RefreshRateLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate](_l) {
      def baseInterval: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getBaseInterval)((c_, f_) => c_.copy(baseInterval = Option(f_)))
      def optionalBaseInterval: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.baseInterval)((c_, f_) => c_.copy(baseInterval = f_))
      def maxInterval: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getMaxInterval)((c_, f_) => c_.copy(maxInterval = Option(f_)))
      def optionalMaxInterval: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.maxInterval)((c_, f_) => c_.copy(maxInterval = f_))
    }
    final val BASE_INTERVAL_FIELD_NUMBER = 1
    final val MAX_INTERVAL_FIELD_NUMBER = 2
    def of(
      baseInterval: _root_.scala.Option[com.google.protobuf.duration.Duration],
      maxInterval: _root_.scala.Option[com.google.protobuf.duration.Duration]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate(
      baseInterval,
      maxInterval
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.RefreshRate])
  }
  
  /** @param perUpstreamPreconnectRatio
    *   Indicates how many streams (rounded up) can be anticipated per-upstream for each
    *   incoming stream. This is useful for high-QPS or latency-sensitive services. Preconnecting
    *   will only be done if the upstream is healthy and the cluster has traffic.
    *  
    *   For example if this is 2, for an incoming HTTP/1.1 stream, 2 connections will be
    *   established, one for the new incoming stream, and one for a presumed follow-up stream. For
    *   HTTP/2, only one connection would be established by default as one connection can
    *   serve both the original and presumed follow-up stream.
    *  
    *   In steady state for non-multiplexed connections a value of 1.5 would mean if there were 100
    *   active streams, there would be 100 connections in use, and 50 connections preconnected.
    *   This might be a useful value for something like short lived single-use connections,
    *   for example proxying HTTP/1.1 if keep-alive were false and each stream resulted in connection
    *   termination. It would likely be overkill for long lived connections, such as TCP proxying SMTP
    *   or regular HTTP/1.1 with keep-alive. For long lived traffic, a value of 1.05 would be more
    *   reasonable, where for every 100 connections, 5 preconnected connections would be in the queue
    *   in case of unexpected disconnects where the connection could not be reused.
    *  
    *   If this value is not set, or set explicitly to one, Envoy will fetch as many connections
    *   as needed to serve streams in flight. This means in steady state if a connection is torn down,
    *   a subsequent streams will pay an upstream-rtt latency penalty waiting for a new connection.
    *  
    *   This is limited somewhat arbitrarily to 3 because preconnecting too aggressively can
    *   harm latency more than the preconnecting helps.
    * @param predictivePreconnectRatio
    *   Indicates how many many streams (rounded up) can be anticipated across a cluster for each
    *   stream, useful for low QPS services. This is currently supported for a subset of
    *   deterministic non-hash-based load-balancing algorithms (weighted round robin, random).
    *   Unlike *per_upstream_preconnect_ratio* this preconnects across the upstream instances in a
    *   cluster, doing best effort predictions of what upstream would be picked next and
    *   pre-establishing a connection.
    *  
    *   Preconnecting will be limited to one preconnect per configured upstream in the cluster and will
    *   only be done if there are healthy upstreams and the cluster has traffic.
    *  
    *   For example if preconnecting is set to 2 for a round robin HTTP/2 cluster, on the first
    *   incoming stream, 2 connections will be preconnected - one to the first upstream for this
    *   cluster, one to the second on the assumption there will be a follow-up stream.
    *  
    *   If this value is not set, or set explicitly to one, Envoy will fetch as many connections
    *   as needed to serve streams in flight, so during warm up and in steady state if a connection
    *   is closed (and per_upstream_preconnect_ratio is not set), there will be a latency hit for
    *   connection establishment.
    *  
    *   If both this and preconnect_ratio are set, Envoy will make sure both predicted needs are met,
    *   basically preconnecting max(predictive-preconnect, per-upstream-preconnect), for each
    *   upstream.
    */
  @SerialVersionUID(0L)
  final case class PreconnectPolicy(
      perUpstreamPreconnectRatio: _root_.scala.Option[_root_.scala.Double] = _root_.scala.None,
      predictivePreconnectRatio: _root_.scala.Option[_root_.scala.Double] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[PreconnectPolicy] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (perUpstreamPreconnectRatio.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toBase(perUpstreamPreconnectRatio.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (predictivePreconnectRatio.isDefined) {
          val __value = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toBase(predictivePreconnectRatio.get)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        perUpstreamPreconnectRatio.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toBase(__v)
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        predictivePreconnectRatio.foreach { __v =>
          val __m = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toBase(__v)
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getPerUpstreamPreconnectRatio: _root_.scala.Double = perUpstreamPreconnectRatio.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toCustom(com.google.protobuf.wrappers.DoubleValue.defaultInstance))
      def clearPerUpstreamPreconnectRatio: PreconnectPolicy = copy(perUpstreamPreconnectRatio = _root_.scala.None)
      def withPerUpstreamPreconnectRatio(__v: _root_.scala.Double): PreconnectPolicy = copy(perUpstreamPreconnectRatio = Option(__v))
      def getPredictivePreconnectRatio: _root_.scala.Double = predictivePreconnectRatio.getOrElse(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toCustom(com.google.protobuf.wrappers.DoubleValue.defaultInstance))
      def clearPredictivePreconnectRatio: PreconnectPolicy = copy(predictivePreconnectRatio = _root_.scala.None)
      def withPredictivePreconnectRatio(__v: _root_.scala.Double): PreconnectPolicy = copy(predictivePreconnectRatio = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => perUpstreamPreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toBase(_)).orNull
          case 2 => predictivePreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toBase(_)).orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => perUpstreamPreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => predictivePreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toBase(_).toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.PreconnectPolicy])
  }
  
  object PreconnectPolicy extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy = {
      var __perUpstreamPreconnectRatio: _root_.scala.Option[_root_.scala.Double] = _root_.scala.None
      var __predictivePreconnectRatio: _root_.scala.Option[_root_.scala.Double] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __perUpstreamPreconnectRatio = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toCustom(__perUpstreamPreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.DoubleValue](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case 18 =>
            __predictivePreconnectRatio = Option(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toCustom(__predictivePreconnectRatio.map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toBase(_)).fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.wrappers.DoubleValue](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _))))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy(
          perUpstreamPreconnectRatio = __perUpstreamPreconnectRatio,
          predictivePreconnectRatio = __predictivePreconnectRatio,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy(
          perUpstreamPreconnectRatio = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.DoubleValue]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_perUpstreamPreconnectRatio.toCustom(_)),
          predictivePreconnectRatio = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.wrappers.DoubleValue]]).map(io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy._typemapper_predictivePreconnectRatio.toCustom(_))
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(12)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(12)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = com.google.protobuf.wrappers.DoubleValue
        case 2 => __out = com.google.protobuf.wrappers.DoubleValue
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy(
      perUpstreamPreconnectRatio = _root_.scala.None,
      predictivePreconnectRatio = _root_.scala.None
    )
    implicit class PreconnectPolicyLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy](_l) {
      def perUpstreamPreconnectRatio: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Double] = field(_.getPerUpstreamPreconnectRatio)((c_, f_) => c_.copy(perUpstreamPreconnectRatio = Option(f_)))
      def optionalPerUpstreamPreconnectRatio: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Double]] = field(_.perUpstreamPreconnectRatio)((c_, f_) => c_.copy(perUpstreamPreconnectRatio = f_))
      def predictivePreconnectRatio: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Double] = field(_.getPredictivePreconnectRatio)((c_, f_) => c_.copy(predictivePreconnectRatio = Option(f_)))
      def optionalPredictivePreconnectRatio: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Double]] = field(_.predictivePreconnectRatio)((c_, f_) => c_.copy(predictivePreconnectRatio = f_))
    }
    final val PER_UPSTREAM_PRECONNECT_RATIO_FIELD_NUMBER = 1
    final val PREDICTIVE_PRECONNECT_RATIO_FIELD_NUMBER = 2
    @transient
    private[v3] val _typemapper_perUpstreamPreconnectRatio: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.DoubleValue, _root_.scala.Double] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.DoubleValue, _root_.scala.Double]]
    @transient
    private[v3] val _typemapper_predictivePreconnectRatio: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.DoubleValue, _root_.scala.Double] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.DoubleValue, _root_.scala.Double]]
    def of(
      perUpstreamPreconnectRatio: _root_.scala.Option[_root_.scala.Double],
      predictivePreconnectRatio: _root_.scala.Option[_root_.scala.Double]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy(
      perUpstreamPreconnectRatio,
      predictivePreconnectRatio
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.PreconnectPolicy])
  }
  
  @SerialVersionUID(0L)
  final case class TypedExtensionProtocolOptionsEntry(
      key: _root_.scala.Predef.String = "",
      value: _root_.scala.Option[com.google.protobuf.any.Any] = _root_.scala.None,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[TypedExtensionProtocolOptionsEntry] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = key
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        if (value.isDefined) {
          val __value = value.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = key
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        value.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def withKey(__v: _root_.scala.Predef.String): TypedExtensionProtocolOptionsEntry = copy(key = __v)
      def getValue: com.google.protobuf.any.Any = value.getOrElse(com.google.protobuf.any.Any.defaultInstance)
      def clearValue: TypedExtensionProtocolOptionsEntry = copy(value = _root_.scala.None)
      def withValue(__v: com.google.protobuf.any.Any): TypedExtensionProtocolOptionsEntry = copy(value = Option(__v))
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = key
            if (__t != "") __t else null
          }
          case 2 => value.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(key)
          case 2 => value.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry.type = io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry
      // @@protoc_insertion_point(GeneratedMessage[envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry])
  }
  
  object TypedExtensionProtocolOptionsEntry extends scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry = {
      var __key: _root_.scala.Predef.String = ""
      var __value: _root_.scala.Option[com.google.protobuf.any.Any] = _root_.scala.None
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __key = _input__.readStringRequireUtf8()
          case 18 =>
            __value = Option(__value.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.any.Any](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry(
          key = __key,
          value = __value,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry(
          key = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.any.Any]])
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.javaDescriptor.getNestedTypes().get(13)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = io.envoyproxy.envoy.config.cluster.v3.Cluster.scalaDescriptor.nestedMessages(13)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = com.google.protobuf.any.Any
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry(
      key = "",
      value = _root_.scala.None
    )
    implicit class TypedExtensionProtocolOptionsEntryLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry](_l) {
      def key: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.key)((c_, f_) => c_.copy(key = f_))
      def value: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.any.Any] = field(_.getValue)((c_, f_) => c_.copy(value = Option(f_)))
      def optionalValue: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.any.Any]] = field(_.value)((c_, f_) => c_.copy(value = f_))
    }
    final val KEY_FIELD_NUMBER = 1
    final val VALUE_FIELD_NUMBER = 2
    @transient
    implicit val keyValueMapper: _root_.scalapb.TypeMapper[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry, (_root_.scala.Predef.String, com.google.protobuf.any.Any)] =
      _root_.scalapb.TypeMapper[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry, (_root_.scala.Predef.String, com.google.protobuf.any.Any)](__m => (__m.key, __m.getValue))(__p => io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry(__p._1, Some(__p._2)))
    def of(
      key: _root_.scala.Predef.String,
      value: _root_.scala.Option[com.google.protobuf.any.Any]
    ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry(
      key,
      value
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry])
  }
  
  implicit class ClusterLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster](_l) {
    def transportSocketMatches: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch]] = field(_.transportSocketMatches)((c_, f_) => c_.copy(transportSocketMatches = f_))
    def name: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.name)((c_, f_) => c_.copy(name = f_))
    def altStatName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.altStatName)((c_, f_) => c_.copy(altStatName = f_))
    def `type`: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.DiscoveryType] = field(_.getType)((c_, f_) => c_.copy(clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.Type(f_)))
    def clusterType: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CustomClusterType] = field(_.getClusterType)((c_, f_) => c_.copy(clusterDiscoveryType = io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType.ClusterType(f_)))
    def edsClusterConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig] = field(_.getEdsClusterConfig)((c_, f_) => c_.copy(edsClusterConfig = Option(f_)))
    def optionalEdsClusterConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig]] = field(_.edsClusterConfig)((c_, f_) => c_.copy(edsClusterConfig = f_))
    def connectTimeout: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getConnectTimeout)((c_, f_) => c_.copy(connectTimeout = Option(f_)))
    def optionalConnectTimeout: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.connectTimeout)((c_, f_) => c_.copy(connectTimeout = f_))
    def perConnectionBufferLimitBytes: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getPerConnectionBufferLimitBytes)((c_, f_) => c_.copy(perConnectionBufferLimitBytes = Option(f_)))
    def optionalPerConnectionBufferLimitBytes: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Int]] = field(_.perConnectionBufferLimitBytes)((c_, f_) => c_.copy(perConnectionBufferLimitBytes = f_))
    def lbPolicy: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy] = field(_.lbPolicy)((c_, f_) => c_.copy(lbPolicy = f_))
    def loadAssignment: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment] = field(_.getLoadAssignment)((c_, f_) => c_.copy(loadAssignment = Option(f_)))
    def optionalLoadAssignment: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment]] = field(_.loadAssignment)((c_, f_) => c_.copy(loadAssignment = f_))
    def healthChecks: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.HealthCheck]] = field(_.healthChecks)((c_, f_) => c_.copy(healthChecks = f_))
    def maxRequestsPerConnection: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getMaxRequestsPerConnection)((c_, f_) => c_.copy(maxRequestsPerConnection = Option(f_)))
    def optionalMaxRequestsPerConnection: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Int]] = field(_.maxRequestsPerConnection)((c_, f_) => c_.copy(maxRequestsPerConnection = f_))
    def circuitBreakers: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers] = field(_.getCircuitBreakers)((c_, f_) => c_.copy(circuitBreakers = Option(f_)))
    def optionalCircuitBreakers: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers]] = field(_.circuitBreakers)((c_, f_) => c_.copy(circuitBreakers = f_))
    def upstreamHttpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions] = field(_.getUpstreamHttpProtocolOptions)((c_, f_) => c_.copy(upstreamHttpProtocolOptions = Option(f_)))
    def optionalUpstreamHttpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions]] = field(_.upstreamHttpProtocolOptions)((c_, f_) => c_.copy(upstreamHttpProtocolOptions = f_))
    def commonHttpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions] = field(_.getCommonHttpProtocolOptions)((c_, f_) => c_.copy(commonHttpProtocolOptions = Option(f_)))
    def optionalCommonHttpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions]] = field(_.commonHttpProtocolOptions)((c_, f_) => c_.copy(commonHttpProtocolOptions = f_))
    def httpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions] = field(_.getHttpProtocolOptions)((c_, f_) => c_.copy(httpProtocolOptions = Option(f_)))
    def optionalHttpProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions]] = field(_.httpProtocolOptions)((c_, f_) => c_.copy(httpProtocolOptions = f_))
    def http2ProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions] = field(_.getHttp2ProtocolOptions)((c_, f_) => c_.copy(http2ProtocolOptions = Option(f_)))
    def optionalHttp2ProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions]] = field(_.http2ProtocolOptions)((c_, f_) => c_.copy(http2ProtocolOptions = f_))
    def typedExtensionProtocolOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, com.google.protobuf.any.Any]] = field(_.typedExtensionProtocolOptions)((c_, f_) => c_.copy(typedExtensionProtocolOptions = f_))
    def dnsRefreshRate: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getDnsRefreshRate)((c_, f_) => c_.copy(dnsRefreshRate = Option(f_)))
    def optionalDnsRefreshRate: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.dnsRefreshRate)((c_, f_) => c_.copy(dnsRefreshRate = f_))
    def dnsFailureRefreshRate: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate] = field(_.getDnsFailureRefreshRate)((c_, f_) => c_.copy(dnsFailureRefreshRate = Option(f_)))
    def optionalDnsFailureRefreshRate: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate]] = field(_.dnsFailureRefreshRate)((c_, f_) => c_.copy(dnsFailureRefreshRate = f_))
    def respectDnsTtl: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.respectDnsTtl)((c_, f_) => c_.copy(respectDnsTtl = f_))
    def dnsLookupFamily: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily] = field(_.dnsLookupFamily)((c_, f_) => c_.copy(dnsLookupFamily = f_))
    def dnsResolvers: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.Address]] = field(_.dnsResolvers)((c_, f_) => c_.copy(dnsResolvers = f_))
    def useTcpForDnsLookups: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.useTcpForDnsLookups)((c_, f_) => c_.copy(useTcpForDnsLookups = f_))
    def dnsResolutionConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig] = field(_.getDnsResolutionConfig)((c_, f_) => c_.copy(dnsResolutionConfig = Option(f_)))
    def optionalDnsResolutionConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig]] = field(_.dnsResolutionConfig)((c_, f_) => c_.copy(dnsResolutionConfig = f_))
    def typedDnsResolverConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = field(_.getTypedDnsResolverConfig)((c_, f_) => c_.copy(typedDnsResolverConfig = Option(f_)))
    def optionalTypedDnsResolverConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig]] = field(_.typedDnsResolverConfig)((c_, f_) => c_.copy(typedDnsResolverConfig = f_))
    def waitForWarmOnInit: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.getWaitForWarmOnInit)((c_, f_) => c_.copy(waitForWarmOnInit = Option(f_)))
    def optionalWaitForWarmOnInit: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[_root_.scala.Boolean]] = field(_.waitForWarmOnInit)((c_, f_) => c_.copy(waitForWarmOnInit = f_))
    def outlierDetection: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.OutlierDetection] = field(_.getOutlierDetection)((c_, f_) => c_.copy(outlierDetection = Option(f_)))
    def optionalOutlierDetection: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection]] = field(_.outlierDetection)((c_, f_) => c_.copy(outlierDetection = f_))
    def cleanupInterval: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.duration.Duration] = field(_.getCleanupInterval)((c_, f_) => c_.copy(cleanupInterval = Option(f_)))
    def optionalCleanupInterval: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.duration.Duration]] = field(_.cleanupInterval)((c_, f_) => c_.copy(cleanupInterval = f_))
    def upstreamBindConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.BindConfig] = field(_.getUpstreamBindConfig)((c_, f_) => c_.copy(upstreamBindConfig = Option(f_)))
    def optionalUpstreamBindConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.BindConfig]] = field(_.upstreamBindConfig)((c_, f_) => c_.copy(upstreamBindConfig = f_))
    def lbSubsetConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig] = field(_.getLbSubsetConfig)((c_, f_) => c_.copy(lbSubsetConfig = Option(f_)))
    def optionalLbSubsetConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig]] = field(_.lbSubsetConfig)((c_, f_) => c_.copy(lbSubsetConfig = f_))
    def ringHashLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RingHashLbConfig] = field(_.getRingHashLbConfig)((c_, f_) => c_.copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RingHashLbConfig(f_)))
    def maglevLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.MaglevLbConfig] = field(_.getMaglevLbConfig)((c_, f_) => c_.copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.MaglevLbConfig(f_)))
    def originalDstLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.OriginalDstLbConfig] = field(_.getOriginalDstLbConfig)((c_, f_) => c_.copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.OriginalDstLbConfig(f_)))
    def leastRequestLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LeastRequestLbConfig] = field(_.getLeastRequestLbConfig)((c_, f_) => c_.copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.LeastRequestLbConfig(f_)))
    def roundRobinLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.RoundRobinLbConfig] = field(_.getRoundRobinLbConfig)((c_, f_) => c_.copy(lbConfig = io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig.RoundRobinLbConfig(f_)))
    def commonLbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig] = field(_.getCommonLbConfig)((c_, f_) => c_.copy(commonLbConfig = Option(f_)))
    def optionalCommonLbConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig]] = field(_.commonLbConfig)((c_, f_) => c_.copy(commonLbConfig = f_))
    def transportSocket: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.TransportSocket] = field(_.getTransportSocket)((c_, f_) => c_.copy(transportSocket = Option(f_)))
    def optionalTransportSocket: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket]] = field(_.transportSocket)((c_, f_) => c_.copy(transportSocket = f_))
    def metadata: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.Metadata] = field(_.getMetadata)((c_, f_) => c_.copy(metadata = Option(f_)))
    def optionalMetadata: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Metadata]] = field(_.metadata)((c_, f_) => c_.copy(metadata = f_))
    def protocolSelection: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection] = field(_.protocolSelection)((c_, f_) => c_.copy(protocolSelection = f_))
    def upstreamConnectionOptions: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions] = field(_.getUpstreamConnectionOptions)((c_, f_) => c_.copy(upstreamConnectionOptions = Option(f_)))
    def optionalUpstreamConnectionOptions: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions]] = field(_.upstreamConnectionOptions)((c_, f_) => c_.copy(upstreamConnectionOptions = f_))
    def closeConnectionsOnHostHealthFailure: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.closeConnectionsOnHostHealthFailure)((c_, f_) => c_.copy(closeConnectionsOnHostHealthFailure = f_))
    def ignoreHealthOnHostRemoval: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.ignoreHealthOnHostRemoval)((c_, f_) => c_.copy(ignoreHealthOnHostRemoval = f_))
    def filters: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Filter]] = field(_.filters)((c_, f_) => c_.copy(filters = f_))
    def loadBalancingPolicy: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy] = field(_.getLoadBalancingPolicy)((c_, f_) => c_.copy(loadBalancingPolicy = Option(f_)))
    def optionalLoadBalancingPolicy: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy]] = field(_.loadBalancingPolicy)((c_, f_) => c_.copy(loadBalancingPolicy = f_))
    def lrsServer: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.ConfigSource] = field(_.getLrsServer)((c_, f_) => c_.copy(lrsServer = Option(f_)))
    def optionalLrsServer: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource]] = field(_.lrsServer)((c_, f_) => c_.copy(lrsServer = f_))
    def trackTimeoutBudgets: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.trackTimeoutBudgets)((c_, f_) => c_.copy(trackTimeoutBudgets = f_))
    def upstreamConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig] = field(_.getUpstreamConfig)((c_, f_) => c_.copy(upstreamConfig = Option(f_)))
    def optionalUpstreamConfig: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig]] = field(_.upstreamConfig)((c_, f_) => c_.copy(upstreamConfig = f_))
    def trackClusterStats: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats] = field(_.getTrackClusterStats)((c_, f_) => c_.copy(trackClusterStats = Option(f_)))
    def optionalTrackClusterStats: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats]] = field(_.trackClusterStats)((c_, f_) => c_.copy(trackClusterStats = f_))
    def preconnectPolicy: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy] = field(_.getPreconnectPolicy)((c_, f_) => c_.copy(preconnectPolicy = Option(f_)))
    def optionalPreconnectPolicy: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy]] = field(_.preconnectPolicy)((c_, f_) => c_.copy(preconnectPolicy = f_))
    def connectionPoolPerDownstreamConnection: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.connectionPoolPerDownstreamConnection)((c_, f_) => c_.copy(connectionPoolPerDownstreamConnection = f_))
    def clusterDiscoveryType: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType] = field(_.clusterDiscoveryType)((c_, f_) => c_.copy(clusterDiscoveryType = f_))
    def lbConfig: _root_.scalapb.lenses.Lens[UpperPB, io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig] = field(_.lbConfig)((c_, f_) => c_.copy(lbConfig = f_))
  }
  final val TRANSPORT_SOCKET_MATCHES_FIELD_NUMBER = 43
  final val NAME_FIELD_NUMBER = 1
  final val ALT_STAT_NAME_FIELD_NUMBER = 28
  final val TYPE_FIELD_NUMBER = 2
  final val CLUSTER_TYPE_FIELD_NUMBER = 38
  final val EDS_CLUSTER_CONFIG_FIELD_NUMBER = 3
  final val CONNECT_TIMEOUT_FIELD_NUMBER = 4
  final val PER_CONNECTION_BUFFER_LIMIT_BYTES_FIELD_NUMBER = 5
  final val LB_POLICY_FIELD_NUMBER = 6
  final val LOAD_ASSIGNMENT_FIELD_NUMBER = 33
  final val HEALTH_CHECKS_FIELD_NUMBER = 8
  final val MAX_REQUESTS_PER_CONNECTION_FIELD_NUMBER = 9
  final val CIRCUIT_BREAKERS_FIELD_NUMBER = 10
  final val UPSTREAM_HTTP_PROTOCOL_OPTIONS_FIELD_NUMBER = 46
  final val COMMON_HTTP_PROTOCOL_OPTIONS_FIELD_NUMBER = 29
  final val HTTP_PROTOCOL_OPTIONS_FIELD_NUMBER = 13
  final val HTTP2_PROTOCOL_OPTIONS_FIELD_NUMBER = 14
  final val TYPED_EXTENSION_PROTOCOL_OPTIONS_FIELD_NUMBER = 36
  final val DNS_REFRESH_RATE_FIELD_NUMBER = 16
  final val DNS_FAILURE_REFRESH_RATE_FIELD_NUMBER = 44
  final val RESPECT_DNS_TTL_FIELD_NUMBER = 39
  final val DNS_LOOKUP_FAMILY_FIELD_NUMBER = 17
  final val DNS_RESOLVERS_FIELD_NUMBER = 18
  final val USE_TCP_FOR_DNS_LOOKUPS_FIELD_NUMBER = 45
  final val DNS_RESOLUTION_CONFIG_FIELD_NUMBER = 53
  final val TYPED_DNS_RESOLVER_CONFIG_FIELD_NUMBER = 55
  final val WAIT_FOR_WARM_ON_INIT_FIELD_NUMBER = 54
  final val OUTLIER_DETECTION_FIELD_NUMBER = 19
  final val CLEANUP_INTERVAL_FIELD_NUMBER = 20
  final val UPSTREAM_BIND_CONFIG_FIELD_NUMBER = 21
  final val LB_SUBSET_CONFIG_FIELD_NUMBER = 22
  final val RING_HASH_LB_CONFIG_FIELD_NUMBER = 23
  final val MAGLEV_LB_CONFIG_FIELD_NUMBER = 52
  final val ORIGINAL_DST_LB_CONFIG_FIELD_NUMBER = 34
  final val LEAST_REQUEST_LB_CONFIG_FIELD_NUMBER = 37
  final val ROUND_ROBIN_LB_CONFIG_FIELD_NUMBER = 56
  final val COMMON_LB_CONFIG_FIELD_NUMBER = 27
  final val TRANSPORT_SOCKET_FIELD_NUMBER = 24
  final val METADATA_FIELD_NUMBER = 25
  final val PROTOCOL_SELECTION_FIELD_NUMBER = 26
  final val UPSTREAM_CONNECTION_OPTIONS_FIELD_NUMBER = 30
  final val CLOSE_CONNECTIONS_ON_HOST_HEALTH_FAILURE_FIELD_NUMBER = 31
  final val IGNORE_HEALTH_ON_HOST_REMOVAL_FIELD_NUMBER = 32
  final val FILTERS_FIELD_NUMBER = 40
  final val LOAD_BALANCING_POLICY_FIELD_NUMBER = 41
  final val LRS_SERVER_FIELD_NUMBER = 42
  final val TRACK_TIMEOUT_BUDGETS_FIELD_NUMBER = 47
  final val UPSTREAM_CONFIG_FIELD_NUMBER = 48
  final val TRACK_CLUSTER_STATS_FIELD_NUMBER = 49
  final val PRECONNECT_POLICY_FIELD_NUMBER = 50
  final val CONNECTION_POOL_PER_DOWNSTREAM_CONNECTION_FIELD_NUMBER = 51
  @transient
  private[v3] val _typemapper_perConnectionBufferLimitBytes: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int]]
  @transient
  private[v3] val _typemapper_maxRequestsPerConnection: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.UInt32Value, _root_.scala.Int]]
  @transient
  private[v3] val _typemapper_typedExtensionProtocolOptions: _root_.scalapb.TypeMapper[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry, (_root_.scala.Predef.String, com.google.protobuf.any.Any)] = implicitly[_root_.scalapb.TypeMapper[io.envoyproxy.envoy.config.cluster.v3.Cluster.TypedExtensionProtocolOptionsEntry, (_root_.scala.Predef.String, com.google.protobuf.any.Any)]]
  @transient
  private[v3] val _typemapper_waitForWarmOnInit: _root_.scalapb.TypeMapper[com.google.protobuf.wrappers.BoolValue, _root_.scala.Boolean] = implicitly[_root_.scalapb.TypeMapper[com.google.protobuf.wrappers.BoolValue, _root_.scala.Boolean]]
  def of(
    transportSocketMatches: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Cluster.TransportSocketMatch],
    name: _root_.scala.Predef.String,
    altStatName: _root_.scala.Predef.String,
    clusterDiscoveryType: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterDiscoveryType,
    edsClusterConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.EdsClusterConfig],
    connectTimeout: _root_.scala.Option[com.google.protobuf.duration.Duration],
    perConnectionBufferLimitBytes: _root_.scala.Option[_root_.scala.Int],
    lbPolicy: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbPolicy,
    loadAssignment: _root_.scala.Option[io.envoyproxy.envoy.config.endpoint.v3.ClusterLoadAssignment],
    healthChecks: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.HealthCheck],
    maxRequestsPerConnection: _root_.scala.Option[_root_.scala.Int],
    circuitBreakers: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.CircuitBreakers],
    upstreamHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.UpstreamHttpProtocolOptions],
    commonHttpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.HttpProtocolOptions],
    httpProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http1ProtocolOptions],
    http2ProtocolOptions: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Http2ProtocolOptions],
    typedExtensionProtocolOptions: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, com.google.protobuf.any.Any],
    dnsRefreshRate: _root_.scala.Option[com.google.protobuf.duration.Duration],
    dnsFailureRefreshRate: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.RefreshRate],
    respectDnsTtl: _root_.scala.Boolean,
    dnsLookupFamily: io.envoyproxy.envoy.config.cluster.v3.Cluster.DnsLookupFamily,
    dnsResolvers: _root_.scala.Seq[io.envoyproxy.envoy.config.core.v3.Address],
    useTcpForDnsLookups: _root_.scala.Boolean,
    dnsResolutionConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.DnsResolutionConfig],
    typedDnsResolverConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig],
    waitForWarmOnInit: _root_.scala.Option[_root_.scala.Boolean],
    outlierDetection: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.OutlierDetection],
    cleanupInterval: _root_.scala.Option[com.google.protobuf.duration.Duration],
    upstreamBindConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.BindConfig],
    lbSubsetConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.LbSubsetConfig],
    lbConfig: io.envoyproxy.envoy.config.cluster.v3.Cluster.LbConfig,
    commonLbConfig: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.CommonLbConfig],
    transportSocket: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TransportSocket],
    metadata: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.Metadata],
    protocolSelection: io.envoyproxy.envoy.config.cluster.v3.Cluster.ClusterProtocolSelection,
    upstreamConnectionOptions: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions],
    closeConnectionsOnHostHealthFailure: _root_.scala.Boolean,
    ignoreHealthOnHostRemoval: _root_.scala.Boolean,
    filters: _root_.scala.Seq[io.envoyproxy.envoy.config.cluster.v3.Filter],
    loadBalancingPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.LoadBalancingPolicy],
    lrsServer: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.ConfigSource],
    trackTimeoutBudgets: _root_.scala.Boolean,
    upstreamConfig: _root_.scala.Option[io.envoyproxy.envoy.config.core.v3.TypedExtensionConfig],
    trackClusterStats: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats],
    preconnectPolicy: _root_.scala.Option[io.envoyproxy.envoy.config.cluster.v3.Cluster.PreconnectPolicy],
    connectionPoolPerDownstreamConnection: _root_.scala.Boolean
  ): _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster = _root_.io.envoyproxy.envoy.config.cluster.v3.Cluster(
    transportSocketMatches,
    name,
    altStatName,
    clusterDiscoveryType,
    edsClusterConfig,
    connectTimeout,
    perConnectionBufferLimitBytes,
    lbPolicy,
    loadAssignment,
    healthChecks,
    maxRequestsPerConnection,
    circuitBreakers,
    upstreamHttpProtocolOptions,
    commonHttpProtocolOptions,
    httpProtocolOptions,
    http2ProtocolOptions,
    typedExtensionProtocolOptions,
    dnsRefreshRate,
    dnsFailureRefreshRate,
    respectDnsTtl,
    dnsLookupFamily,
    dnsResolvers,
    useTcpForDnsLookups,
    dnsResolutionConfig,
    typedDnsResolverConfig,
    waitForWarmOnInit,
    outlierDetection,
    cleanupInterval,
    upstreamBindConfig,
    lbSubsetConfig,
    lbConfig,
    commonLbConfig,
    transportSocket,
    metadata,
    protocolSelection,
    upstreamConnectionOptions,
    closeConnectionsOnHostHealthFailure,
    ignoreHealthOnHostRemoval,
    filters,
    loadBalancingPolicy,
    lrsServer,
    trackTimeoutBudgets,
    upstreamConfig,
    trackClusterStats,
    preconnectPolicy,
    connectionPoolPerDownstreamConnection
  )
  // @@protoc_insertion_point(GeneratedMessageCompanion[envoy.config.cluster.v3.Cluster])
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy