// 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 servicecontrol provides access to the Service Control API.
//
// For product documentation, see: https://cloud.google.com/service-control/
//
// # 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/servicecontrol/v1"
//	...
//	ctx := context.Background()
//	servicecontrolService, err := servicecontrol.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
//
// By default, all available scopes (see "Constants") are used to authenticate.
// To restrict scopes, use [google.golang.org/api/option.WithScopes]:
//
//	servicecontrolService, err := servicecontrol.NewService(ctx, option.WithScopes(servicecontrol.ServicecontrolScope))
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	servicecontrolService, err := servicecontrol.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, ...)
//	servicecontrolService, err := servicecontrol.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package servicecontrol // import "google.golang.org/api/servicecontrol/v1"

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 = "servicecontrol:v1"
const apiName = "servicecontrol"
const apiVersion = "v1"
const basePath = "https://servicecontrol.googleapis.com/"
const basePathTemplate = "https://servicecontrol.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://servicecontrol.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"

	// Manage your Google Service Control data
	ServicecontrolScope = "https://www.googleapis.com/auth/servicecontrol"
)

// 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",
		"https://www.googleapis.com/auth/servicecontrol",
	)
	// 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.Services = NewServicesService(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

	Services *ServicesService
}

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

func NewServicesService(s *Service) *ServicesService {
	rs := &ServicesService{s: s}
	return rs
}

type ServicesService struct {
	s *Service
}

type AllocateInfo struct {
	// UnusedArguments: A list of label keys that were unused by the server in
	// processing the request. Thus, for similar requests repeated in a certain
	// future time window, the caller can choose to ignore these labels in the
	// requests to achieve better client-side cache hits and quota aggregation for
	// rate quota. This field is not populated for allocation quota checks.
	UnusedArguments []string `json:"unusedArguments,omitempty"`
	// ForceSendFields is a list of field names (e.g. "UnusedArguments") 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. "UnusedArguments") 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 AllocateInfo) MarshalJSON() ([]byte, error) {
	type NoMethod AllocateInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AllocateQuotaRequest: Request message for the AllocateQuota method.
type AllocateQuotaRequest struct {
	// AllocateOperation: Operation that describes the quota allocation.
	AllocateOperation *QuotaOperation `json:"allocateOperation,omitempty"`
	// ServiceConfigId: Specifies which version of service configuration should be
	// used to process the request. If unspecified or no matching version can be
	// found, the latest one will be used.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllocateOperation") 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. "AllocateOperation") 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 AllocateQuotaRequest) MarshalJSON() ([]byte, error) {
	type NoMethod AllocateQuotaRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AllocateQuotaResponse: Response message for the AllocateQuota method.
type AllocateQuotaResponse struct {
	// AllocateErrors: Indicates the decision of the allocate.
	AllocateErrors []*QuotaError `json:"allocateErrors,omitempty"`
	// AllocateInfo: WARNING: DO NOT use this field until this warning message is
	// removed.
	AllocateInfo *AllocateInfo `json:"allocateInfo,omitempty"`
	// OperationId: The same operation_id value used in the AllocateQuotaRequest.
	// Used for logging and diagnostics purposes.
	OperationId string `json:"operationId,omitempty"`
	// QuotaMetrics: Quota metrics to indicate the result of allocation. Depending
	// on the request, one or more of the following metrics will be included: 1.
	// Per quota group or per quota metric incremental usage will be specified
	// using the following delta metric :
	// "serviceruntime.googleapis.com/api/consumer/quota_used_count" 2. The quota
	// limit reached condition will be specified using the following boolean metric
	// : "serviceruntime.googleapis.com/quota/exceeded"
	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
	// ServiceConfigId: ID of the actual config used to process the request.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AllocateErrors") 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. "AllocateErrors") 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 AllocateQuotaResponse) MarshalJSON() ([]byte, error) {
	type NoMethod AllocateQuotaResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AttributeValue: The allowed types for [VALUE] in a `[KEY]:[VALUE]`
// attribute.
type AttributeValue struct {
	// BoolValue: A Boolean value represented by `true` or `false`.
	BoolValue bool `json:"boolValue,omitempty"`
	// IntValue: A 64-bit signed integer.
	IntValue int64 `json:"intValue,omitempty,string"`
	// StringValue: A string up to 256 bytes long.
	StringValue *TruncatableString `json:"stringValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoolValue") 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. "BoolValue") 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 AttributeValue) MarshalJSON() ([]byte, error) {
	type NoMethod AttributeValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Attributes: A set of attributes, each in the format `[KEY]:[VALUE]`.
type Attributes struct {
	// AttributeMap: The set of attributes. Each attribute's key can be up to 128
	// bytes long. The value can be a string up to 256 bytes, a signed 64-bit
	// integer, or the Boolean values `true` and `false`. For example:
	// "/instance_id": "my-instance" "/http/user_agent": "" "/http/request_bytes":
	// 300 "example.com/myattribute": true
	AttributeMap map[string]AttributeValue `json:"attributeMap,omitempty"`
	// DroppedAttributesCount: The number of attributes that were discarded.
	// Attributes can be discarded because their keys are too long or because there
	// are too many attributes. If this value is 0 then all attributes are valid.
	DroppedAttributesCount int64 `json:"droppedAttributesCount,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AttributeMap") 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. "AttributeMap") 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 Attributes) MarshalJSON() ([]byte, error) {
	type NoMethod Attributes
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AuditLog: Common audit log format for Google Cloud Platform API operations.
type AuditLog struct {
	// AuthenticationInfo: Authentication information.
	AuthenticationInfo *AuthenticationInfo `json:"authenticationInfo,omitempty"`
	// AuthorizationInfo: Authorization information. If there are multiple
	// resources or permissions involved, then there is one AuthorizationInfo
	// element for each {resource, permission} tuple.
	AuthorizationInfo []*AuthorizationInfo `json:"authorizationInfo,omitempty"`
	// Metadata: Other service-specific data about the request, response, and other
	// information associated with the current audited event.
	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
	// MethodName: The name of the service method or operation. For API calls, this
	// should be the name of the API method. For example,
	// "google.cloud.bigquery.v2.TableService.InsertTable"
	// "google.logging.v2.ConfigServiceV2.CreateSink"
	MethodName string `json:"methodName,omitempty"`
	// NumResponseItems: The number of items returned from a List or Query API
	// method, if applicable.
	NumResponseItems int64 `json:"numResponseItems,omitempty,string"`
	// PolicyViolationInfo: Indicates the policy violations for this request. If
	// the request is denied by the policy, violation information will be logged
	// here.
	PolicyViolationInfo *PolicyViolationInfo `json:"policyViolationInfo,omitempty"`
	// Request: The operation request. This may not include all request parameters,
	// such as those that are too large, privacy-sensitive, or duplicated elsewhere
	// in the log record. It should never include user-generated data, such as file
	// contents. When the JSON object represented here has a proto equivalent, the
	// proto name will be indicated in the `@type` property.
	Request googleapi.RawMessage `json:"request,omitempty"`
	// RequestMetadata: Metadata about the operation.
	RequestMetadata *RequestMetadata `json:"requestMetadata,omitempty"`
	// ResourceLocation: The resource location information.
	ResourceLocation *ResourceLocation `json:"resourceLocation,omitempty"`
	// ResourceName: The resource or collection that is the target of the
	// operation. The name is a scheme-less URI, not including the API service
	// name. For example: "projects/PROJECT_ID/zones/us-central1-a/instances"
	// "projects/PROJECT_ID/datasets/DATASET_ID"
	ResourceName string `json:"resourceName,omitempty"`
	// ResourceOriginalState: The resource's original state before mutation.
	// Present only for operations which have successfully modified the targeted
	// resource(s). In general, this field should contain all changed fields,
	// except those that are already been included in `request`, `response`,
	// `metadata` or `service_data` fields. When the JSON object represented here
	// has a proto equivalent, the proto name will be indicated in the `@type`
	// property.
	ResourceOriginalState googleapi.RawMessage `json:"resourceOriginalState,omitempty"`
	// Response: The operation response. This may not include all response
	// elements, such as those that are too large, privacy-sensitive, or duplicated
	// elsewhere in the log record. It should never include user-generated data,
	// such as file contents. When the JSON object represented here has a proto
	// equivalent, the proto name will be indicated in the `@type` property.
	Response googleapi.RawMessage `json:"response,omitempty"`
	// ServiceData: Deprecated. Use the `metadata` field instead. Other
	// service-specific data about the request, response, and other activities.
	ServiceData googleapi.RawMessage `json:"serviceData,omitempty"`
	// ServiceName: The name of the API service performing the operation. For
	// example, "compute.googleapis.com".
	ServiceName string `json:"serviceName,omitempty"`
	// Status: The status of the overall operation.
	Status *Status `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AuthenticationInfo") 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. "AuthenticationInfo") 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 AuditLog) MarshalJSON() ([]byte, error) {
	type NoMethod AuditLog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Auth: This message defines request authentication attributes. Terminology is
// based on the JSON Web Token (JWT) standard, but the terms also correlate to
// concepts in other standards.
type Auth struct {
	// AccessLevels: A list of access level resource names that allow resources to
	// be accessed by authenticated requester. It is part of Secure GCP processing
	// for the incoming request. An access level string has the format:
	// "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}"
	// Example:
	// "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLeve
	// ls/MY_LEVEL"
	AccessLevels []string `json:"accessLevels,omitempty"`
	// Audiences: The intended audience(s) for this authentication information.
	// Reflects the audience (`aud`) claim within a JWT. The audience value(s)
	// depends on the `issuer`, but typically include one or more of the following
	// pieces of information: * The services intended to receive the credential.
	// For example, ["https://pubsub.googleapis.com/",
	// "https://storage.googleapis.com/"]. * A set of service-based scopes. For
	// example, ["https://www.googleapis.com/auth/cloud-platform"]. * The client id
	// of an app, such as the Firebase project id for JWTs from Firebase Auth.
	// Consult the documentation for the credential issuer to determine the
	// information provided.
	Audiences []string `json:"audiences,omitempty"`
	// Claims: Structured claims presented with the credential. JWTs include `{key:
	// value}` pairs for standard and private claims. The following is a subset of
	// the standard required and optional claims that would typically be presented
	// for a Google-based JWT: {'iss': 'accounts.google.com', 'sub':
	// '113289723416554971153', 'aud': ['123456789012', 'pubsub.googleapis.com'],
	// 'azp': '123456789012.apps.googleusercontent.com', 'email':
	// 'jsmith@example.com', 'iat': 1353601026, 'exp': 1353604926} SAML assertions
	// are similarly specified, but with an identity provider dependent structure.
	Claims googleapi.RawMessage `json:"claims,omitempty"`
	// Oauth: Attributes of the OAuth token associated with the request.
	Oauth *Oauth `json:"oauth,omitempty"`
	// Presenter: The authorized presenter of the credential. Reflects the optional
	// Authorized Presenter (`azp`) claim within a JWT or the OAuth client id. For
	// example, a Google Cloud Platform client id looks as follows:
	// "123456789012.apps.googleusercontent.com".
	Presenter string `json:"presenter,omitempty"`
	// Principal: The authenticated principal. Reflects the issuer (`iss`) and
	// subject (`sub`) claims within a JWT. The issuer and subject should be `/`
	// delimited, with `/` percent-encoded within the subject fragment. For Google
	// accounts, the principal format is: "https://accounts.google.com/{id}"
	Principal string `json:"principal,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AccessLevels") 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. "AccessLevels") 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 Auth) MarshalJSON() ([]byte, error) {
	type NoMethod Auth
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AuthenticationInfo: Authentication information for the operation.
type AuthenticationInfo struct {
	// AuthoritySelector: The authority selector specified by the requestor, if
	// any. It is not guaranteed that the principal was allowed to use this
	// authority.
	AuthoritySelector string `json:"authoritySelector,omitempty"`
	// LoggableShortLivedCredential: Converted from
	// "identity_cloudgaia.AuditLoggableShortLivedCredential" proto. This message
	// will be used by security, detection and response team. For context please
	// refer to go/cg:short-lived-credential-logging. When the JSON object
	// represented here has a proto equivalent, the proto name will be indicated in
	// the `@type` property.
	LoggableShortLivedCredential googleapi.RawMessage `json:"loggableShortLivedCredential,omitempty"`
	// OauthInfo: OAuth authentication information such as the OAuth client ID.
	OauthInfo *OAuthInfo `json:"oauthInfo,omitempty"`
	// PrincipalEmail: The email address of the authenticated user (or service
	// account on behalf of third party principal) making the request. For third
	// party identity callers, the `principal_subject` field is populated instead
	// of this field. For privacy reasons, the principal email address is sometimes
	// redacted. For more information, see Caller identities in audit logs
	// (https://cloud.google.com/logging/docs/audit#user-id).
	PrincipalEmail string `json:"principalEmail,omitempty"`
	// PrincipalSubject: String representation of identity of requesting party.
	// Populated for both first and third party identities.
	PrincipalSubject string `json:"principalSubject,omitempty"`
	// ServiceAccountDelegationInfo: Identity delegation history of an
	// authenticated service account that makes the request. It contains
	// information on the real authorities that try to access GCP resources by
	// delegating on a service account. When multiple authorities present, they are
	// guaranteed to be sorted based on the original ordering of the identity
	// delegation events.
	ServiceAccountDelegationInfo []*ServiceAccountDelegationInfo `json:"serviceAccountDelegationInfo,omitempty"`
	// ServiceAccountKeyName: The name of the service account key used to create or
	// exchange credentials for authenticating the service account making the
	// request. This is a scheme-less URI full resource name. For example:
	// "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{k
	// ey}"
	ServiceAccountKeyName string `json:"serviceAccountKeyName,omitempty"`
	// ServiceDelegationHistory: Records the history of delegated resource access
	// across Google services.
	ServiceDelegationHistory *ServiceDelegationHistory `json:"serviceDelegationHistory,omitempty"`
	// ThirdPartyPrincipal: The third party identification (if any) of the
	// authenticated user making the request. When the JSON object represented here
	// has a proto equivalent, the proto name will be indicated in the `@type`
	// property.
	ThirdPartyPrincipal googleapi.RawMessage `json:"thirdPartyPrincipal,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AuthoritySelector") 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. "AuthoritySelector") 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 AuthenticationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod AuthenticationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AuthorizationInfo: Authorization information for the operation.
type AuthorizationInfo struct {
	// Granted: Whether or not authorization for `resource` and `permission` was
	// granted.
	Granted bool `json:"granted,omitempty"`
	// Permission: The required IAM permission.
	Permission string `json:"permission,omitempty"`
	// PermissionType: The type of the permission that was checked. For data access
	// audit logs this corresponds with the permission type that must be enabled in
	// the project/folder/organization IAM policy in order for the log to be
	// written.
	//
	// Possible values:
	//   "PERMISSION_TYPE_UNSPECIFIED" - Default. Should not be used.
	//   "ADMIN_READ" - Permissions that gate reading resource configuration or
	// metadata.
	//   "ADMIN_WRITE" - Permissions that gate modification of resource
	// configuration or metadata.
	//   "DATA_READ" - Permissions that gate reading user-provided data.
	//   "DATA_WRITE" - Permissions that gate writing user-provided data.
	PermissionType string `json:"permissionType,omitempty"`
	// Resource: The resource being accessed, as a REST-style or cloud resource
	// string. For example:
	// bigquery.googleapis.com/projects/PROJECTID/datasets/DATASETID or
	// projects/PROJECTID/datasets/DATASETID
	Resource string `json:"resource,omitempty"`
	// ResourceAttributes: Resource attributes used in IAM condition evaluation.
	// This field contains resource attributes like resource type and resource
	// name. To get the whole view of the attributes used in IAM condition
	// evaluation, the user must also look into
	// `AuditLog.request_metadata.request_attributes`.
	ResourceAttributes *Resource `json:"resourceAttributes,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Granted") 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. "Granted") 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 AuthorizationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod AuthorizationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CheckError: Defines the errors to be returned in
// google.api.servicecontrol.v1.CheckResponse.check_errors.
type CheckError struct {
	// Code: The error code.
	//
	// Possible values:
	//   "ERROR_CODE_UNSPECIFIED" - This is the default value if error code is not
	// explicitly set. It should not be used directly.
	//   "NOT_FOUND" - The consumer's project id, network container, or resource
	// container was not found. Same as google.rpc.Code.NOT_FOUND.
	//   "PERMISSION_DENIED" - The consumer doesn't have access to the specified
	// resource. Same as google.rpc.Code.PERMISSION_DENIED.
	//   "RESOURCE_EXHAUSTED" - Quota check failed. Same as
	// google.rpc.Code.RESOURCE_EXHAUSTED.
	//   "BUDGET_EXCEEDED" - Budget check failed.
	//   "DENIAL_OF_SERVICE_DETECTED" - The consumer's request has been flagged as
	// a DoS attack.
	//   "LOAD_SHEDDING" - The consumer's request should be rejected in order to
	// protect the service from being overloaded.
	//   "ABUSER_DETECTED" - The consumer has been flagged as an abuser.
	//   "SERVICE_NOT_ACTIVATED" - The consumer hasn't activated the service.
	//   "VISIBILITY_DENIED" - The consumer cannot access the service due to
	// visibility configuration.
	//   "BILLING_DISABLED" - The consumer cannot access the service because
	// billing is disabled.
	//   "PROJECT_DELETED" - The consumer's project has been marked as deleted
	// (soft deletion).
	//   "PROJECT_INVALID" - The consumer's project number or id does not represent
	// a valid project.
	//   "CONSUMER_INVALID" - The input consumer info does not represent a valid
	// consumer folder or organization.
	//   "IP_ADDRESS_BLOCKED" - The IP address of the consumer is invalid for the
	// specific consumer project.
	//   "REFERER_BLOCKED" - The referer address of the consumer request is invalid
	// for the specific consumer project.
	//   "CLIENT_APP_BLOCKED" - The client application of the consumer request is
	// invalid for the specific consumer project.
	//   "API_TARGET_BLOCKED" - The API targeted by this request is invalid for the
	// specified consumer project.
	//   "API_KEY_INVALID" - The consumer's API key is invalid.
	//   "API_KEY_EXPIRED" - The consumer's API Key has expired.
	//   "API_KEY_NOT_FOUND" - The consumer's API Key was not found in config
	// record.
	//   "SPATULA_HEADER_INVALID" - The consumer's spatula header is invalid.
	//   "LOAS_ROLE_INVALID" - The consumer's LOAS role is invalid.
	//   "NO_LOAS_PROJECT" - The consumer's LOAS role has no associated project.
	//   "LOAS_PROJECT_DISABLED" - The consumer's LOAS project is not `ACTIVE` in
	// LoquatV2.
	//   "SECURITY_POLICY_VIOLATED" - Request is not allowed as per security
	// policies defined in Org Policy.
	//   "INVALID_CREDENTIAL" - The credential in the request can not be verified.
	//   "LOCATION_POLICY_VIOLATED" - Request is not allowed as per location
	// policies defined in Org Policy.
	//   "NAMESPACE_LOOKUP_UNAVAILABLE" - The backend server for looking up project
	// id/number is unavailable.
	//   "SERVICE_STATUS_UNAVAILABLE" - The backend server for checking service
	// status is unavailable.
	//   "BILLING_STATUS_UNAVAILABLE" - The backend server for checking billing
	// status is unavailable.
	//   "QUOTA_CHECK_UNAVAILABLE" - The backend server for checking quota limits
	// is unavailable.
	//   "LOAS_PROJECT_LOOKUP_UNAVAILABLE" - The Spanner for looking up LOAS
	// project is unavailable.
	//   "CLOUD_RESOURCE_MANAGER_BACKEND_UNAVAILABLE" - Cloud Resource Manager
	// backend server is unavailable.
	//   "SECURITY_POLICY_BACKEND_UNAVAILABLE" - NOTE: for customers in the scope
	// of Beta/GA of https://cloud.google.com/vpc-service-controls, this error is
	// no longer returned. If the security backend is unavailable: For Fail open
	// requests, error is ignored and request is allowed. For Fail close requests,
	// rpc UNAVAILABLE status will be returned instead. It should be ignored and
	// should not be used to reject client requests.
	//   "LOCATION_POLICY_BACKEND_UNAVAILABLE" - Backend server for evaluating
	// location policy is unavailable.
	//   "INJECTED_ERROR" - Part of the project of fault injection:
	// go/chemist-slo-validation. To distinguish between artificially injected
	// errors and organic ones, this value will be exported for the
	// per_service_check_error_count streamz.
	// http://google3/apiserving/servicecontrol/server/controller_service.cc;l=196
	// Rpcinjectz2 works by injecting errors early in the rpc life cycle, before
	// any of the chemist business logic runs.
	Code string `json:"code,omitempty"`
	// Detail: Free-form text providing details on the error cause of the error.
	Detail string `json:"detail,omitempty"`
	// Status: Contains public information about the check error. If available,
	// `status.code` will be non zero and client can propagate it out as public
	// error.
	Status *Status `json:"status,omitempty"`
	// Subject: Subject to whom this error applies. See the specific code enum for
	// more details on this field. For example: - "project:" - "folder:" -
	// "organization:"
	Subject string `json:"subject,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") 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. "Code") 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 CheckError) MarshalJSON() ([]byte, error) {
	type NoMethod CheckError
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CheckInfo: Contains additional information about the check operation.
type CheckInfo struct {
	// ApiKeyUid: The unique id of the api key in the format of "apikey:". This
	// field will be populated when the consumer passed to Chemist is an API key
	// and all the API key related validations are successful.
	ApiKeyUid string `json:"apiKeyUid,omitempty"`
	// ConsumerInfo: Consumer info of this check.
	ConsumerInfo *ConsumerInfo `json:"consumerInfo,omitempty"`
	// IgnoreApiKeyUidAsCredentialId: Whether or not the api key should be ignored
	// in the credential_id during reporting.
	IgnoreApiKeyUidAsCredentialId bool `json:"ignoreApiKeyUidAsCredentialId,omitempty"`
	// UnusedArguments: A list of fields and label keys that are ignored by the
	// server. The client doesn't need to send them for following requests to
	// improve performance and allow better aggregation.
	UnusedArguments []string `json:"unusedArguments,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ApiKeyUid") 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. "ApiKeyUid") 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 CheckInfo) MarshalJSON() ([]byte, error) {
	type NoMethod CheckInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CheckRequest: Request message for the Check method.
type CheckRequest struct {
	// Operation: The operation to be checked.
	Operation *Operation `json:"operation,omitempty"`
	// RequestProjectSettings: Requests the project settings to be returned as part
	// of the check response.
	RequestProjectSettings bool `json:"requestProjectSettings,omitempty"`
	// ServiceConfigId: Specifies which version of service configuration should be
	// used to process the request. If unspecified or no matching version can be
	// found, the latest one will be used.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`
	// SkipActivationCheck: Indicates if service activation check should be skipped
	// for this request. Default behavior is to perform the check and apply
	// relevant quota. WARNING: Setting this flag to "true" will disable quota
	// enforcement.
	SkipActivationCheck bool `json:"skipActivationCheck,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Operation") 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. "Operation") 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 CheckRequest) MarshalJSON() ([]byte, error) {
	type NoMethod CheckRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CheckResponse: Response message for the Check method.
type CheckResponse struct {
	// CheckErrors: Indicate the decision of the check. If no check errors are
	// present, the service should process the operation. Otherwise the service
	// should use the list of errors to determine the appropriate action.
	CheckErrors []*CheckError `json:"checkErrors,omitempty"`
	// CheckInfo: Feedback data returned from the server during processing a Check
	// request.
	CheckInfo *CheckInfo `json:"checkInfo,omitempty"`
	// OperationId: The same operation_id value used in the CheckRequest. Used for
	// logging and diagnostics purposes.
	OperationId string `json:"operationId,omitempty"`
	// QuotaInfo: Quota information for the check request associated with this
	// response.
	QuotaInfo *QuotaInfo `json:"quotaInfo,omitempty"`
	// ServiceConfigId: The actual config id used to process the request.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`
	// ServiceRolloutId: The current service rollout id used to process the
	// request.
	ServiceRolloutId string `json:"serviceRolloutId,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "CheckErrors") 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. "CheckErrors") 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 CheckResponse) MarshalJSON() ([]byte, error) {
	type NoMethod CheckResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ConsumerInfo: `ConsumerInfo` provides information about the consumer.
type ConsumerInfo struct {
	// ConsumerNumber: The consumer identity number, can be Google cloud project
	// number, folder number or organization number e.g. 1234567890. A value of 0
	// indicates no consumer number is found.
	ConsumerNumber int64 `json:"consumerNumber,omitempty,string"`
	// ProjectNumber: The Google cloud project number, e.g. 1234567890. A value of
	// 0 indicates no project number is found. NOTE: This field is deprecated after
	// Chemist support flexible consumer id. New code should not depend on this
	// field anymore.
	ProjectNumber int64 `json:"projectNumber,omitempty,string"`
	// Type: The type of the consumer which should have been defined in Google
	// Resource Manager (https://cloud.google.com/resource-manager/).
	//
	// Possible values:
	//   "CONSUMER_TYPE_UNSPECIFIED" - This is never used.
	//   "PROJECT" - The consumer is a Google Cloud Project.
	//   "FOLDER" - The consumer is a Google Cloud Folder.
	//   "ORGANIZATION" - The consumer is a Google Cloud Organization.
	//   "SERVICE_SPECIFIC" - Service-specific resource container which is defined
	// by the service producer to offer their users the ability to manage service
	// control functionalities at a finer level of granularity than the PROJECT.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConsumerNumber") 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. "ConsumerNumber") 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 ConsumerInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ConsumerInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Distribution: Distribution represents a frequency distribution of
// double-valued sample points. It contains the size of the population of
// sample points plus additional optional information: * the arithmetic mean of
// the samples * the minimum and maximum of the samples * the
// sum-squared-deviation of the samples, used to compute variance * a histogram
// of the values of the sample points
type Distribution struct {
	// BucketCounts: The number of samples in each histogram bucket.
	// `bucket_counts` are optional. If present, they must sum to the `count`
	// value. The buckets are defined below in `bucket_option`. There are N
	// buckets. `bucket_counts[0]` is the number of samples in the underflow
	// bucket. `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of
	// samples in each of the finite buckets. And `bucket_counts[N]` is the number
	// of samples in the overflow bucket. See the comments of `bucket_option` below
	// for more details. Any suffix of trailing zeros may be omitted.
	BucketCounts googleapi.Int64s `json:"bucketCounts,omitempty"`
	// Count: The total number of samples in the distribution. Must be >= 0.
	Count int64 `json:"count,omitempty,string"`
	// Exemplars: Example points. Must be in increasing order of `value` field.
	Exemplars []*Exemplar `json:"exemplars,omitempty"`
	// ExplicitBuckets: Buckets with arbitrary user-provided width.
	ExplicitBuckets *ExplicitBuckets `json:"explicitBuckets,omitempty"`
	// ExponentialBuckets: Buckets with exponentially growing width.
	ExponentialBuckets *ExponentialBuckets `json:"exponentialBuckets,omitempty"`
	// LinearBuckets: Buckets with constant width.
	LinearBuckets *LinearBuckets `json:"linearBuckets,omitempty"`
	// Maximum: The maximum of the population of values. Ignored if `count` is
	// zero.
	Maximum float64 `json:"maximum,omitempty"`
	// Mean: The arithmetic mean of the samples in the distribution. If `count` is
	// zero then this field must be zero.
	Mean float64 `json:"mean,omitempty"`
	// Minimum: The minimum of the population of values. Ignored if `count` is
	// zero.
	Minimum float64 `json:"minimum,omitempty"`
	// SumOfSquaredDeviation: The sum of squared deviations from the mean:
	// Sumi=1..count ((x_i - mean)^2) where each x_i is a sample values. If `count`
	// is zero then this field must be zero, otherwise validation of the request
	// fails.
	SumOfSquaredDeviation float64 `json:"sumOfSquaredDeviation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BucketCounts") 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. "BucketCounts") 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 Distribution) MarshalJSON() ([]byte, error) {
	type NoMethod Distribution
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Distribution) UnmarshalJSON(data []byte) error {
	type NoMethod Distribution
	var s1 struct {
		Maximum               gensupport.JSONFloat64 `json:"maximum"`
		Mean                  gensupport.JSONFloat64 `json:"mean"`
		Minimum               gensupport.JSONFloat64 `json:"minimum"`
		SumOfSquaredDeviation gensupport.JSONFloat64 `json:"sumOfSquaredDeviation"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Maximum = float64(s1.Maximum)
	s.Mean = float64(s1.Mean)
	s.Minimum = float64(s1.Minimum)
	s.SumOfSquaredDeviation = float64(s1.SumOfSquaredDeviation)
	return nil
}

// Exemplar: Exemplars are example points that may be used to annotate
// aggregated distribution values. They are metadata that gives information
// about a particular value added to a Distribution bucket, such as a trace ID
// that was active when a value was added. They may contain further
// information, such as a example values and timestamps, origin, etc.
type Exemplar struct {
	// Attachments: Contextual information about the example value. Examples are:
	// Trace: type.googleapis.com/google.monitoring.v3.SpanContext Literal string:
	// type.googleapis.com/google.protobuf.StringValue Labels dropped during
	// aggregation: type.googleapis.com/google.monitoring.v3.DroppedLabels There
	// may be only a single attachment of any given message type in a single
	// exemplar, and this is enforced by the system.
	Attachments []googleapi.RawMessage `json:"attachments,omitempty"`
	// Timestamp: The observation (sampling) time of the above value.
	Timestamp string `json:"timestamp,omitempty"`
	// Value: Value of the exemplar point. This value determines to which bucket
	// the exemplar belongs.
	Value float64 `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attachments") 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. "Attachments") 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 Exemplar) MarshalJSON() ([]byte, error) {
	type NoMethod Exemplar
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

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

// ExplicitBuckets: Describing buckets with arbitrary user-provided width.
type ExplicitBuckets struct {
	// Bounds: 'bound' is a list of strictly increasing boundaries between buckets.
	// Note that a list of length N-1 defines N buckets because of fenceposting.
	// See comments on `bucket_options` for details. The i'th finite bucket covers
	// the interval [bound[i-1], bound[i]) where i ranges from 1 to bound_size() -
	// 1. Note that there are no finite buckets at all if 'bound' only contains a
	// single element; in that special case the single bound defines the boundary
	// between the underflow and overflow buckets. bucket number lower bound upper
	// bound i == 0 (underflow) -inf bound[i] 0 < i < bound_size() bound[i-1]
	// bound[i] i == bound_size() (overflow) bound[i-1] +inf
	Bounds []float64 `json:"bounds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Bounds") 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. "Bounds") 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 ExplicitBuckets) MarshalJSON() ([]byte, error) {
	type NoMethod ExplicitBuckets
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *ExplicitBuckets) UnmarshalJSON(data []byte) error {
	type NoMethod ExplicitBuckets
	var s1 struct {
		Bounds []gensupport.JSONFloat64 `json:"bounds"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Bounds = make([]float64, len(s1.Bounds))
	for i := range s1.Bounds {
		s.Bounds[i] = float64(s1.Bounds[i])
	}
	return nil
}

// ExponentialBuckets: Describing buckets with exponentially growing width.
type ExponentialBuckets struct {
	// GrowthFactor: The i'th exponential bucket covers the interval [scale *
	// growth_factor^(i-1), scale * growth_factor^i) where i ranges from 1 to
	// num_finite_buckets inclusive. Must be larger than 1.0.
	GrowthFactor float64 `json:"growthFactor,omitempty"`
	// NumFiniteBuckets: The number of finite buckets. With the underflow and
	// overflow buckets, the total number of buckets is `num_finite_buckets` + 2.
	// See comments on `bucket_options` for details.
	NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"`
	// Scale: The i'th exponential bucket covers the interval [scale *
	// growth_factor^(i-1), scale * growth_factor^i) where i ranges from 1 to
	// num_finite_buckets inclusive. Must be > 0.
	Scale float64 `json:"scale,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GrowthFactor") 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. "GrowthFactor") 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 ExponentialBuckets) MarshalJSON() ([]byte, error) {
	type NoMethod ExponentialBuckets
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

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

// FirstPartyPrincipal: First party identity principal.
type FirstPartyPrincipal struct {
	// PrincipalEmail: The email address of a Google account. .
	PrincipalEmail string `json:"principalEmail,omitempty"`
	// ServiceMetadata: Metadata about the service that uses the service account. .
	ServiceMetadata googleapi.RawMessage `json:"serviceMetadata,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PrincipalEmail") 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. "PrincipalEmail") 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 FirstPartyPrincipal) MarshalJSON() ([]byte, error) {
	type NoMethod FirstPartyPrincipal
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// HttpRequest: A common proto for logging HTTP requests. Only contains
// semantics defined by the HTTP specification. Product-specific logging
// information MUST be defined in a separate message.
type HttpRequest struct {
	// CacheFillBytes: The number of HTTP response bytes inserted into cache. Set
	// only when a cache fill was attempted.
	CacheFillBytes int64 `json:"cacheFillBytes,omitempty,string"`
	// CacheHit: Whether or not an entity was served from cache (with or without
	// validation).
	CacheHit bool `json:"cacheHit,omitempty"`
	// CacheLookup: Whether or not a cache lookup was attempted.
	CacheLookup bool `json:"cacheLookup,omitempty"`
	// CacheValidatedWithOriginServer: Whether or not the response was validated
	// with the origin server before being served from cache. This field is only
	// meaningful if `cache_hit` is True.
	CacheValidatedWithOriginServer bool `json:"cacheValidatedWithOriginServer,omitempty"`
	// Latency: The request processing latency on the server, from the time the
	// request was received until the response was sent.
	Latency string `json:"latency,omitempty"`
	// Protocol: Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2",
	// "websocket"
	Protocol string `json:"protocol,omitempty"`
	// Referer: The referer URL of the request, as defined in HTTP/1.1 Header Field
	// Definitions (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
	Referer string `json:"referer,omitempty"`
	// RemoteIp: The IP address (IPv4 or IPv6) of the client that issued the HTTP
	// request. Examples: "192.168.1.1", "FE80::0202:B3FF:FE1E:8329".
	RemoteIp string `json:"remoteIp,omitempty"`
	// RequestMethod: The request method. Examples: "GET", "HEAD", "PUT",
	// "POST".
	RequestMethod string `json:"requestMethod,omitempty"`
	// RequestSize: The size of the HTTP request message in bytes, including the
	// request headers and the request body.
	RequestSize int64 `json:"requestSize,omitempty,string"`
	// RequestUrl: The scheme (http, https), the host name, the path, and the query
	// portion of the URL that was requested. Example:
	// "http://example.com/some/info?color=red".
	RequestUrl string `json:"requestUrl,omitempty"`
	// ResponseSize: The size of the HTTP response message sent back to the client,
	// in bytes, including the response headers and the response body.
	ResponseSize int64 `json:"responseSize,omitempty,string"`
	// ServerIp: The IP address (IPv4 or IPv6) of the origin server that the
	// request was sent to.
	ServerIp string `json:"serverIp,omitempty"`
	// Status: The response code indicating the status of the response. Examples:
	// 200, 404.
	Status int64 `json:"status,omitempty"`
	// UserAgent: The user agent sent by the client. Example: "Mozilla/4.0
	// (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)".
	UserAgent string `json:"userAgent,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CacheFillBytes") 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. "CacheFillBytes") 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 HttpRequest) MarshalJSON() ([]byte, error) {
	type NoMethod HttpRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LinearBuckets: Describing buckets with constant width.
type LinearBuckets struct {
	// NumFiniteBuckets: The number of finite buckets. With the underflow and
	// overflow buckets, the total number of buckets is `num_finite_buckets` + 2.
	// See comments on `bucket_options` for details.
	NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"`
	// Offset: The i'th linear bucket covers the interval [offset + (i-1) * width,
	// offset + i * width) where i ranges from 1 to num_finite_buckets, inclusive.
	Offset float64 `json:"offset,omitempty"`
	// Width: The i'th linear bucket covers the interval [offset + (i-1) * width,
	// offset + i * width) where i ranges from 1 to num_finite_buckets, inclusive.
	// Must be strictly positive.
	Width float64 `json:"width,omitempty"`
	// ForceSendFields is a list of field names (e.g. "NumFiniteBuckets") 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. "NumFiniteBuckets") 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 LinearBuckets) MarshalJSON() ([]byte, error) {
	type NoMethod LinearBuckets
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

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

// LogEntry: An individual log entry.
type LogEntry struct {
	// HttpRequest: Optional. Information about the HTTP request associated with
	// this log entry, if applicable.
	HttpRequest *HttpRequest `json:"httpRequest,omitempty"`
	// InsertId: A unique ID for the log entry used for deduplication. If omitted,
	// the implementation will generate one based on operation_id.
	InsertId string `json:"insertId,omitempty"`
	// Labels: A set of user-defined (key, value) data that provides additional
	// information about the log entry.
	Labels map[string]string `json:"labels,omitempty"`
	// Name: Required. The log to which this log entry belongs. Examples:
	// "syslog", "book_log".
	Name string `json:"name,omitempty"`
	// Operation: Optional. Information about an operation associated with the log
	// entry, if applicable.
	Operation *LogEntryOperation `json:"operation,omitempty"`
	// ProtoPayload: The log entry payload, represented as a protocol buffer that
	// is expressed as a JSON object. The only accepted type currently is AuditLog.
	ProtoPayload googleapi.RawMessage `json:"protoPayload,omitempty"`
	// Severity: The severity of the log entry. The default value is
	// `LogSeverity.DEFAULT`.
	//
	// Possible values:
	//   "DEFAULT" - (0) The log entry has no assigned severity level.
	//   "DEBUG" - (100) Debug or trace information.
	//   "INFO" - (200) Routine information, such as ongoing status or performance.
	//   "NOTICE" - (300) Normal but significant events, such as start up, shut
	// down, or a configuration change.
	//   "WARNING" - (400) Warning events might cause problems.
	//   "ERROR" - (500) Error events are likely to cause problems.
	//   "CRITICAL" - (600) Critical events cause more severe problems or outages.
	//   "ALERT" - (700) A person must take an action immediately.
	//   "EMERGENCY" - (800) One or more systems are unusable.
	Severity string `json:"severity,omitempty"`
	// SourceLocation: Optional. Source code location information associated with
	// the log entry, if any.
	SourceLocation *LogEntrySourceLocation `json:"sourceLocation,omitempty"`
	// StructPayload: The log entry payload, represented as a structure that is
	// expressed as a JSON object.
	StructPayload googleapi.RawMessage `json:"structPayload,omitempty"`
	// TextPayload: The log entry payload, represented as a Unicode string (UTF-8).
	TextPayload string `json:"textPayload,omitempty"`
	// Timestamp: The time the event described by the log entry occurred. If
	// omitted, defaults to operation start time.
	Timestamp string `json:"timestamp,omitempty"`
	// Trace: Optional. Resource name of the trace associated with the log entry,
	// if any. If this field contains a relative resource name, you can assume the
	// name is relative to `//tracing.googleapis.com`. Example:
	// `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824`
	Trace string `json:"trace,omitempty"`
	// ForceSendFields is a list of field names (e.g. "HttpRequest") 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. "HttpRequest") 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 LogEntry) MarshalJSON() ([]byte, error) {
	type NoMethod LogEntry
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LogEntryOperation: Additional information about a potentially long-running
// operation with which a log entry is associated.
type LogEntryOperation struct {
	// First: Optional. Set this to True if this is the first log entry in the
	// operation.
	First bool `json:"first,omitempty"`
	// Id: Optional. An arbitrary operation identifier. Log entries with the same
	// identifier are assumed to be part of the same operation.
	Id string `json:"id,omitempty"`
	// Last: Optional. Set this to True if this is the last log entry in the
	// operation.
	Last bool `json:"last,omitempty"`
	// Producer: Optional. An arbitrary producer identifier. The combination of
	// `id` and `producer` must be globally unique. Examples for `producer`:
	// "MyDivision.MyBigCompany.com", "github.com/MyProject/MyApplication".
	Producer string `json:"producer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "First") 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. "First") 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 LogEntryOperation) MarshalJSON() ([]byte, error) {
	type NoMethod LogEntryOperation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LogEntrySourceLocation: Additional information about the source code
// location that produced the log entry.
type LogEntrySourceLocation struct {
	// File: Optional. Source file name. Depending on the runtime environment, this
	// might be a simple name or a fully-qualified name.
	File string `json:"file,omitempty"`
	// Function: Optional. Human-readable name of the function or method being
	// invoked, with optional context such as the class or package name. This
	// information may be used in contexts such as the logs viewer, where a file
	// and line number are less meaningful. The format can vary by language. For
	// example: `qual.if.ied.Class.method` (Java), `dir/package.func` (Go),
	// `function` (Python).
	Function string `json:"function,omitempty"`
	// Line: Optional. Line within the source file. 1-based; 0 indicates no line
	// number available.
	Line int64 `json:"line,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "File") 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. "File") 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 LogEntrySourceLocation) MarshalJSON() ([]byte, error) {
	type NoMethod LogEntrySourceLocation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricValue: Represents a single metric value.
type MetricValue struct {
	// BoolValue: A boolean value.
	BoolValue *bool `json:"boolValue,omitempty"`
	// DistributionValue: A distribution value.
	DistributionValue *Distribution `json:"distributionValue,omitempty"`
	// DoubleValue: A double precision floating point value.
	DoubleValue *float64 `json:"doubleValue,omitempty"`
	// EndTime: The end of the time period over which this metric value's
	// measurement applies. If not specified,
	// google.api.servicecontrol.v1.Operation.end_time will be used.
	EndTime string `json:"endTime,omitempty"`
	// Int64Value: A signed 64-bit integer value.
	Int64Value *int64 `json:"int64Value,omitempty,string"`
	// Labels: The labels describing the metric value. See comments on
	// google.api.servicecontrol.v1.Operation.labels for the overriding
	// relationship. Note that this map must not contain monitored resource labels.
	Labels map[string]string `json:"labels,omitempty"`
	// MoneyValue: A money value.
	MoneyValue *Money `json:"moneyValue,omitempty"`
	// StartTime: The start of the time period over which this metric value's
	// measurement applies. The time period has different semantics for different
	// metric types (cumulative, delta, and gauge). See the metric definition
	// documentation in the service configuration for details. If not specified,
	// google.api.servicecontrol.v1.Operation.start_time will be used.
	StartTime string `json:"startTime,omitempty"`
	// StringValue: A text string value.
	StringValue *string `json:"stringValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoolValue") 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. "BoolValue") 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 MetricValue) MarshalJSON() ([]byte, error) {
	type NoMethod MetricValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

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

// MetricValueSet: Represents a set of metric values in the same metric. Each
// metric value in the set should have a unique combination of start time, end
// time, and label values.
type MetricValueSet struct {
	// MetricName: The metric name defined in the service configuration.
	MetricName string `json:"metricName,omitempty"`
	// MetricValues: The values in this metric.
	MetricValues []*MetricValue `json:"metricValues,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MetricName") 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. "MetricName") 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 MetricValueSet) MarshalJSON() ([]byte, error) {
	type NoMethod MetricValueSet
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Money: Represents an amount of money with its currency type.
type Money struct {
	// CurrencyCode: The three-letter currency code defined in ISO 4217.
	CurrencyCode string `json:"currencyCode,omitempty"`
	// Nanos: Number of nano (10^-9) units of the amount. The value must be between
	// -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos`
	// must be positive or zero. If `units` is zero, `nanos` can be positive, zero,
	// or negative. If `units` is negative, `nanos` must be negative or zero. For
	// example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
	Nanos int64 `json:"nanos,omitempty"`
	// Units: The whole units of the amount. For example if `currencyCode` is
	// "USD", then 1 unit is one US dollar.
	Units int64 `json:"units,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "CurrencyCode") 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. "CurrencyCode") 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 Money) MarshalJSON() ([]byte, error) {
	type NoMethod Money
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// OAuthInfo: OAuth related information about the request.
type OAuthInfo struct {
	// OauthClientId: The OAuth client ID of the 1P or 3P application acting on
	// behalf of the user.
	OauthClientId string `json:"oauthClientId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OauthClientId") 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. "OauthClientId") 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 OAuthInfo) MarshalJSON() ([]byte, error) {
	type NoMethod OAuthInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Oauth: This message defines attributes associated with OAuth credentials.
type Oauth struct {
	// ClientId: The optional OAuth client ID. This is the unique public identifier
	// issued by an authorization server to a registered client application. Empty
	// string is equivalent to no oauth client id. WARNING: This is for MCP
	// tools/call and tools/list authorization and not for general use.
	ClientId string `json:"clientId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientId") 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. "ClientId") 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 Oauth) MarshalJSON() ([]byte, error) {
	type NoMethod Oauth
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Operation: Represents information regarding an operation.
type Operation struct {
	// ConsumerId: Identity of the consumer who is using the service. This field
	// should be filled in for the operations initiated by a consumer, but not for
	// service-initiated operations that are not related to a specific consumer. -
	// This can be in one of the following formats: - project:PROJECT_ID, -
	// project`_`number:PROJECT_NUMBER, - projects/PROJECT_ID or PROJECT_NUMBER, -
	// folders/FOLDER_NUMBER, - organizations/ORGANIZATION_NUMBER, -
	// api`_`key:API_KEY.
	ConsumerId string `json:"consumerId,omitempty"`
	// EndTime: End time of the operation. Required when the operation is used in
	// ServiceController.Report, but optional when the operation is used in
	// ServiceController.Check.
	EndTime string `json:"endTime,omitempty"`
	// Importance: DO NOT USE. This is an experimental field.
	//
	// Possible values:
	//   "LOW" - Allows data caching, batching, and aggregation. It provides higher
	// performance with higher data loss risk.
	//   "HIGH" - Disables data aggregation to minimize data loss. It is for
	// operations that contains significant monetary value or audit trail. This
	// feature only applies to the client libraries.
	//   "DEBUG" - Deprecated. Do not use. Disables data aggregation and enables
	// additional validation logic. It should only be used during the onboarding
	// process. It is only available to Google internal services, and the service
	// must be approved by chemist-dev@google.com in order to use this level.
	//   "PROMOTED" - Used internally by Chemist.
	Importance string `json:"importance,omitempty"`
	// Labels: Labels describing the operation. Only the following labels are
	// allowed: - Labels describing monitored resources as defined in the service
	// configuration. - Default labels of metric values. When specified, labels
	// defined in the metric value override these default. - The following labels
	// defined by Google Cloud Platform: - `cloud.googleapis.com/location`
	// describing the location where the operation happened, -
	// `servicecontrol.googleapis.com/user_agent` describing the user agent of the
	// API request, - `servicecontrol.googleapis.com/service_agent` describing the
	// service used to handle the API request (e.g. ESP), -
	// `servicecontrol.googleapis.com/platform` describing the platform where the
	// API is served, such as App Engine, Compute Engine, or Kubernetes Engine.
	Labels map[string]string `json:"labels,omitempty"`
	// LogEntries: Represents information to be logged.
	LogEntries []*LogEntry `json:"logEntries,omitempty"`
	// MetricValueSets: Represents information about this operation. Each
	// MetricValueSet corresponds to a metric defined in the service configuration.
	// The data type used in the MetricValueSet must agree with the data type
	// specified in the metric definition. Within a single operation, it is not
	// allowed to have more than one MetricValue instances that have the same
	// metric names and identical label value combinations. If a request has such
	// duplicated MetricValue instances, the entire request is rejected with an
	// invalid argument error.
	MetricValueSets []*MetricValueSet `json:"metricValueSets,omitempty"`
	// OperationId: Identity of the operation. This must be unique within the scope
	// of the service that generated the operation. If the service calls Check()
	// and Report() on the same operation, the two calls should carry the same id.
	// UUID version 4 is recommended, though not required. In scenarios where an
	// operation is computed from existing information and an idempotent id is
	// desirable for deduplication purpose, UUID version 5 is recommended. See RFC
	// 4122 for details.
	OperationId string `json:"operationId,omitempty"`
	// OperationName: Fully qualified name of the operation. Reserved for future
	// use.
	OperationName string `json:"operationName,omitempty"`
	// QuotaProperties: Represents the properties needed for quota check.
	// Applicable only if this operation is for a quota check request. If this is
	// not specified, no quota check will be performed.
	QuotaProperties *QuotaProperties `json:"quotaProperties,omitempty"`
	// Resources: The resources that are involved in the operation. The maximum
	// supported number of entries in this field is 100.
	Resources []*ResourceInfo `json:"resources,omitempty"`
	// StartTime: Required. Start time of the operation.
	StartTime string `json:"startTime,omitempty"`
	// TraceSpans: Unimplemented. A list of Cloud Trace spans. The span names shall
	// contain the id of the destination project which can be either the produce or
	// the consumer project.
	TraceSpans []*TraceSpan `json:"traceSpans,omitempty"`
	// UserLabels: Private Preview. This feature is only available for approved
	// services. User defined labels for the resource that this operation is
	// associated with.
	UserLabels map[string]string `json:"userLabels,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConsumerId") 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. "ConsumerId") 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 Operation) MarshalJSON() ([]byte, error) {
	type NoMethod Operation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// OrgPolicyViolationInfo: Represents OrgPolicy Violation information.
type OrgPolicyViolationInfo struct {
	// Payload: Optional. Deprecated. Resource payload that is currently in scope
	// and is subjected to orgpolicy conditions. This payload may be the subset of
	// the actual Resource that may come in the request.
	Payload googleapi.RawMessage `json:"payload,omitempty"`
	// ResourceTags: Optional. Deprecated. Tags referenced on the resource at the
	// time of evaluation.
	ResourceTags map[string]string `json:"resourceTags,omitempty"`
	// ResourceType: Optional. Resource type that the orgpolicy is checked against.
	// Example: compute.googleapis.com/Instance, store.googleapis.com/bucket
	ResourceType string `json:"resourceType,omitempty"`
	// ViolationInfo: Optional. Policy violations
	ViolationInfo []*ViolationInfo `json:"violationInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Payload") 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. "Payload") 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 OrgPolicyViolationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod OrgPolicyViolationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Peer: This message defines attributes for a node that handles a network
// request. The node can be either a service or an application that sends,
// forwards, or receives the request. Service peers should fill in `principal`
// and `labels` as appropriate.
type Peer struct {
	// Ip: The IP address of the peer.
	Ip string `json:"ip,omitempty"`
	// Labels: The labels associated with the peer.
	Labels map[string]string `json:"labels,omitempty"`
	// Port: The network port of the peer.
	Port int64 `json:"port,omitempty,string"`
	// Principal: The identity of this peer. Similar to `Request.auth.principal`,
	// but relative to the peer instead of the request. For example, the identity
	// associated with a load balancer that forwarded the request.
	Principal string `json:"principal,omitempty"`
	// RegionCode: The CLDR country/region code associated with the above IP
	// address. If the IP address is private, the `region_code` should reflect the
	// physical location where this peer is running.
	RegionCode string `json:"regionCode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Ip") 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. "Ip") 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 Peer) MarshalJSON() ([]byte, error) {
	type NoMethod Peer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PolicyViolationInfo: Information related to policy violations for this
// request.
type PolicyViolationInfo struct {
	// OrgPolicyViolationInfo: Indicates the orgpolicy violations for this
	// resource.
	OrgPolicyViolationInfo *OrgPolicyViolationInfo `json:"orgPolicyViolationInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OrgPolicyViolationInfo") 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. "OrgPolicyViolationInfo") 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 PolicyViolationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod PolicyViolationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QuotaError: Represents error information for QuotaOperation.
type QuotaError struct {
	// Code: Error code.
	//
	// Possible values:
	//   "UNSPECIFIED" - This is never used.
	//   "RESOURCE_EXHAUSTED" - Quota allocation failed. Same as
	// google.rpc.Code.RESOURCE_EXHAUSTED.
	//   "OUT_OF_RANGE" - Quota release failed. This error is ONLY returned on a
	// NORMAL release. More formally: if a user requests a release of 10 tokens,
	// but only 5 tokens were previously allocated, in a BEST_EFFORT release, this
	// will be considered a success, 5 tokens will be released, and the result will
	// be "Ok". If this is done in NORMAL mode, no tokens will be released, and an
	// OUT_OF_RANGE error will be returned. Same as google.rpc.Code.OUT_OF_RANGE.
	//   "BILLING_NOT_ACTIVE" - Consumer cannot access the service because the
	// service requires active billing.
	//   "PROJECT_DELETED" - Consumer's project has been marked as deleted (soft
	// deletion).
	//   "API_KEY_INVALID" - Specified API key is invalid.
	//   "API_KEY_EXPIRED" - Specified API Key has expired.
	//   "SPATULA_HEADER_INVALID" - Consumer's spatula header is invalid.
	//   "LOAS_ROLE_INVALID" - The consumer's LOAS role is invalid.
	//   "NO_LOAS_PROJECT" - The consumer's LOAS role has no associated project.
	//   "PROJECT_STATUS_UNAVAILABLE" - The backend server for looking up project
	// id/number is unavailable.
	//   "SERVICE_STATUS_UNAVAILABLE" - The backend server for checking service
	// status is unavailable.
	//   "BILLING_STATUS_UNAVAILABLE" - The backend server for checking billing
	// status is unavailable.
	//   "QUOTA_SYSTEM_UNAVAILABLE" - The backend server for checking quota limits
	// is unavailable.
	Code string `json:"code,omitempty"`
	// Description: Free-form text that provides details on the cause of the error.
	Description string `json:"description,omitempty"`
	// Status: Contains additional information about the quota error. If available,
	// `status.code` will be non zero.
	Status *Status `json:"status,omitempty"`
	// Subject: Subject to whom this error applies. See the specific enum for more
	// details on this field. For example, "clientip:" or "project:".
	Subject string `json:"subject,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") 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. "Code") 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 QuotaError) MarshalJSON() ([]byte, error) {
	type NoMethod QuotaError
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QuotaInfo: Contains the quota information for a quota check response.
type QuotaInfo struct {
	// LimitExceeded: Quota Metrics that have exceeded quota limits. For
	// QuotaGroup-based quota, this is QuotaGroup.name For QuotaLimit-based quota,
	// this is QuotaLimit.name See: google.api.Quota Deprecated: Use quota_metrics
	// to get per quota group limit exceeded status.
	LimitExceeded []string `json:"limitExceeded,omitempty"`
	// QuotaConsumed: Map of quota group name to the actual number of tokens
	// consumed. If the quota check was not successful, then this will not be
	// populated due to no quota consumption. We are not merging this field with
	// 'quota_metrics' field because of the complexity of scaling in Chemist client
	// code base. For simplicity, we will keep this field for Castor (that scales
	// quota usage) and 'quota_metrics' for SuperQuota (that doesn't scale quota
	// usage).
	QuotaConsumed map[string]int64 `json:"quotaConsumed,omitempty"`
	// QuotaMetrics: Quota metrics to indicate the usage. Depending on the check
	// request, one or more of the following metrics will be included: 1. For rate
	// quota, per quota group or per quota metric incremental usage will be
	// specified using the following delta metric:
	// "serviceruntime.googleapis.com/api/consumer/quota_used_count" 2. For
	// allocation quota, per quota metric total usage will be specified using the
	// following gauge metric:
	// "serviceruntime.googleapis.com/allocation/consumer/quota_used_count" 3. For
	// both rate quota and allocation quota, the quota limit reached condition will
	// be specified using the following boolean metric:
	// "serviceruntime.googleapis.com/quota/exceeded"
	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LimitExceeded") 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. "LimitExceeded") 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 QuotaInfo) MarshalJSON() ([]byte, error) {
	type NoMethod QuotaInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QuotaOperation: Represents information regarding a quota operation.
type QuotaOperation struct {
	// ConsumerId: Identity of the consumer for whom this quota operation is being
	// performed. This can be in one of the following formats: project:,
	// project_number:, api_key:.
	ConsumerId string `json:"consumerId,omitempty"`
	// Labels: Labels describing the operation.
	Labels map[string]string `json:"labels,omitempty"`
	// MethodName: Fully qualified name of the API method for which this quota
	// operation is requested. This name is used for matching quota rules or metric
	// rules and billing status rules defined in service configuration. This field
	// should not be set if any of the following is true: (1) the quota operation
	// is performed on non-API resources. (2) quota_metrics is set because the
	// caller is doing quota override. Example of an RPC method name:
	// google.example.library.v1.LibraryService.CreateShelf
	MethodName string `json:"methodName,omitempty"`
	// OperationId: Identity of the operation. For Allocation Quota, this is
	// expected to be unique within the scope of the service that generated the
	// operation, and guarantees idempotency in case of retries. In order to ensure
	// best performance and latency in the Quota backends, operation_ids are
	// optimally associated with time, so that related operations can be accessed
	// fast in storage. For this reason, the recommended token for services that
	// intend to operate at a high QPS is Unix time in nanos + UUID
	OperationId string `json:"operationId,omitempty"`
	// QuotaMetrics: Represents information about this operation. Each
	// MetricValueSet corresponds to a metric defined in the service configuration.
	// The data type used in the MetricValueSet must agree with the data type
	// specified in the metric definition. Within a single operation, it is not
	// allowed to have more than one MetricValue instances that have the same
	// metric names and identical label value combinations. If a request has such
	// duplicated MetricValue instances, the entire request is rejected with an
	// invalid argument error. This field is mutually exclusive with method_name.
	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
	// QuotaMode: Quota mode for this operation.
	//
	// Possible values:
	//   "UNSPECIFIED" - Guard against implicit default. Must not be used.
	//   "NORMAL" - For AllocateQuota request, allocates quota for the amount
	// specified in the service configuration or specified using the quota metrics.
	// If the amount is higher than the available quota, allocation error will be
	// returned and no quota will be allocated. If multiple quotas are part of the
	// request, and one fails, none of the quotas are allocated or released.
	//   "BEST_EFFORT" - The operation allocates quota for the amount specified in
	// the service configuration or specified using the quota metrics. If the
	// amount is higher than the available quota, request does not fail but all
	// available quota will be allocated. For rate quota, BEST_EFFORT will continue
	// to deduct from other groups even if one does not have enough quota. For
	// allocation, it will find the minimum available amount across all groups and
	// deduct that amount from all the affected groups.
	//   "CHECK_ONLY" - For AllocateQuota request, only checks if there is enough
	// quota available and does not change the available quota. No lock is placed
	// on the available quota either.
	//   "ADJUST_ONLY" - The operation allocates quota for the amount specified in
	// the service configuration or specified using the quota metrics. If the
	// requested amount is higher than the available quota, request does not fail
	// and remaining quota would become negative (going over the limit). Not
	// supported for Rate Quota.
	QuotaMode string `json:"quotaMode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConsumerId") 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. "ConsumerId") 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 QuotaOperation) MarshalJSON() ([]byte, error) {
	type NoMethod QuotaOperation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QuotaProperties: Represents the properties needed for quota operations.
type QuotaProperties struct {
	// QuotaMode: Quota mode for this operation.
	//
	// Possible values:
	//   "ACQUIRE" - Decreases available quota by the cost specified for the
	// operation. If cost is higher than available quota, operation fails and
	// returns error.
	//   "ACQUIRE_BEST_EFFORT" - Decreases available quota by the cost specified
	// for the operation. If cost is higher than available quota, operation does
	// not fail and available quota goes down to zero but it returns error.
	//   "CHECK" - Does not change any available quota. Only checks if there is
	// enough quota. No lock is placed on the checked tokens neither.
	QuotaMode string `json:"quotaMode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "QuotaMode") 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. "QuotaMode") 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 QuotaProperties) MarshalJSON() ([]byte, error) {
	type NoMethod QuotaProperties
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ReportError: Represents the processing error of one Operation in the
// request.
type ReportError struct {
	// OperationId: The Operation.operation_id value from the request.
	OperationId string `json:"operationId,omitempty"`
	// Status: Details of the error when processing the Operation.
	Status *Status `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OperationId") 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. "OperationId") 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 ReportError) MarshalJSON() ([]byte, error) {
	type NoMethod ReportError
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ReportRequest: Request message for the Report method.
type ReportRequest struct {
	// Operations: Operations to be reported. Typically the service should report
	// one operation per request. Putting multiple operations into a single request
	// is allowed, but should be used only when multiple operations are natually
	// available at the time of the report. There is no limit on the number of
	// operations in the same ReportRequest, however the ReportRequest size should
	// be no larger than 1MB. See ReportResponse.report_errors for partial failure
	// behavior.
	Operations []*Operation `json:"operations,omitempty"`
	// ServiceConfigId: Specifies which version of service config should be used to
	// process the request. If unspecified or no matching version can be found, the
	// latest one will be used.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Operations") 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. "Operations") 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 ReportRequest) MarshalJSON() ([]byte, error) {
	type NoMethod ReportRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ReportResponse: Response message for the Report method.
type ReportResponse struct {
	// ReportErrors: Partial failures, one for each `Operation` in the request that
	// failed processing. There are three possible combinations of the RPC status:
	// 1. The combination of a successful RPC status and an empty `report_errors`
	// list indicates a complete success where all `Operations` in the request are
	// processed successfully. 2. The combination of a successful RPC status and a
	// non-empty `report_errors` list indicates a partial success where some
	// `Operations` in the request succeeded. Each `Operation` that failed
	// processing has a corresponding item in this list. 3. A failed RPC status
	// indicates a general non-deterministic failure. When this happens, it's
	// impossible to know which of the 'Operations' in the request succeeded or
	// failed.
	ReportErrors []*ReportError `json:"reportErrors,omitempty"`
	// ServiceConfigId: The actual config id used to process the request.
	ServiceConfigId string `json:"serviceConfigId,omitempty"`
	// ServiceRolloutId: The current service rollout id used to process the
	// request.
	ServiceRolloutId string `json:"serviceRolloutId,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ReportErrors") 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. "ReportErrors") 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 ReportResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ReportResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Request: This message defines attributes for an HTTP request. If the actual
// request is not an HTTP request, the runtime system should try to map the
// actual request to an equivalent HTTP request.
type Request struct {
	// Auth: The request authentication. May be absent for unauthenticated
	// requests. Derived from the HTTP request `Authorization` header or
	// equivalent.
	Auth *Auth `json:"auth,omitempty"`
	// Headers: The HTTP request headers. If multiple headers share the same key,
	// they must be merged according to the HTTP spec. All header keys must be
	// lowercased, because HTTP header keys are case-insensitive.
	Headers map[string]string `json:"headers,omitempty"`
	// Host: The HTTP request `Host` header value.
	Host string `json:"host,omitempty"`
	// Id: The unique ID for a request, which can be propagated to downstream
	// systems. The ID should have low probability of collision within a single day
	// for a specific service.
	Id string `json:"id,omitempty"`
	// Method: The HTTP request method, such as `GET`, `POST`.
	Method string `json:"method,omitempty"`
	// Origin: The values from Origin header from the HTTP request, such as
	// "https://console.cloud.google.com". Modern browsers can only have one
	// origin. Special browsers and/or HTTP clients may require multiple origins.
	Origin string `json:"origin,omitempty"`
	// Path: The HTTP URL path, excluding the query parameters.
	Path string `json:"path,omitempty"`
	// Protocol: The network protocol used with the request, such as "http/1.1",
	// "spdy/3", "h2", "h2c", "webrtc", "tcp", "udp", "quic". See
	// https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
	// for details.
	Protocol string `json:"protocol,omitempty"`
	// Query: The HTTP URL query in the format of `name1=value1&name2=value2`, as
	// it appears in the first line of the HTTP request. No decoding is performed.
	Query string `json:"query,omitempty"`
	// Reason: A special parameter for request reason. It is used by security
	// systems to associate auditing information with a request.
	Reason string `json:"reason,omitempty"`
	// Scheme: The HTTP URL scheme, such as `http` and `https`.
	Scheme string `json:"scheme,omitempty"`
	// Size: The HTTP request size in bytes. If unknown, it must be -1.
	Size int64 `json:"size,omitempty,string"`
	// Time: The timestamp when the `destination` service receives the last byte of
	// the request.
	Time string `json:"time,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Auth") 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. "Auth") 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 Request) MarshalJSON() ([]byte, error) {
	type NoMethod Request
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// RequestMetadata: Metadata about the request.
type RequestMetadata struct {
	// CallerIp: The IP address of the caller. For a caller from the internet, this
	// will be the public IPv4 or IPv6 address. For calls made from inside Google's
	// internal production network from one GCP service to another, `caller_ip`
	// will be redacted to "private". For a caller from a Compute Engine VM with a
	// external IP address, `caller_ip` will be the VM's external IP address. For a
	// caller from a Compute Engine VM without a external IP address, if the VM is
	// in the same organization (or project) as the accessed resource, `caller_ip`
	// will be the VM's internal IPv4 address, otherwise `caller_ip` will be
	// redacted to "gce-internal-ip". See
	// https://cloud.google.com/compute/docs/vpc/ for more information.
	CallerIp string `json:"callerIp,omitempty"`
	// CallerNetwork: The network of the caller. Set only if the network host
	// project is part of the same GCP organization (or project) as the accessed
	// resource. See https://cloud.google.com/compute/docs/vpc/ for more
	// information. This is a scheme-less URI full resource name. For example:
	// "//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_ID"
	CallerNetwork string `json:"callerNetwork,omitempty"`
	// CallerSuppliedUserAgent: The user agent of the caller. This information is
	// not authenticated and should be treated accordingly. For example: +
	// `google-api-python-client/1.4.0`: The request was made by the Google API
	// client for Python. + `Cloud SDK Command Line Tool apitools-client/1.0
	// gcloud/0.9.62`: The request was made by the Google Cloud SDK CLI (gcloud). +
	// `AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project`:
	// The request was made from the `my-project` App Engine app.
	CallerSuppliedUserAgent string `json:"callerSuppliedUserAgent,omitempty"`
	// DestinationAttributes: The destination of a network activity, such as
	// accepting a TCP connection. In a multi hop network activity, the destination
	// represents the receiver of the last hop. Only two fields are used in this
	// message, Peer.port and Peer.ip. These fields are optionally populated by
	// those services utilizing the IAM condition feature.
	DestinationAttributes *Peer `json:"destinationAttributes,omitempty"`
	// RequestAttributes: Request attributes used in IAM condition evaluation. This
	// field contains request attributes like request time and access levels
	// associated with the request. To get the whole view of the attributes used in
	// IAM condition evaluation, the user must also look into
	// `AuditLog.authentication_info.resource_attributes`.
	RequestAttributes *Request `json:"requestAttributes,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CallerIp") 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. "CallerIp") 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 RequestMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod RequestMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Resource: This message defines core attributes for a resource. A resource is
// an addressable (named) entity provided by the destination service. For
// example, a file stored on a network storage service.
type Resource struct {
	// Annotations: Annotations is an unstructured key-value map stored with a
	// resource that may be set by external tools to store and retrieve arbitrary
	// metadata. They are not queryable and should be preserved when modifying
	// objects. More info:
	// https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
	Annotations map[string]string `json:"annotations,omitempty"`
	// CreateTime: Output only. The timestamp when the resource was created. This
	// may be either the time creation was initiated or when it was completed.
	CreateTime string `json:"createTime,omitempty"`
	// DeleteTime: Output only. The timestamp when the resource was deleted. If the
	// resource is not deleted, this must be empty.
	DeleteTime string `json:"deleteTime,omitempty"`
	// DisplayName: Mutable. The display name set by clients. Must be <= 63
	// characters.
	DisplayName string `json:"displayName,omitempty"`
	// Etag: Output only. An opaque value that uniquely identifies a version or
	// generation of a resource. It can be used to confirm that the client and
	// server agree on the ordering of a resource being written.
	Etag string `json:"etag,omitempty"`
	// Labels: The labels or tags on the resource, such as AWS resource tags and
	// Kubernetes resource labels.
	Labels map[string]string `json:"labels,omitempty"`
	// Location: Immutable. The location of the resource. The location encoding is
	// specific to the service provider, and new encoding may be introduced as the
	// service evolves. For Google Cloud products, the encoding is what is used by
	// Google Cloud APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`.
	// The semantics of `location` is identical to the
	// `cloud.googleapis.com/location` label used by some Google Cloud APIs.
	Location string `json:"location,omitempty"`
	// Name: The stable identifier (name) of a resource on the `service`. A
	// resource can be logically identified as
	// "//{resource.service}/{resource.name}". The differences between a resource
	// name and a URI are: * Resource name is a logical identifier, independent of
	// network protocol and API version. For example,
	// `//pubsub.googleapis.com/projects/123/topics/news-feed`. * URI often
	// includes protocol and version information, so it can be used directly by
	// applications. For example,
	// `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`. See
	// https://cloud.google.com/apis/design/resource_names for details.
	Name string `json:"name,omitempty"`
	// Service: The name of the service that this resource belongs to, such as
	// `pubsub.googleapis.com`. The service may be different from the DNS hostname
	// that actually serves the request.
	Service string `json:"service,omitempty"`
	// Type: The type of the resource. The syntax is platform-specific because
	// different platforms define their resources differently. For Google APIs, the
	// type format must be "{service}/{kind}", such as
	// "pubsub.googleapis.com/Topic".
	Type string `json:"type,omitempty"`
	// Uid: The unique identifier of the resource. UID is unique in the time and
	// space for this resource within the scope of the service. It is typically
	// generated by the server on successful creation of a resource and must not be
	// changed. UID is used to uniquely identify resources with resource name
	// reuses. This should be a UUID4.
	Uid string `json:"uid,omitempty"`
	// UpdateTime: Output only. The timestamp when the resource was last updated.
	// Any change to the resource made by users must refresh this value. Changes to
	// a resource made by the service should refresh this value.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Annotations") 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. "Annotations") 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 Resource) MarshalJSON() ([]byte, error) {
	type NoMethod Resource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ResourceInfo: Describes a resource associated with this operation.
type ResourceInfo struct {
	// Permission: The resource permission required for this request.
	Permission string `json:"permission,omitempty"`
	// ResourceContainer: The identifier of the parent of this resource instance.
	// Must be in one of the following formats: - `projects/` - `folders/` -
	// `organizations/`
	ResourceContainer string `json:"resourceContainer,omitempty"`
	// ResourceLocation: The location of the resource. If not empty, the resource
	// will be checked against location policy. The value must be a valid zone,
	// region or multiregion. For example: "europe-west4" or
	// "northamerica-northeast1-a"
	ResourceLocation string `json:"resourceLocation,omitempty"`
	// ResourceName: Name of the resource. This is used for auditing purposes.
	ResourceName string `json:"resourceName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Permission") 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. "Permission") 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 ResourceInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ResourceInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ResourceLocation: Location information about a resource.
type ResourceLocation struct {
	// CurrentLocations: The locations of a resource after the execution of the
	// operation. Requests to create or delete a location based resource must
	// populate the 'current_locations' field and not the 'original_locations'
	// field. For example: "europe-west1-a" "us-east1" "nam3"
	CurrentLocations []string `json:"currentLocations,omitempty"`
	// OriginalLocations: The locations of a resource prior to the execution of the
	// operation. Requests that mutate the resource's location must populate both
	// the 'original_locations' as well as the 'current_locations' fields. For
	// example: "europe-west1-a" "us-east1" "nam3"
	OriginalLocations []string `json:"originalLocations,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CurrentLocations") 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. "CurrentLocations") 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 ResourceLocation) MarshalJSON() ([]byte, error) {
	type NoMethod ResourceLocation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceAccountDelegationInfo: Identity delegation history of an
// authenticated service account.
type ServiceAccountDelegationInfo struct {
	// FirstPartyPrincipal: First party (Google) identity as the real authority.
	FirstPartyPrincipal *FirstPartyPrincipal `json:"firstPartyPrincipal,omitempty"`
	// PrincipalSubject: A string representing the principal_subject associated
	// with the identity. For most identities, the format will be
	// `principal://iam.googleapis.com/{identity pool name}/subject/{subject)`
	// except for some GKE identities (GKE_WORKLOAD, FREEFORM, GKE_HUB_WORKLOAD)
	// that are still in the legacy format `serviceAccount:{identity pool
	// name}[{subject}]`
	PrincipalSubject string `json:"principalSubject,omitempty"`
	// ThirdPartyPrincipal: Third party identity as the real authority.
	ThirdPartyPrincipal *ThirdPartyPrincipal `json:"thirdPartyPrincipal,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FirstPartyPrincipal") 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. "FirstPartyPrincipal") 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 ServiceAccountDelegationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceAccountDelegationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceDelegationHistory: The history of delegation across multiple services
// as the result of the original user's action. Such as "service A uses its own
// account to do something for user B". This differs from
// ServiceAccountDelegationInfo, which only tracks the history of direct token
// exchanges (impersonation).
type ServiceDelegationHistory struct {
	// OriginalPrincipal: The original end user who initiated the request to GCP.
	OriginalPrincipal string `json:"originalPrincipal,omitempty"`
	// ServiceMetadata: Data identifying the service specific jobs or units of work
	// that were involved in a chain of service calls.
	ServiceMetadata []*ServiceMetadata `json:"serviceMetadata,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OriginalPrincipal") 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. "OriginalPrincipal") 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 ServiceDelegationHistory) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceDelegationHistory
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceMetadata: Metadata describing the service and additional service
// specific information used to identify the job or unit of work at hand.
type ServiceMetadata struct {
	// JobMetadata: Additional metadata provided by service teams to describe
	// service specific job information that was triggered by the original
	// principal.
	JobMetadata googleapi.RawMessage `json:"jobMetadata,omitempty"`
	// PrincipalSubject: A string representing the principal_subject associated
	// with the identity. For most identities, the format will be
	// `principal://iam.googleapis.com/{identity pool name}/subject/{subject)`
	// except for some GKE identities (GKE_WORKLOAD, FREEFORM, GKE_HUB_WORKLOAD)
	// that are still in the legacy format `serviceAccount:{identity pool
	// name}[{subject}]` If the identity is a Google account (e.g. workspace user
	// account or service account), this will be the email of the prefixed by
	// `serviceAccount:`. For example:
	// `serviceAccount:my-service-account@project-1.iam.gserviceaccount.com`. If
	// the identity is an individual user, the identity will be formatted as:
	// `user:user_ABC@email.com`.
	PrincipalSubject string `json:"principalSubject,omitempty"`
	// ServiceDomain: The service's fully qualified domain name, e.g.
	// "dataproc.googleapis.com".
	ServiceDomain string `json:"serviceDomain,omitempty"`
	// ForceSendFields is a list of field names (e.g. "JobMetadata") 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. "JobMetadata") 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 ServiceMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SpanContext: The context of a span. This is attached to an Exemplar in
// Distribution values during aggregation. It contains the name of a span with
// format: projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID]
type SpanContext struct {
	// SpanName: The resource name of the span. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID]
	// `[TRACE_ID]` is a unique identifier for a trace within a project; it is a
	// 32-character hexadecimal encoding of a 16-byte array. `[SPAN_ID]` is a
	// unique identifier for a span within a trace; it is a 16-character
	// hexadecimal encoding of an 8-byte array.
	SpanName string `json:"spanName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "SpanName") 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. "SpanName") 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 SpanContext) MarshalJSON() ([]byte, error) {
	type NoMethod SpanContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Status: The `Status` type defines a logical error model that is suitable for
// different programming environments, including REST APIs and RPC APIs. It is
// used by gRPC (https://github.com/grpc). Each `Status` message contains three
// pieces of data: error code, error message, and error details. You can find
// out more about this error model and how to work with it in the API Design
// Guide (https://cloud.google.com/apis/design/errors).
type Status struct {
	// Code: The status code, which should be an enum value of google.rpc.Code.
	Code int64 `json:"code,omitempty"`
	// Details: A list of messages that carry the error details. There is a common
	// set of message types for APIs to use.
	Details []googleapi.RawMessage `json:"details,omitempty"`
	// Message: A developer-facing error message, which should be in English. Any
	// user-facing error message should be localized and sent in the
	// google.rpc.Status.details field, or localized by the client.
	Message string `json:"message,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") 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. "Code") 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 Status) MarshalJSON() ([]byte, error) {
	type NoMethod Status
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ThirdPartyPrincipal: Third party identity principal.
type ThirdPartyPrincipal struct {
	// ThirdPartyClaims: Metadata about third party identity.
	ThirdPartyClaims googleapi.RawMessage `json:"thirdPartyClaims,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ThirdPartyClaims") 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. "ThirdPartyClaims") 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 ThirdPartyPrincipal) MarshalJSON() ([]byte, error) {
	type NoMethod ThirdPartyPrincipal
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TraceSpan: A span represents a single operation within a trace. Spans can be
// nested to form a trace tree. Often, a trace contains a root span that
// describes the end-to-end latency, and one or more subspans for its
// sub-operations. A trace can also contain multiple root spans, or none at
// all. Spans do not need to be contiguous—there may be gaps or overlaps
// between spans in a trace.
type TraceSpan struct {
	// Attributes: A set of attributes on the span. You can have up to 32
	// attributes per span.
	Attributes *Attributes `json:"attributes,omitempty"`
	// ChildSpanCount: An optional number of child spans that were generated while
	// this span was active. If set, allows implementation to detect missing child
	// spans.
	ChildSpanCount int64 `json:"childSpanCount,omitempty"`
	// DisplayName: A description of the span's operation (up to 128 bytes).
	// Stackdriver Trace displays the description in the Google Cloud Platform
	// Console. For example, the display name can be a qualified method name or a
	// file name and a line number where the operation is called. A best practice
	// is to use the same display name within an application and at the same call
	// point. This makes it easier to correlate spans in different traces.
	DisplayName *TruncatableString `json:"displayName,omitempty"`
	// EndTime: The end time of the span. On the client side, this is the time kept
	// by the local machine where the span execution ends. On the server side, this
	// is the time when the server application handler stops running.
	EndTime string `json:"endTime,omitempty"`
	// Name: The resource name of the span in the following format:
	// projects/[PROJECT_ID]/traces/[TRACE_ID]/spans/SPAN_ID is a unique identifier
	// for a trace within a project; it is a 32-character hexadecimal encoding of a
	// 16-byte array. [SPAN_ID] is a unique identifier for a span within a trace;
	// it is a 16-character hexadecimal encoding of an 8-byte array.
	Name string `json:"name,omitempty"`
	// ParentSpanId: The [SPAN_ID] of this span's parent span. If this is a root
	// span, then this field must be empty.
	ParentSpanId string `json:"parentSpanId,omitempty"`
	// SameProcessAsParentSpan: (Optional) Set this parameter to indicate whether
	// this span is in the same process as its parent. If you do not set this
	// parameter, Stackdriver Trace is unable to take advantage of this helpful
	// information.
	SameProcessAsParentSpan bool `json:"sameProcessAsParentSpan,omitempty"`
	// SpanId: The [SPAN_ID] portion of the span's resource name.
	SpanId string `json:"spanId,omitempty"`
	// SpanKind: Distinguishes between spans generated in a particular context. For
	// example, two spans with the same name may be distinguished using `CLIENT`
	// (caller) and `SERVER` (callee) to identify an RPC call.
	//
	// Possible values:
	//   "SPAN_KIND_UNSPECIFIED" - Unspecified. Do NOT use as default.
	// Implementations MAY assume SpanKind.INTERNAL to be default.
	//   "INTERNAL" - Indicates that the span is used internally. Default value.
	//   "SERVER" - Indicates that the span covers server-side handling of an RPC
	// or other remote network request.
	//   "CLIENT" - Indicates that the span covers the client-side wrapper around
	// an RPC or other remote request.
	//   "PRODUCER" - Indicates that the span describes producer sending a message
	// to a broker. Unlike client and server, there is no direct critical path
	// latency relationship between producer and consumer spans (e.g. publishing a
	// message to a pubsub service).
	//   "CONSUMER" - Indicates that the span describes consumer receiving a
	// message from a broker. Unlike client and server, there is no direct critical
	// path latency relationship between producer and consumer spans (e.g.
	// receiving a message from a pubsub service subscription).
	SpanKind string `json:"spanKind,omitempty"`
	// StartTime: The start time of the span. On the client side, this is the time
	// kept by the local machine where the span execution starts. On the server
	// side, this is the time when the server's application handler starts running.
	StartTime string `json:"startTime,omitempty"`
	// Status: An optional final status for this span.
	Status *Status `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attributes") 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. "Attributes") 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 TraceSpan) MarshalJSON() ([]byte, error) {
	type NoMethod TraceSpan
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TruncatableString: Represents a string that might be shortened to a
// specified length.
type TruncatableString struct {
	// TruncatedByteCount: The number of bytes removed from the original string. If
	// this value is 0, then the string was not shortened.
	TruncatedByteCount int64 `json:"truncatedByteCount,omitempty"`
	// Value: The shortened string. For example, if the original string is 500
	// bytes long and the limit of the string is 128 bytes, then `value` contains
	// the first 128 bytes of the 500-byte string. Truncation always happens on a
	// UTF8 character boundary. If there are multi-byte characters in the string,
	// then the length of the shortened string might be less than the size limit.
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TruncatedByteCount") 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. "TruncatedByteCount") 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 TruncatableString) MarshalJSON() ([]byte, error) {
	type NoMethod TruncatableString
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// V1HttpRequest: A common proto for logging HTTP requests. Only contains
// semantics defined by the HTTP specification. Product-specific logging
// information MUST be defined in a separate message.
type V1HttpRequest struct {
	// CacheFillBytes: The number of HTTP response bytes inserted into cache. Set
	// only when a cache fill was attempted.
	CacheFillBytes int64 `json:"cacheFillBytes,omitempty,string"`
	// CacheHit: Whether or not an entity was served from cache (with or without
	// validation).
	CacheHit bool `json:"cacheHit,omitempty"`
	// CacheLookup: Whether or not a cache lookup was attempted.
	CacheLookup bool `json:"cacheLookup,omitempty"`
	// CacheValidatedWithOriginServer: Whether or not the response was validated
	// with the origin server before being served from cache. This field is only
	// meaningful if `cache_hit` is True.
	CacheValidatedWithOriginServer bool `json:"cacheValidatedWithOriginServer,omitempty"`
	// Latency: The request processing latency on the server, from the time the
	// request was received until the response was sent.
	Latency string `json:"latency,omitempty"`
	// Protocol: Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2",
	// "websocket"
	Protocol string `json:"protocol,omitempty"`
	// Referer: The referer URL of the request, as defined in HTTP/1.1 Header Field
	// Definitions (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
	Referer string `json:"referer,omitempty"`
	// RemoteIp: The IP address (IPv4 or IPv6) of the client that issued the HTTP
	// request. Examples: "192.168.1.1", "FE80::0202:B3FF:FE1E:8329".
	RemoteIp string `json:"remoteIp,omitempty"`
	// RequestMethod: The request method. Examples: "GET", "HEAD", "PUT",
	// "POST".
	RequestMethod string `json:"requestMethod,omitempty"`
	// RequestSize: The size of the HTTP request message in bytes, including the
	// request headers and the request body.
	RequestSize int64 `json:"requestSize,omitempty,string"`
	// RequestUrl: The scheme (http, https), the host name, the path, and the query
	// portion of the URL that was requested. Example:
	// "http://example.com/some/info?color=red".
	RequestUrl string `json:"requestUrl,omitempty"`
	// ResponseSize: The size of the HTTP response message sent back to the client,
	// in bytes, including the response headers and the response body.
	ResponseSize int64 `json:"responseSize,omitempty,string"`
	// ServerIp: The IP address (IPv4 or IPv6) of the origin server that the
	// request was sent to.
	ServerIp string `json:"serverIp,omitempty"`
	// Status: The response code indicating the status of the response. Examples:
	// 200, 404.
	Status int64 `json:"status,omitempty"`
	// UserAgent: The user agent sent by the client. Example: "Mozilla/4.0
	// (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)".
	UserAgent string `json:"userAgent,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CacheFillBytes") 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. "CacheFillBytes") 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 V1HttpRequest) MarshalJSON() ([]byte, error) {
	type NoMethod V1HttpRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// V1LogEntry: An individual log entry.
type V1LogEntry struct {
	// HttpRequest: Optional. Information about the HTTP request associated with
	// this log entry, if applicable.
	HttpRequest *V1HttpRequest `json:"httpRequest,omitempty"`
	// InsertId: A unique ID for the log entry used for deduplication. If omitted,
	// the implementation will generate one based on operation_id.
	InsertId string `json:"insertId,omitempty"`
	// Labels: A set of user-defined (key, value) data that provides additional
	// information about the log entry.
	Labels map[string]string `json:"labels,omitempty"`
	// MonitoredResourceLabels: A set of user-defined (key, value) data that
	// provides additional information about the moniotored resource that the log
	// entry belongs to.
	MonitoredResourceLabels map[string]string `json:"monitoredResourceLabels,omitempty"`
	// Name: Required. The log to which this log entry belongs. Examples:
	// "syslog", "book_log".
	Name string `json:"name,omitempty"`
	// Operation: Optional. Information about an operation associated with the log
	// entry, if applicable.
	Operation *V1LogEntryOperation `json:"operation,omitempty"`
	// ProtoPayload: The log entry payload, represented as a protocol buffer that
	// is expressed as a JSON object. The only accepted type currently is AuditLog.
	ProtoPayload googleapi.RawMessage `json:"protoPayload,omitempty"`
	// Severity: The severity of the log entry. The default value is
	// `LogSeverity.DEFAULT`.
	//
	// Possible values:
	//   "DEFAULT" - (0) The log entry has no assigned severity level.
	//   "DEBUG" - (100) Debug or trace information.
	//   "INFO" - (200) Routine information, such as ongoing status or performance.
	//   "NOTICE" - (300) Normal but significant events, such as start up, shut
	// down, or a configuration change.
	//   "WARNING" - (400) Warning events might cause problems.
	//   "ERROR" - (500) Error events are likely to cause problems.
	//   "CRITICAL" - (600) Critical events cause more severe problems or outages.
	//   "ALERT" - (700) A person must take an action immediately.
	//   "EMERGENCY" - (800) One or more systems are unusable.
	Severity string `json:"severity,omitempty"`
	// SourceLocation: Optional. Source code location information associated with
	// the log entry, if any.
	SourceLocation *V1LogEntrySourceLocation `json:"sourceLocation,omitempty"`
	// StructPayload: The log entry payload, represented as a structure that is
	// expressed as a JSON object.
	StructPayload googleapi.RawMessage `json:"structPayload,omitempty"`
	// TextPayload: The log entry payload, represented as a Unicode string (UTF-8).
	TextPayload string `json:"textPayload,omitempty"`
	// Timestamp: The time the event described by the log entry occurred. If
	// omitted, defaults to operation start time.
	Timestamp string `json:"timestamp,omitempty"`
	// Trace: Optional. Resource name of the trace associated with the log entry,
	// if any. If this field contains a relative resource name, you can assume the
	// name is relative to `//tracing.googleapis.com`. Example:
	// `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824`
	Trace string `json:"trace,omitempty"`
	// ForceSendFields is a list of field names (e.g. "HttpRequest") 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. "HttpRequest") 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 V1LogEntry) MarshalJSON() ([]byte, error) {
	type NoMethod V1LogEntry
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// V1LogEntryOperation: Additional information about a potentially long-running
// operation with which a log entry is associated.
type V1LogEntryOperation struct {
	// First: Optional. Set this to True if this is the first log entry in the
	// operation.
	First bool `json:"first,omitempty"`
	// Id: Optional. An arbitrary operation identifier. Log entries with the same
	// identifier are assumed to be part of the same operation.
	Id string `json:"id,omitempty"`
	// Last: Optional. Set this to True if this is the last log entry in the
	// operation.
	Last bool `json:"last,omitempty"`
	// Producer: Optional. An arbitrary producer identifier. The combination of
	// `id` and `producer` must be globally unique. Examples for `producer`:
	// "MyDivision.MyBigCompany.com", "github.com/MyProject/MyApplication".
	Producer string `json:"producer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "First") 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. "First") 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 V1LogEntryOperation) MarshalJSON() ([]byte, error) {
	type NoMethod V1LogEntryOperation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// V1LogEntrySourceLocation: Additional information about the source code
// location that produced the log entry.
type V1LogEntrySourceLocation struct {
	// File: Optional. Source file name. Depending on the runtime environment, this
	// might be a simple name or a fully-qualified name.
	File string `json:"file,omitempty"`
	// Function: Optional. Human-readable name of the function or method being
	// invoked, with optional context such as the class or package name. This
	// information may be used in contexts such as the logs viewer, where a file
	// and line number are less meaningful. The format can vary by language. For
	// example: `qual.if.ied.Class.method` (Java), `dir/package.func` (Go),
	// `function` (Python).
	Function string `json:"function,omitempty"`
	// Line: Optional. Line within the source file. 1-based; 0 indicates no line
	// number available.
	Line int64 `json:"line,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "File") 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. "File") 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 V1LogEntrySourceLocation) MarshalJSON() ([]byte, error) {
	type NoMethod V1LogEntrySourceLocation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// V1ResourceEvent: Report v2 extension proto for passing the resource metadata
// associated with a resource create/update/delete/undelete event from ESF to
// Chemist. ResourceEvent proto should be serialized into the
// ReportRequest.operations.extensions.
type V1ResourceEvent struct {
	// ContextId: The ESF unique context id of the api request, from which this
	// resource event originated. This field is only needed for CAIS integration
	// via api annotation. See go/cais-lro-delete for more details.
	ContextId int64 `json:"contextId,omitempty,string"`
	// Destinations: The destinations field determines which backend services
	// should handle the event. This should be specified as a comma-delimited
	// string.
	Destinations string `json:"destinations,omitempty"`
	// Parent: The parent resource for the resource.
	Parent *Resource `json:"parent,omitempty"`
	// Path: The api path the resource event was created in. This should match the
	// source of the `payload` field. For direct integrations with Chemist, this
	// should generally be the RESPONSE. go/resource-event-pipeline-type
	//
	// Possible values:
	//   "API_PATH_UNSPECIFIED" - Default value. Do not use.
	//   "REQUEST" - The request path.
	//   "RESPONSE" - The response path.
	Path string `json:"path,omitempty"`
	// Payload: The payload contains metadata associated with the resource event. A
	// ResourceEventPayloadStatus is provided instead if the original payload
	// cannot be returned due to a limitation (e.g. size limit).
	Payload googleapi.RawMessage `json:"payload,omitempty"`
	// Resource: The resource associated with the event.
	Resource *Resource `json:"resource,omitempty"`
	// Type: The resource event type determines how the backend service should
	// process the event.
	//
	// Possible values:
	//   "TYPE_UNSPECIFIED" - The resource event type is unclear. We do not expect
	// any events to fall into this category.
	//   "CREATE" - The resource is created/inserted.
	//   "UPDATE" - The resource is updated.
	//   "DELETE" - The resource is deleted.
	//   "UNDELETE" - The resource is un-deleted.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ContextId") 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. "ContextId") 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 V1ResourceEvent) MarshalJSON() ([]byte, error) {
	type NoMethod V1ResourceEvent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ViolationInfo: Provides information about the Policy violation info for this
// request.
type ViolationInfo struct {
	// CheckedValue: Optional. Value that is being checked for the policy. This
	// could be in encrypted form (if pii sensitive). This field will only be
	// emitted in LIST_POLICY types
	CheckedValue string `json:"checkedValue,omitempty"`
	// Constraint: Optional. Constraint name
	Constraint string `json:"constraint,omitempty"`
	// ErrorMessage: Optional. Error message that policy is indicating.
	ErrorMessage string `json:"errorMessage,omitempty"`
	// PolicyType: Optional. Indicates the type of the policy.
	//
	// Possible values:
	//   "POLICY_TYPE_UNSPECIFIED" - Default value. This value should not be used.
	//   "BOOLEAN_CONSTRAINT" - Indicates boolean policy constraint
	//   "LIST_CONSTRAINT" - Indicates list policy constraint
	//   "CUSTOM_CONSTRAINT" - Indicates custom policy constraint
	PolicyType string `json:"policyType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CheckedValue") 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. "CheckedValue") 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 ViolationInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ViolationInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type ServicesAllocateQuotaCall struct {
	s                    *Service
	serviceName          string
	allocatequotarequest *AllocateQuotaRequest
	urlParams_           gensupport.URLParams
	ctx_                 context.Context
	header_              http.Header
}

// AllocateQuota: Attempts to allocate quota for the specified consumer. It
// should be called before the operation is executed. This method requires the
// `servicemanagement.services.quota` permission on the specified service. For
// more information, see Cloud IAM (https://cloud.google.com/iam). **NOTE:**
// The client **must** fail-open on server errors `INTERNAL`, `UNKNOWN`,
// `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system reliability, the
// server may inject these errors to prohibit any hard dependency on the quota
// functionality.
//
//   - serviceName: Name of the service as specified in the service
//     configuration. For example, "pubsub.googleapis.com". See
//     google.api.Service for the definition of a service name.
func (r *ServicesService) AllocateQuota(serviceName string, allocatequotarequest *AllocateQuotaRequest) *ServicesAllocateQuotaCall {
	c := &ServicesAllocateQuotaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.serviceName = serviceName
	c.allocatequotarequest = allocatequotarequest
	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 *ServicesAllocateQuotaCall) Fields(s ...googleapi.Field) *ServicesAllocateQuotaCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesAllocateQuotaCall) Context(ctx context.Context) *ServicesAllocateQuotaCall {
	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 *ServicesAllocateQuotaCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesAllocateQuotaCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.allocatequotarequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:allocateQuota")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"serviceName": c.serviceName,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "servicecontrol.services.allocateQuota", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "servicecontrol.services.allocateQuota" call.
// Any non-2xx status code is an error. Response headers are in either
// *AllocateQuotaResponse.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 *ServicesAllocateQuotaCall) Do(opts ...googleapi.CallOption) (*AllocateQuotaResponse, 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 := &AllocateQuotaResponse{
		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", "servicecontrol.services.allocateQuota", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesCheckCall struct {
	s            *Service
	serviceName  string
	checkrequest *CheckRequest
	urlParams_   gensupport.URLParams
	ctx_         context.Context
	header_      http.Header
}

// Check: Checks whether an operation on a service should be allowed to proceed
// based on the configuration of the service and related policies. It must be
// called before the operation is executed. If feasible, the client should
// cache the check results and reuse them for 60 seconds. In case of any server
// errors, the client should rely on the cached results for much longer time to
// avoid outage. WARNING: There is general 60s delay for the configuration and
// policy propagation, therefore callers MUST NOT depend on the `Check` method
// having the latest policy information. NOTE: the CheckRequest has the size
// limit (wire-format byte size) of 1MB. This method requires the
// `servicemanagement.services.check` permission on the specified service. For
// more information, see Cloud IAM (https://cloud.google.com/iam).
//
//   - serviceName: The service name as specified in its service configuration.
//     For example, "pubsub.googleapis.com". See google.api.Service
//     (https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
//     for the definition of a service name.
func (r *ServicesService) Check(serviceName string, checkrequest *CheckRequest) *ServicesCheckCall {
	c := &ServicesCheckCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.serviceName = serviceName
	c.checkrequest = checkrequest
	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 *ServicesCheckCall) Fields(s ...googleapi.Field) *ServicesCheckCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesCheckCall) Context(ctx context.Context) *ServicesCheckCall {
	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 *ServicesCheckCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesCheckCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.checkrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:check")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"serviceName": c.serviceName,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "servicecontrol.services.check", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "servicecontrol.services.check" call.
// Any non-2xx status code is an error. Response headers are in either
// *CheckResponse.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 *ServicesCheckCall) Do(opts ...googleapi.CallOption) (*CheckResponse, 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 := &CheckResponse{
		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", "servicecontrol.services.check", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesReportCall struct {
	s             *Service
	serviceName   string
	reportrequest *ReportRequest
	urlParams_    gensupport.URLParams
	ctx_          context.Context
	header_       http.Header
}

// Report: Reports operation results to Google Service Control, such as logs
// and metrics. It should be called after an operation is completed. If
// feasible, the client should aggregate reporting data for up to 5 seconds to
// reduce API traffic. Limiting aggregation to 5 seconds is to reduce data loss
// during client crashes. Clients should carefully choose the aggregation time
// window to avoid data loss risk more than 0.01% for business and compliance
// reasons. NOTE: the ReportRequest has the size limit (wire-format byte size)
// of 1MB. This method requires the `servicemanagement.services.report`
// permission on the specified service. For more information, see Google Cloud
// IAM (https://cloud.google.com/iam).
//
//   - serviceName: The service name as specified in its service configuration.
//     For example, "pubsub.googleapis.com". See google.api.Service
//     (https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
//     for the definition of a service name.
func (r *ServicesService) Report(serviceName string, reportrequest *ReportRequest) *ServicesReportCall {
	c := &ServicesReportCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.serviceName = serviceName
	c.reportrequest = reportrequest
	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 *ServicesReportCall) Fields(s ...googleapi.Field) *ServicesReportCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesReportCall) Context(ctx context.Context) *ServicesReportCall {
	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 *ServicesReportCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesReportCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.reportrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:report")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"serviceName": c.serviceName,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "servicecontrol.services.report", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "servicecontrol.services.report" call.
// Any non-2xx status code is an error. Response headers are in either
// *ReportResponse.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 *ServicesReportCall) Do(opts ...googleapi.CallOption) (*ReportResponse, 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 := &ReportResponse{
		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", "servicecontrol.services.report", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}
