// Copyright 2024 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated file. DO NOT EDIT.

// Package trafficdirector provides access to the Traffic Director API.
//
// For product documentation, see: https://cloud.google.com/traffic-director
//
// # Library status
//
// These client libraries are officially supported by Google. However, this
// library is considered complete and is in maintenance mode. This means
// that we will address critical bugs and security issues but will not add
// any new features.
//
// When possible, we recommend using our newer
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
// that are still actively being worked and iterated on.
//
// # Creating a client
//
// Usage example:
//
//	import "google.golang.org/api/trafficdirector/v3"
//	...
//	ctx := context.Background()
//	trafficdirectorService, err := trafficdirector.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	trafficdirectorService, err := trafficdirector.NewService(ctx, option.WithAPIKey("AIza..."))
//
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
// flow, use [google.golang.org/api/option.WithTokenSource]:
//
//	config := &oauth2.Config{...}
//	// ...
//	token, err := config.Exchange(ctx, ...)
//	trafficdirectorService, err := trafficdirector.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package trafficdirector // import "google.golang.org/api/trafficdirector/v3"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	googleapi "google.golang.org/api/googleapi"
	internal "google.golang.org/api/internal"
	gensupport "google.golang.org/api/internal/gensupport"
	option "google.golang.org/api/option"
	internaloption "google.golang.org/api/option/internaloption"
	htransport "google.golang.org/api/transport/http"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = gensupport.MarshalJSON
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace
var _ = context.Canceled
var _ = internaloption.WithDefaultEndpoint
var _ = internal.Version

const apiId = "trafficdirector:v3"
const apiName = "trafficdirector"
const apiVersion = "v3"
const basePath = "https://trafficdirector.googleapis.com/"
const basePathTemplate = "https://trafficdirector.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://trafficdirector.mtls.googleapis.com/"

// OAuth2 scopes used by this API.
const (
	// See, edit, configure, and delete your Google Cloud data and see the email
	// address for your Google Account.
	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
)

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	scopesOption := internaloption.WithDefaultScopes(
		"https://www.googleapis.com/auth/cloud-platform",
	)
	// NOTE: prepend, so we don't override user-specified scopes.
	opts = append([]option.ClientOption{scopesOption}, opts...)
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s, err := New(client)
	if err != nil {
		return nil, err
	}
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

// New creates a new Service. It uses the provided http.Client for requests.
//
// Deprecated: please use NewService instead.
// To provide a custom HTTP client, use option.WithHTTPClient.
// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.
func New(client *http.Client) (*Service, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	s := &Service{client: client, BasePath: basePath}
	s.Discovery = NewDiscoveryService(s)
	return s, nil
}

type Service struct {
	client    *http.Client
	BasePath  string // API endpoint base URL
	UserAgent string // optional additional User-Agent fragment

	Discovery *DiscoveryService
}

func (s *Service) userAgent() string {
	if s.UserAgent == "" {
		return googleapi.UserAgent
	}
	return googleapi.UserAgent + " " + s.UserAgent
}

func NewDiscoveryService(s *Service) *DiscoveryService {
	rs := &DiscoveryService{s: s}
	return rs
}

type DiscoveryService struct {
	s *Service
}

// Address: Addresses specify either a logical or physical address and port,
// which are used to tell Envoy where to bind/listen, connect to upstream and
// find management servers.
type Address struct {
	// EnvoyInternalAddress: Specifies a user-space address handled by
	// :ref:`internal listeners `.
	EnvoyInternalAddress *EnvoyInternalAddress `json:"envoyInternalAddress,omitempty"`
	Pipe                 *Pipe                 `json:"pipe,omitempty"`
	SocketAddress        *SocketAddress        `json:"socketAddress,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EnvoyInternalAddress") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EnvoyInternalAddress") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *Address) MarshalJSON() ([]byte, error) {
	type NoMethod Address
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// BuildVersion: BuildVersion combines SemVer version of extension with
// free-form build information (i.e. 'alpha', 'private-build') as a set of
// strings.
type BuildVersion struct {
	// Metadata: Free-form build information. Envoy defines several well known keys
	// in the source/common/version/version.h file
	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
	// Version: SemVer version of extension.
	Version *SemanticVersion `json:"version,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Metadata") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Metadata") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *BuildVersion) MarshalJSON() ([]byte, error) {
	type NoMethod BuildVersion
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ClientConfig: All xds configs for a particular client.
type ClientConfig struct {
	// ClientScope: For xDS clients, the scope in which the data is used. For
	// example, gRPC indicates the data plane target or that the data is associated
	// with gRPC server(s).
	ClientScope string `json:"clientScope,omitempty"`
	// GenericXdsConfigs: Represents generic xDS config and the exact config
	// structure depends on the type URL (like Cluster if it is CDS)
	GenericXdsConfigs []*GenericXdsConfig `json:"genericXdsConfigs,omitempty"`
	// Node: Node for a particular client.
	Node *Node `json:"node,omitempty"`
	// XdsConfig: This field is deprecated in favor of generic_xds_configs which is
	// much simpler and uniform in structure.
	XdsConfig []*PerXdsConfig `json:"xdsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientScope") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientScope") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ClientConfig) MarshalJSON() ([]byte, error) {
	type NoMethod ClientConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ClientStatusRequest: Request for client status of clients identified by a
// list of NodeMatchers.
type ClientStatusRequest struct {
	// ExcludeResourceContents: If true, the server will not include the resource
	// contents in the response (i.e., the generic_xds_configs.xds_config field
	// will not be populated). [#not-implemented-hide:]
	ExcludeResourceContents bool `json:"excludeResourceContents,omitempty"`
	// Node: The node making the csds request.
	Node *Node `json:"node,omitempty"`
	// NodeMatchers: Management server can use these match criteria to identify
	// clients. The match follows OR semantics.
	NodeMatchers []*NodeMatcher `json:"nodeMatchers,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExcludeResourceContents") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExcludeResourceContents") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ClientStatusRequest) MarshalJSON() ([]byte, error) {
	type NoMethod ClientStatusRequest
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type ClientStatusResponse struct {
	// Config: Client configs for the clients specified in the ClientStatusRequest.
	Config []*ClientConfig `json:"config,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Config") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Config") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ClientStatusResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ClientStatusResponse
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ClustersConfigDump: Envoy's cluster manager fills this message with all
// currently known clusters. Cluster configuration information can be used to
// recreate an Envoy configuration by populating all clusters as static
// clusters or by returning them in a CDS response.
type ClustersConfigDump struct {
	// DynamicActiveClusters: The dynamically loaded active clusters. These are
	// clusters that are available to service data plane traffic.
	DynamicActiveClusters []*DynamicCluster `json:"dynamicActiveClusters,omitempty"`
	// DynamicWarmingClusters: The dynamically loaded warming clusters. These are
	// clusters that are currently undergoing warming in preparation to service
	// data plane traffic. Note that if attempting to recreate an Envoy
	// configuration from a configuration dump, the warming clusters should
	// generally be discarded.
	DynamicWarmingClusters []*DynamicCluster `json:"dynamicWarmingClusters,omitempty"`
	// StaticClusters: The statically loaded cluster configs.
	StaticClusters []*StaticCluster `json:"staticClusters,omitempty"`
	// VersionInfo: This is the :ref:`version_info ` in the last processed CDS
	// discovery response. If there are only static bootstrap clusters, this field
	// will be "".
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicActiveClusters") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicActiveClusters") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ClustersConfigDump) MarshalJSON() ([]byte, error) {
	type NoMethod ClustersConfigDump
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ContextParams: Additional parameters that can be used to select resource
// variants. These include any global context parameters, per-resource type
// client feature capabilities and per-resource type functional attributes. All
// per-resource type attributes will be `xds.resource.` prefixed and some of
// these are documented below: `xds.resource.listening_address`: The value is
// "IP:port" (e.g. "10.1.1.3:8080") which is the listening address of a
// Listener. Used in a Listener resource query.
type ContextParams struct {
	Params map[string]string `json:"params,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Params") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Params") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ContextParams) MarshalJSON() ([]byte, error) {
	type NoMethod ContextParams
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// DoubleMatcher: Specifies the way to match a double value.
type DoubleMatcher struct {
	// Exact: If specified, the input double value must be equal to the value
	// specified here.
	Exact float64 `json:"exact,omitempty"`
	// Range: If specified, the input double value must be in the range specified
	// here. Note: The range is using half-open interval semantics [start, end).
	Range *DoubleRange `json:"range,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Exact") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Exact") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DoubleMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod DoubleMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

func (s *DoubleMatcher) UnmarshalJSON(data []byte) error {
	type NoMethod DoubleMatcher
	var s1 struct {
		Exact gensupport.JSONFloat64 `json:"exact"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Exact = float64(s1.Exact)
	return nil
}

// DoubleRange: Specifies the double start and end of the range using half-open
// interval semantics [start, end).
type DoubleRange struct {
	// End: end of the range (exclusive)
	End float64 `json:"end,omitempty"`
	// Start: start of the range (inclusive)
	Start float64 `json:"start,omitempty"`
	// ForceSendFields is a list of field names (e.g. "End") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "End") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DoubleRange) MarshalJSON() ([]byte, error) {
	type NoMethod DoubleRange
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

func (s *DoubleRange) UnmarshalJSON(data []byte) error {
	type NoMethod DoubleRange
	var s1 struct {
		End   gensupport.JSONFloat64 `json:"end"`
		Start gensupport.JSONFloat64 `json:"start"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.End = float64(s1.End)
	s.Start = float64(s1.Start)
	return nil
}

// DynamicCluster: Describes a dynamically loaded cluster via the CDS API.
// [#next-free-field: 6]
type DynamicCluster struct {
	// ClientStatus: The client status of this resource. [#not-implemented-hide:]
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// Cluster: The cluster config.
	Cluster googleapi.RawMessage `json:"cluster,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The ``error_state`` field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	// [#not-implemented-hide:]
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// LastUpdated: The timestamp when the Cluster was last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// VersionInfo: This is the per-resource version information. This version is
	// currently taken from the :ref:`version_info ` field at the time that the
	// cluster was loaded. In the future, discrete per-cluster versions may be
	// supported by the API.
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicCluster) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicCluster
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// DynamicEndpointConfig: [#next-free-field: 6]
type DynamicEndpointConfig struct {
	// ClientStatus: The client status of this resource. [#not-implemented-hide:]
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// EndpointConfig: The endpoint config.
	EndpointConfig googleapi.RawMessage `json:"endpointConfig,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The ``error_state`` field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	// [#not-implemented-hide:]
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// LastUpdated: [#not-implemented-hide:] The timestamp when the Endpoint was
	// last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// VersionInfo: [#not-implemented-hide:] This is the per-resource version
	// information. This version is currently taken from the :ref:`version_info `
	// field at the time that the endpoint configuration was loaded.
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicEndpointConfig) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicEndpointConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// DynamicListener: Describes a dynamically loaded listener via the LDS API.
// [#next-free-field: 7]
type DynamicListener struct {
	// ActiveState: The listener state for any active listener by this name. These
	// are listeners that are available to service data plane traffic.
	ActiveState *DynamicListenerState `json:"activeState,omitempty"`
	// ClientStatus: The client status of this resource. [#not-implemented-hide:]
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// DrainingState: The listener state for any draining listener by this name.
	// These are listeners that are currently undergoing draining in preparation to
	// stop servicing data plane traffic. Note that if attempting to recreate an
	// Envoy configuration from a configuration dump, the draining listeners should
	// generally be discarded.
	DrainingState *DynamicListenerState `json:"drainingState,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The ``error_state`` field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// Name: The name or unique id of this listener, pulled from the
	// DynamicListenerState config.
	Name string `json:"name,omitempty"`
	// WarmingState: The listener state for any warming listener by this name.
	// These are listeners that are currently undergoing warming in preparation to
	// service data plane traffic. Note that if attempting to recreate an Envoy
	// configuration from a configuration dump, the warming listeners should
	// generally be discarded.
	WarmingState *DynamicListenerState `json:"warmingState,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ActiveState") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ActiveState") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicListener) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicListener
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type DynamicListenerState struct {
	// LastUpdated: The timestamp when the Listener was last successfully updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// Listener: The listener config.
	Listener googleapi.RawMessage `json:"listener,omitempty"`
	// VersionInfo: This is the per-resource version information. This version is
	// currently taken from the :ref:`version_info ` field at the time that the
	// listener was loaded. In the future, discrete per-listener versions may be
	// supported by the API.
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LastUpdated") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LastUpdated") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicListenerState) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicListenerState
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// DynamicRouteConfig: [#next-free-field: 6]
type DynamicRouteConfig struct {
	// ClientStatus: The client status of this resource. [#not-implemented-hide:]
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The ``error_state`` field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	// [#not-implemented-hide:]
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// LastUpdated: The timestamp when the Route was last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// RouteConfig: The route config.
	RouteConfig googleapi.RawMessage `json:"routeConfig,omitempty"`
	// VersionInfo: This is the per-resource version information. This version is
	// currently taken from the :ref:`version_info ` field at the time that the
	// route configuration was loaded.
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicRouteConfig) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicRouteConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// DynamicScopedRouteConfigs: [#next-free-field: 7]
type DynamicScopedRouteConfigs struct {
	// ClientStatus: The client status of this resource. [#not-implemented-hide:]
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The ``error_state`` field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	// [#not-implemented-hide:]
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// LastUpdated: The timestamp when the scoped route config set was last
	// updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// Name: The name assigned to the scoped route configurations.
	Name string `json:"name,omitempty"`
	// ScopedRouteConfigs: The scoped route configurations.
	ScopedRouteConfigs []googleapi.RawMessage `json:"scopedRouteConfigs,omitempty"`
	// VersionInfo: This is the per-resource version information. This version is
	// currently taken from the :ref:`version_info ` field at the time that the
	// scoped routes configuration was loaded.
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *DynamicScopedRouteConfigs) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicScopedRouteConfigs
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// EndpointsConfigDump: Envoy's admin fill this message with all currently
// known endpoints. Endpoint configuration information can be used to recreate
// an Envoy configuration by populating all endpoints as static endpoints or by
// returning them in an EDS response.
type EndpointsConfigDump struct {
	// DynamicEndpointConfigs: The dynamically loaded endpoint configs.
	DynamicEndpointConfigs []*DynamicEndpointConfig `json:"dynamicEndpointConfigs,omitempty"`
	// StaticEndpointConfigs: The statically loaded endpoint configs.
	StaticEndpointConfigs []*StaticEndpointConfig `json:"staticEndpointConfigs,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicEndpointConfigs") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicEndpointConfigs") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *EndpointsConfigDump) MarshalJSON() ([]byte, error) {
	type NoMethod EndpointsConfigDump
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// EnvoyInternalAddress: The address represents an envoy internal listener.
// [#comment:
type EnvoyInternalAddress struct {
	// EndpointId: Specifies an endpoint identifier to distinguish between multiple
	// endpoints for the same internal listener in a single upstream pool. Only
	// used in the upstream addresses for tracking changes to individual endpoints.
	// This, for example, may be set to the final destination IP for the target
	// internal listener.
	EndpointId string `json:"endpointId,omitempty"`
	// ServerListenerName: Specifies the :ref:`name ` of the internal listener.
	ServerListenerName string `json:"serverListenerName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndpointId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndpointId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *EnvoyInternalAddress) MarshalJSON() ([]byte, error) {
	type NoMethod EnvoyInternalAddress
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// Extension: Version and identification for an Envoy extension.
// [#next-free-field: 7]
type Extension struct {
	// Category: Category of the extension. Extension category names use reverse
	// DNS notation. For instance "envoy.filters.listener" for Envoy's built-in
	// listener filters or "com.acme.filters.http" for HTTP filters from acme.com
	// vendor. [#comment:
	Category string `json:"category,omitempty"`
	// Disabled: Indicates that the extension is present but was disabled via
	// dynamic configuration.
	Disabled bool `json:"disabled,omitempty"`
	// Name: This is the name of the Envoy filter as specified in the Envoy
	// configuration, e.g. envoy.filters.http.router, com.acme.widget.
	Name string `json:"name,omitempty"`
	// TypeDescriptor: [#not-implemented-hide:] Type descriptor of extension
	// configuration proto. [#comment:
	TypeDescriptor string `json:"typeDescriptor,omitempty"`
	// TypeUrls: Type URLs of extension configuration protos.
	TypeUrls []string `json:"typeUrls,omitempty"`
	// Version: The version is a property of the extension and maintained
	// independently of other extensions and the Envoy API. This field is not set
	// when extension did not provide version information.
	Version *BuildVersion `json:"version,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Category") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Category") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *Extension) MarshalJSON() ([]byte, error) {
	type NoMethod Extension
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// GenericXdsConfig: GenericXdsConfig is used to specify the config status and
// the dump of any xDS resource identified by their type URL. It is the
// generalized version of the now deprecated ListenersConfigDump,
// ClustersConfigDump etc [#next-free-field: 10]
type GenericXdsConfig struct {
	// ClientStatus: Per xDS resource status from the view of a xDS client
	//
	// Possible values:
	//   "UNKNOWN" - Resource status is not available/unknown.
	//   "REQUESTED" - Client requested this resource but hasn't received any
	// update from management server. The client will not fail requests, but will
	// queue them until update arrives or the client times out waiting for the
	// resource.
	//   "DOES_NOT_EXIST" - This resource has been requested by the client but has
	// either not been delivered by the server or was previously delivered by the
	// server and then subsequently removed from resources provided by the server.
	// For more information, please refer to the :ref:"Knowing When a Requested
	// Resource Does Not Exist" ` section.
	//   "ACKED" - Client received this resource and replied with ACK.
	//   "NACKED" - Client received this resource and replied with NACK.
	ClientStatus string `json:"clientStatus,omitempty"`
	// ConfigStatus: Per xDS resource config status. It is generated by management
	// servers. It will not be present if the CSDS server is an xDS client.
	//
	// Possible values:
	//   "UNKNOWN" - Status info is not available/unknown.
	//   "SYNCED" - Management server has sent the config to client and received
	// ACK.
	//   "NOT_SENT" - Config is not sent.
	//   "STALE" - Management server has sent the config to client but hasn’t
	// received ACK/NACK.
	//   "ERROR" - Management server has sent the config to client but received
	// NACK. The attached config dump will be the latest config (the rejected one),
	// since it is the persisted version in the management server.
	ConfigStatus string `json:"configStatus,omitempty"`
	// ErrorState: Set if the last update failed, cleared after the next successful
	// update. The *error_state* field contains the rejected version of this
	// particular resource along with the reason and timestamp. For successfully
	// updated or acknowledged resource, this field should be empty.
	// [#not-implemented-hide:]
	ErrorState *UpdateFailureState `json:"errorState,omitempty"`
	// IsStaticResource: Is static resource is true if it is specified in the
	// config supplied through the file at the startup.
	IsStaticResource bool `json:"isStaticResource,omitempty"`
	// LastUpdated: Timestamp when the xDS resource was last updated
	LastUpdated string `json:"lastUpdated,omitempty"`
	// Name: Name of the xDS resource
	Name string `json:"name,omitempty"`
	// TypeUrl: Type_url represents the fully qualified name of xDS resource type
	// like envoy.v3.Cluster, envoy.v3.ClusterLoadAssignment etc.
	TypeUrl string `json:"typeUrl,omitempty"`
	// VersionInfo: This is the :ref:`version_info ` in the last processed xDS
	// discovery response. If there are only static bootstrap listeners, this field
	// will be ""
	VersionInfo string `json:"versionInfo,omitempty"`
	// XdsConfig: The xDS resource config. Actual content depends on the type
	XdsConfig googleapi.RawMessage `json:"xdsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *GenericXdsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GenericXdsConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// GoogleRE2: Google's `RE2 `_ regex engine. The regex string must adhere to
// the documented `syntax `_. The engine is designed to complete execution in
// linear time as well as limit the amount of memory used. Envoy supports
// program size checking via runtime. The runtime keys
// “re2.max_program_size.error_level“ and “re2.max_program_size.warn_level“
// can be set to integers as the maximum program size or complexity that a
// compiled regex can have before an exception is thrown or a warning is
// logged, respectively. “re2.max_program_size.error_level“ defaults to 100,
// and “re2.max_program_size.warn_level“ has no default if unset (will not
// check/log a warning). Envoy emits two stats for tracking the program size of
// regexes: the histogram “re2.program_size“, which records the program size,
// and the counter “re2.exceeded_warn_level“, which is incremented each time
// the program size exceeds the warn level threshold.
type GoogleRE2 struct {
	// MaxProgramSize: This field controls the RE2 "program size" which is a rough
	// estimate of how complex a compiled regex is to evaluate. A regex that has a
	// program size greater than the configured value will fail to compile. In this
	// case, the configured max program size can be increased or the regex can be
	// simplified. If not specified, the default is 100. This field is deprecated;
	// regexp validation should be performed on the management server instead of
	// being done by each individual client. .. note:: Although this field is
	// deprecated, the program size will still be checked against the global
	// ``re2.max_program_size.error_level`` runtime value.
	MaxProgramSize int64 `json:"maxProgramSize,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MaxProgramSize") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MaxProgramSize") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *GoogleRE2) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleRE2
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type InlineScopedRouteConfigs struct {
	// LastUpdated: The timestamp when the scoped route config set was last
	// updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// Name: The name assigned to the scoped route configurations.
	Name string `json:"name,omitempty"`
	// ScopedRouteConfigs: The scoped route configurations.
	ScopedRouteConfigs []googleapi.RawMessage `json:"scopedRouteConfigs,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LastUpdated") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LastUpdated") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *InlineScopedRouteConfigs) MarshalJSON() ([]byte, error) {
	type NoMethod InlineScopedRouteConfigs
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ListMatcher: Specifies the way to match a list value.
type ListMatcher struct {
	// OneOf: If specified, at least one of the values in the list must match the
	// value specified.
	OneOf *ValueMatcher `json:"oneOf,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OneOf") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OneOf") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ListMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod ListMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ListenersConfigDump: Envoy's listener manager fills this message with all
// currently known listeners. Listener configuration information can be used to
// recreate an Envoy configuration by populating all listeners as static
// listeners or by returning them in a LDS response.
type ListenersConfigDump struct {
	// DynamicListeners: State for any warming, active, or draining listeners.
	DynamicListeners []*DynamicListener `json:"dynamicListeners,omitempty"`
	// StaticListeners: The statically loaded listener configs.
	StaticListeners []*StaticListener `json:"staticListeners,omitempty"`
	// VersionInfo: This is the :ref:`version_info ` in the last processed LDS
	// discovery response. If there are only static bootstrap listeners, this field
	// will be "".
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicListeners") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicListeners") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ListenersConfigDump) MarshalJSON() ([]byte, error) {
	type NoMethod ListenersConfigDump
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// Locality: Identifies location of where either Envoy runs or where upstream
// hosts run.
type Locality struct {
	// Region: Region this :ref:`zone ` belongs to.
	Region string `json:"region,omitempty"`
	// SubZone: When used for locality of upstream hosts, this field further splits
	// zone into smaller chunks of sub-zones so they can be load balanced
	// independently.
	SubZone string `json:"subZone,omitempty"`
	// Zone: Defines the local service zone where Envoy is running. Though
	// optional, it should be set if discovery service routing is used and the
	// discovery service exposes :ref:`zone data `, either in this message or via
	// :option:`--service-zone`. The meaning of zone is context dependent, e.g.
	// `Availability Zone (AZ) `_ on AWS, `Zone `_ on GCP, etc.
	Zone string `json:"zone,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Region") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Region") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *Locality) MarshalJSON() ([]byte, error) {
	type NoMethod Locality
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// Node: Identifies a specific Envoy instance. The node identifier is presented
// to the management server, which may use this identifier to distinguish per
// Envoy configuration for serving. [#next-free-field: 13]
type Node struct {
	// ClientFeatures: Client feature support list. These are well known features
	// described in the Envoy API repository for a given major version of an API.
	// Client features use reverse DNS naming scheme, for example
	// ``com.acme.feature``. See :ref:`the list of features ` that xDS client may
	// support.
	ClientFeatures []string `json:"clientFeatures,omitempty"`
	// Cluster: Defines the local service cluster name where Envoy is running.
	// Though optional, it should be set if any of the following features are used:
	// :ref:`statsd `, :ref:`health check cluster verification `, :ref:`runtime
	// override directory `, :ref:`user agent addition `, :ref:`HTTP global rate
	// limiting `, :ref:`CDS `, and :ref:`HTTP tracing `, either in this message or
	// via :option:`--service-cluster`.
	Cluster string `json:"cluster,omitempty"`
	// DynamicParameters: Map from xDS resource type URL to dynamic context
	// parameters. These may vary at runtime (unlike other fields in this message).
	// For example, the xDS client may have a shard identifier that changes during
	// the lifetime of the xDS client. In Envoy, this would be achieved by updating
	// the dynamic context on the Server::Instance's LocalInfo context provider.
	// The shard ID dynamic parameter then appears in this field during future
	// discovery requests.
	DynamicParameters map[string]ContextParams `json:"dynamicParameters,omitempty"`
	// Extensions: List of extensions and their versions supported by the node.
	Extensions []*Extension `json:"extensions,omitempty"`
	// Id: An opaque node identifier for the Envoy node. This also provides the
	// local service node name. It should be set if any of the following features
	// are used: :ref:`statsd `, :ref:`CDS `, and :ref:`HTTP tracing `, either in
	// this message or via :option:`--service-node`.
	Id string `json:"id,omitempty"`
	// ListeningAddresses: Known listening ports on the node as a generic hint to
	// the management server for filtering :ref:`listeners ` to be returned. For
	// example, if there is a listener bound to port 80, the list can optionally
	// contain the SocketAddress ``(0.0.0.0,80)``. The field is optional and just a
	// hint.
	ListeningAddresses []*Address `json:"listeningAddresses,omitempty"`
	// Locality: Locality specifying where the Envoy instance is running.
	Locality *Locality `json:"locality,omitempty"`
	// Metadata: Opaque metadata extending the node identifier. Envoy will pass
	// this directly to the management server.
	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
	// UserAgentBuildVersion: Structured version of the entity requesting config.
	UserAgentBuildVersion *BuildVersion `json:"userAgentBuildVersion,omitempty"`
	// UserAgentName: Free-form string that identifies the entity requesting
	// config. E.g. "envoy" or "grpc"
	UserAgentName string `json:"userAgentName,omitempty"`
	// UserAgentVersion: Free-form string that identifies the version of the entity
	// requesting config. E.g. "1.12.2" or "abcd1234", or "SpecialEnvoyBuild"
	UserAgentVersion string `json:"userAgentVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientFeatures") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientFeatures") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *Node) MarshalJSON() ([]byte, error) {
	type NoMethod Node
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// NodeMatcher: Specifies the way to match a Node. The match follows AND
// semantics.
type NodeMatcher struct {
	// NodeId: Specifies match criteria on the node id.
	NodeId *StringMatcher `json:"nodeId,omitempty"`
	// NodeMetadatas: Specifies match criteria on the node metadata.
	NodeMetadatas []*StructMatcher `json:"nodeMetadatas,omitempty"`
	// ForceSendFields is a list of field names (e.g. "NodeId") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NodeId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *NodeMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod NodeMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// NullMatch: NullMatch is an empty message to specify a null value.
type NullMatch struct {
}

// OrMatcher: Specifies a list of alternatives for the match.
type OrMatcher struct {
	ValueMatchers []*ValueMatcher `json:"valueMatchers,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ValueMatchers") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ValueMatchers") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *OrMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod OrMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// PathSegment: Specifies the segment in a path to retrieve value from Struct.
type PathSegment struct {
	// Key: If specified, use the key to retrieve the value in a Struct.
	Key string `json:"key,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Key") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Key") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *PathSegment) MarshalJSON() ([]byte, error) {
	type NoMethod PathSegment
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// PerXdsConfig: Detailed config (per xDS) with status. [#next-free-field: 8]
type PerXdsConfig struct {
	// ClientStatus: Client config status is populated by xDS clients. Will not be
	// present if the CSDS server is an xDS server. No matter what the client
	// config status is, xDS clients should always dump the most recent accepted
	// xDS config. .. attention:: This field is deprecated. Use
	// :ref:`ClientResourceStatus ` for per-resource config status instead.
	//
	// Possible values:
	//   "CLIENT_UNKNOWN" - Config status is not available/unknown.
	//   "CLIENT_REQUESTED" - Client requested the config but hasn't received any
	// config from management server yet.
	//   "CLIENT_ACKED" - Client received the config and replied with ACK.
	//   "CLIENT_NACKED" - Client received the config and replied with NACK.
	// Notably, the attached config dump is not the NACKed version, but the most
	// recent accepted one. If no config is accepted yet, the attached config dump
	// will be empty.
	ClientStatus      string                  `json:"clientStatus,omitempty"`
	ClusterConfig     *ClustersConfigDump     `json:"clusterConfig,omitempty"`
	EndpointConfig    *EndpointsConfigDump    `json:"endpointConfig,omitempty"`
	ListenerConfig    *ListenersConfigDump    `json:"listenerConfig,omitempty"`
	RouteConfig       *RoutesConfigDump       `json:"routeConfig,omitempty"`
	ScopedRouteConfig *ScopedRoutesConfigDump `json:"scopedRouteConfig,omitempty"`
	// Status: Config status generated by management servers. Will not be present
	// if the CSDS server is an xDS client.
	//
	// Possible values:
	//   "UNKNOWN" - Status info is not available/unknown.
	//   "SYNCED" - Management server has sent the config to client and received
	// ACK.
	//   "NOT_SENT" - Config is not sent.
	//   "STALE" - Management server has sent the config to client but hasn’t
	// received ACK/NACK.
	//   "ERROR" - Management server has sent the config to client but received
	// NACK. The attached config dump will be the latest config (the rejected one),
	// since it is the persisted version in the management server.
	Status string `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientStatus") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientStatus") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *PerXdsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod PerXdsConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type Pipe struct {
	// Mode: The mode for the Pipe. Not applicable for abstract sockets.
	Mode int64 `json:"mode,omitempty"`
	// Path: Unix Domain Socket path. On Linux, paths starting with '@' will use
	// the abstract namespace. The starting '@' is replaced by a null byte by
	// Envoy. Paths starting with '@' will result in an error in environments other
	// than Linux.
	Path string `json:"path,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Mode") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Mode") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *Pipe) MarshalJSON() ([]byte, error) {
	type NoMethod Pipe
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// RegexMatcher: A regex matcher designed for safety when used with untrusted
// input.
type RegexMatcher struct {
	// GoogleRe2: Google's RE2 regex engine.
	GoogleRe2 *GoogleRE2 `json:"googleRe2,omitempty"`
	// Regex: The regex match string. The string must be supported by the
	// configured engine. The regex is matched against the full string, not as a
	// partial match.
	Regex string `json:"regex,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GoogleRe2") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GoogleRe2") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *RegexMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod RegexMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// RoutesConfigDump: Envoy's RDS implementation fills this message with all
// currently loaded routes, as described by their RouteConfiguration objects.
// Static routes that are either defined in the bootstrap configuration or
// defined inline while configuring listeners are separated from those
// configured dynamically via RDS. Route configuration information can be used
// to recreate an Envoy configuration by populating all routes as static routes
// or by returning them in RDS responses.
type RoutesConfigDump struct {
	// DynamicRouteConfigs: The dynamically loaded route configs.
	DynamicRouteConfigs []*DynamicRouteConfig `json:"dynamicRouteConfigs,omitempty"`
	// StaticRouteConfigs: The statically loaded route configs.
	StaticRouteConfigs []*StaticRouteConfig `json:"staticRouteConfigs,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicRouteConfigs") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicRouteConfigs") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *RoutesConfigDump) MarshalJSON() ([]byte, error) {
	type NoMethod RoutesConfigDump
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ScopedRoutesConfigDump: Envoy's scoped RDS implementation fills this message
// with all currently loaded route configuration scopes (defined via
// ScopedRouteConfigurationsSet protos). This message lists both the scopes
// defined inline with the higher order object (i.e., the
// HttpConnectionManager) and the dynamically obtained scopes via the SRDS API.
type ScopedRoutesConfigDump struct {
	// DynamicScopedRouteConfigs: The dynamically loaded scoped route configs.
	DynamicScopedRouteConfigs []*DynamicScopedRouteConfigs `json:"dynamicScopedRouteConfigs,omitempty"`
	// InlineScopedRouteConfigs: The statically loaded scoped route configs.
	InlineScopedRouteConfigs []*InlineScopedRouteConfigs `json:"inlineScopedRouteConfigs,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicScopedRouteConfigs")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicScopedRouteConfigs") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ScopedRoutesConfigDump) MarshalJSON() ([]byte, error) {
	type NoMethod ScopedRoutesConfigDump
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// SemanticVersion: Envoy uses SemVer (https://semver.org/). Major/minor
// versions indicate expected behaviors and APIs, the patch version field is
// used only for security fixes and can be generally ignored.
type SemanticVersion struct {
	MajorNumber int64 `json:"majorNumber,omitempty"`
	MinorNumber int64 `json:"minorNumber,omitempty"`
	Patch       int64 `json:"patch,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MajorNumber") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MajorNumber") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *SemanticVersion) MarshalJSON() ([]byte, error) {
	type NoMethod SemanticVersion
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// SocketAddress: [#next-free-field: 7]
type SocketAddress struct {
	// Address: The address for this socket. :ref:`Listeners ` will bind to the
	// address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::`` to
	// bind to any address. [#comment:TODO(zuercher) reinstate when implemented: It
	// is possible to distinguish a Listener address via the prefix/suffix matching
	// in :ref:`FilterChainMatch `.] When used within an upstream :ref:`BindConfig
	// `, the address controls the source address of outbound connections. For
	// :ref:`clusters `, the cluster type determines whether the address must be an
	// IP (``STATIC`` or ``EDS`` clusters) or a hostname resolved by DNS
	// (``STRICT_DNS`` or ``LOGICAL_DNS`` clusters). Address resolution can be
	// customized via :ref:`resolver_name `.
	Address string `json:"address,omitempty"`
	// Ipv4Compat: When binding to an IPv6 address above, this enables `IPv4
	// compatibility `_. Binding to ``::`` will allow both IPv4 and IPv6
	// connections, with peer IPv4 addresses mapped into IPv6 space as ``::FFFF:``.
	Ipv4Compat bool `json:"ipv4Compat,omitempty"`
	// NamedPort: This is only valid if :ref:`resolver_name ` is specified below
	// and the named resolver is capable of named port resolution.
	NamedPort string `json:"namedPort,omitempty"`
	PortValue int64  `json:"portValue,omitempty"`
	// Possible values:
	//   "TCP"
	//   "UDP"
	Protocol string `json:"protocol,omitempty"`
	// ResolverName: The name of the custom resolver. This must have been
	// registered with Envoy. If this is empty, a context dependent default
	// applies. If the address is a concrete IP address, no resolution will occur.
	// If address is a hostname this should be set for resolution other than DNS.
	// Specifying a custom resolver with ``STRICT_DNS`` or ``LOGICAL_DNS`` will
	// generate an error at runtime.
	ResolverName string `json:"resolverName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Address") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Address") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *SocketAddress) MarshalJSON() ([]byte, error) {
	type NoMethod SocketAddress
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// StaticCluster: Describes a statically loaded cluster.
type StaticCluster struct {
	// Cluster: The cluster config.
	Cluster googleapi.RawMessage `json:"cluster,omitempty"`
	// LastUpdated: The timestamp when the Cluster was last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Cluster") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Cluster") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StaticCluster) MarshalJSON() ([]byte, error) {
	type NoMethod StaticCluster
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type StaticEndpointConfig struct {
	// EndpointConfig: The endpoint config.
	EndpointConfig googleapi.RawMessage `json:"endpointConfig,omitempty"`
	// LastUpdated: [#not-implemented-hide:] The timestamp when the Endpoint was
	// last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndpointConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndpointConfig") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StaticEndpointConfig) MarshalJSON() ([]byte, error) {
	type NoMethod StaticEndpointConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// StaticListener: Describes a statically loaded listener.
type StaticListener struct {
	// LastUpdated: The timestamp when the Listener was last successfully updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// Listener: The listener config.
	Listener googleapi.RawMessage `json:"listener,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LastUpdated") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LastUpdated") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StaticListener) MarshalJSON() ([]byte, error) {
	type NoMethod StaticListener
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type StaticRouteConfig struct {
	// LastUpdated: The timestamp when the Route was last updated.
	LastUpdated string `json:"lastUpdated,omitempty"`
	// RouteConfig: The route config.
	RouteConfig googleapi.RawMessage `json:"routeConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LastUpdated") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LastUpdated") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StaticRouteConfig) MarshalJSON() ([]byte, error) {
	type NoMethod StaticRouteConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// StringMatcher: Specifies the way to match a string. [#next-free-field: 9]
type StringMatcher struct {
	// Contains: The input string must have the substring specified here. Note:
	// empty contains match is not allowed, please use regex instead. Examples: *
	// ``abc`` matches the value ``xyz.abc.def``
	Contains string `json:"contains,omitempty"`
	// Custom: Use an extension as the matcher type. [#extension-category:
	// envoy.string_matcher]
	Custom *TypedExtensionConfig `json:"custom,omitempty"`
	// Exact: The input string must match exactly the string specified here.
	// Examples: * ``abc`` only matches the value ``abc``.
	Exact string `json:"exact,omitempty"`
	// IgnoreCase: If true, indicates the exact/prefix/suffix/contains matching
	// should be case insensitive. This has no effect for the safe_regex match. For
	// example, the matcher ``data`` will match both input string ``Data`` and
	// ``data`` if set to true.
	IgnoreCase bool `json:"ignoreCase,omitempty"`
	// Prefix: The input string must have the prefix specified here. Note: empty
	// prefix is not allowed, please use regex instead. Examples: * ``abc`` matches
	// the value ``abc.xyz``
	Prefix string `json:"prefix,omitempty"`
	// SafeRegex: The input string must match the regular expression specified
	// here.
	SafeRegex *RegexMatcher `json:"safeRegex,omitempty"`
	// Suffix: The input string must have the suffix specified here. Note: empty
	// prefix is not allowed, please use regex instead. Examples: * ``abc`` matches
	// the value ``xyz.abc``
	Suffix string `json:"suffix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Contains") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Contains") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StringMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod StringMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// StructMatcher: StructMatcher provides a general interface to check if a
// given value is matched in google.protobuf.Struct. It uses “path“ to
// retrieve the value from the struct and then check if it's matched to the
// specified value. For example, for the following Struct: .. code-block:: yaml
// fields: a: struct_value: fields: b: struct_value: fields: c: string_value:
// pro t: list_value: values: - string_value: m - string_value: n The following
// MetadataMatcher is matched as the path [a, b, c] will retrieve a string
// value "pro" from the Metadata which is matched to the specified prefix
// match. .. code-block:: yaml path: - key: a - key: b - key: c value:
// string_match: prefix: pr The following StructMatcher is matched as the code
// will match one of the string values in the list at the path [a, t]. ..
// code-block:: yaml path: - key: a - key: t value: list_match: one_of:
// string_match: exact: m An example use of StructMatcher is to match metadata
// in envoy.v*.core.Node.
type StructMatcher struct {
	// Path: The path to retrieve the Value from the Struct.
	Path []*PathSegment `json:"path,omitempty"`
	// Value: The StructMatcher is matched if the value retrieved by path is
	// matched to this value.
	Value *ValueMatcher `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Path") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Path") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *StructMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod StructMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// TypedExtensionConfig: Message type for extension configuration.
type TypedExtensionConfig struct {
	// Name: The name of an extension. This is not used to select the extension,
	// instead it serves the role of an opaque identifier.
	Name string `json:"name,omitempty"`
	// TypedConfig: The typed config for the extension. The type URL will be used
	// to identify the extension. In the case that the type URL is
	// *xds.type.v3.TypedStruct* (or, for historical reasons,
	// *udpa.type.v1.TypedStruct*), the inner type URL of *TypedStruct* will be
	// utilized. See the :ref:`extension configuration overview ` for further
	// details.
	TypedConfig googleapi.RawMessage `json:"typedConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Name") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Name") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *TypedExtensionConfig) MarshalJSON() ([]byte, error) {
	type NoMethod TypedExtensionConfig
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type UpdateFailureState struct {
	// Details: Details about the last failed update attempt.
	Details string `json:"details,omitempty"`
	// FailedConfiguration: What the component configuration would have been if the
	// update had succeeded. This field may not be populated by xDS clients due to
	// storage overhead.
	FailedConfiguration googleapi.RawMessage `json:"failedConfiguration,omitempty"`
	// LastUpdateAttempt: Time of the latest failed update attempt.
	LastUpdateAttempt string `json:"lastUpdateAttempt,omitempty"`
	// VersionInfo: This is the version of the rejected resource.
	// [#not-implemented-hide:]
	VersionInfo string `json:"versionInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Details") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Details") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *UpdateFailureState) MarshalJSON() ([]byte, error) {
	type NoMethod UpdateFailureState
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

// ValueMatcher: Specifies the way to match a ProtobufWkt::Value. Primitive
// values and ListValue are supported. StructValue is not supported and is
// always not matched. [#next-free-field: 8]
type ValueMatcher struct {
	// BoolMatch: If specified, a match occurs if and only if the target value is a
	// bool value and is equal to this field.
	BoolMatch bool `json:"boolMatch,omitempty"`
	// DoubleMatch: If specified, a match occurs if and only if the target value is
	// a double value and is matched to this field.
	DoubleMatch *DoubleMatcher `json:"doubleMatch,omitempty"`
	// ListMatch: If specified, a match occurs if and only if the target value is a
	// list value and is matched to this field.
	ListMatch *ListMatcher `json:"listMatch,omitempty"`
	// NullMatch: If specified, a match occurs if and only if the target value is a
	// NullValue.
	NullMatch *NullMatch `json:"nullMatch,omitempty"`
	// OrMatch: If specified, a match occurs if and only if any of the alternatives
	// in the match accept the value.
	OrMatch *OrMatcher `json:"orMatch,omitempty"`
	// PresentMatch: If specified, value match will be performed based on whether
	// the path is referring to a valid primitive value in the metadata. If the
	// path is referring to a non-primitive value, the result is always not
	// matched.
	PresentMatch bool `json:"presentMatch,omitempty"`
	// StringMatch: If specified, a match occurs if and only if the target value is
	// a string value and is matched to this field.
	StringMatch *StringMatcher `json:"stringMatch,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoolMatch") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoolMatch") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s *ValueMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod ValueMatcher
	return gensupport.MarshalJSON(NoMethod(*s), s.ForceSendFields, s.NullFields)
}

type DiscoveryClientStatusCall struct {
	s                   *Service
	clientstatusrequest *ClientStatusRequest
	urlParams_          gensupport.URLParams
	ctx_                context.Context
	header_             http.Header
}

// ClientStatus:
func (r *DiscoveryService) ClientStatus(clientstatusrequest *ClientStatusRequest) *DiscoveryClientStatusCall {
	c := &DiscoveryClientStatusCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.clientstatusrequest = clientstatusrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *DiscoveryClientStatusCall) Fields(s ...googleapi.Field) *DiscoveryClientStatusCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *DiscoveryClientStatusCall) Context(ctx context.Context) *DiscoveryClientStatusCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *DiscoveryClientStatusCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *DiscoveryClientStatusCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clientstatusrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/discovery:client_status")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "trafficdirector.discovery.client_status" call.
// Any non-2xx status code is an error. Response headers are in either
// *ClientStatusResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *DiscoveryClientStatusCall) Do(opts ...googleapi.CallOption) (*ClientStatusResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ClientStatusResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
}
