// Copyright 2025 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/v2"
//	...
//	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/v2"

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

	"github.com/googleapis/gax-go/v2/internallog"
	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
var _ = internallog.New

const apiId = "trafficdirector:v2"
const apiName = "trafficdirector"
const apiVersion = "v2"
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 := &Service{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.Discovery = NewDiscoveryService(s)
	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")
	}
	return NewService(context.TODO(), option.WithHTTPClient(client))
}

type Service struct {
	client    *http.Client
	logger    *slog.Logger
	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 {
	Pipe          *Pipe          `json:"pipe,omitempty"`
	SocketAddress *SocketAddress `json:"socketAddress,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Pipe") 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. "Pipe") 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 {
	// Node: Node for a particular client.
	Node      *Node           `json:"node,omitempty"`
	XdsConfig []*PerXdsConfig `json:"xdsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Node") 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. "Node") 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 {
	// 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. "NodeMatchers") 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. "NodeMatchers") 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)
}

// 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.
type DynamicCluster 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"`
	// 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. "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 DynamicCluster) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicCluster
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DynamicListener: Describes a dynamically loaded listener via the LDS API.
// [#next-free-field: 6]
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"`
	// 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.
	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)
}

type DynamicRouteConfig 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"`
	// 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. "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 DynamicRouteConfig) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicRouteConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type DynamicScopedRouteConfigs 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"`
	// 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. "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 DynamicScopedRouteConfigs) MarshalJSON() ([]byte, error) {
	type NoMethod DynamicScopedRouteConfigs
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Extension: Version and identification for an Envoy extension.
// [#next-free-field: 6]
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"`
	// 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)
}

// 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.
	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: 12]
type Node struct {
	// BuildVersion: This is motivated by informing a management server during
	// canary which version of Envoy is being tested in a heterogeneous fleet. This
	// will be set by Envoy in management server RPCs. This field is deprecated in
	// favor of the user_agent_name and user_agent_version values.
	BuildVersion string `json:"buildVersion,omitempty"`
	// 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"`
	// 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. "BuildVersion") 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. "BuildVersion") 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 {
}

// 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: 6]
type PerXdsConfig struct {
	ClusterConfig     *ClustersConfigDump     `json:"clusterConfig,omitempty"`
	ListenerConfig    *ListenersConfigDump    `json:"listenerConfig,omitempty"`
	RouteConfig       *RoutesConfigDump       `json:"routeConfig,omitempty"`
	ScopedRouteConfig *ScopedRoutesConfigDump `json:"scopedRouteConfig,omitempty"`
	// 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.
	Status string `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClusterConfig") 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. "ClusterConfig") 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.
	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)
}

// 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: 7]
type StringMatcher struct {
	// 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 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"`
	// Regex: The input string must match the regular expression specified here.
	// The regex grammar is defined `here `_. Examples: * The regex ``\d{3}``
	// matches the value *123* * The regex ``\d{3}`` does not match the value
	// *1234* * The regex ``\d{3}`` does not match the value *123.456* ..
	// attention:: This field has been deprecated in favor of `safe_regex` as it is
	// not safe for use with untrusted input in all cases.
	Regex string `json:"regex,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. "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 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)
}

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.
	FailedConfiguration googleapi.RawMessage `json:"failedConfiguration,omitempty"`
	// LastUpdateAttempt: Time of the latest failed update attempt.
	LastUpdateAttempt string `json:"lastUpdateAttempt,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 Protobuf::Value. Primitive values
// and ListValue are supported. StructValue is not supported and is always not
// matched. [#next-free-field: 7]
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"`
	// 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_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.clientstatusrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/discovery:client_status")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "trafficdirector.discovery.client_status", "request", internallog.HTTPRequest(req, body.Bytes()))
	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
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "trafficdirector.discovery.client_status", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}
