// Copyright 2026 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 cloudsupport provides access to the Google Cloud Support API.
//
// For product documentation, see: https://cloud.google.com/support/docs/apis
//
// # 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/cloudsupport/v2beta"
//	...
//	ctx := context.Background()
//	cloudsupportService, err := cloudsupport.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	cloudsupportService, err := cloudsupport.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, ...)
//	cloudsupportService, err := cloudsupport.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package cloudsupport // import "google.golang.org/api/cloudsupport/v2beta"

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

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

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	scopesOption := internaloption.WithDefaultScopes(
		"https://www.googleapis.com/auth/cloud-platform",
	)
	// NOTE: prepend, so we don't override user-specified scopes.
	opts = append([]option.ClientOption{scopesOption}, opts...)
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s := &Service{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.CaseClassifications = NewCaseClassificationsService(s)
	s.Cases = NewCasesService(s)
	s.Media = NewMediaService(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

	CaseClassifications *CaseClassificationsService

	Cases *CasesService

	Media *MediaService
}

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

func NewCaseClassificationsService(s *Service) *CaseClassificationsService {
	rs := &CaseClassificationsService{s: s}
	return rs
}

type CaseClassificationsService struct {
	s *Service
}

func NewCasesService(s *Service) *CasesService {
	rs := &CasesService{s: s}
	rs.Attachments = NewCasesAttachmentsService(s)
	rs.Comments = NewCasesCommentsService(s)
	return rs
}

type CasesService struct {
	s *Service

	Attachments *CasesAttachmentsService

	Comments *CasesCommentsService
}

func NewCasesAttachmentsService(s *Service) *CasesAttachmentsService {
	rs := &CasesAttachmentsService{s: s}
	return rs
}

type CasesAttachmentsService struct {
	s *Service
}

func NewCasesCommentsService(s *Service) *CasesCommentsService {
	rs := &CasesCommentsService{s: s}
	return rs
}

type CasesCommentsService struct {
	s *Service
}

func NewMediaService(s *Service) *MediaService {
	rs := &MediaService{s: s}
	return rs
}

type MediaService struct {
	s *Service
}

// Actor: An Actor represents an entity that performed an action. For example,
// an actor could be a user who posted a comment on a support case, a user who
// uploaded an attachment, or a service account that created a support case.
type Actor struct {
	// DisplayName: The name to display for the actor. If not provided, it is
	// inferred from credentials supplied during case creation. When an email is
	// provided, a display name must also be provided. This will be obfuscated if
	// the user is a Google Support agent.
	DisplayName string `json:"displayName,omitempty"`
	// Email: The email address of the actor. If not provided, it is inferred from
	// the credentials supplied during case creation. When a name is provided, an
	// email must also be provided. If the user is a Google Support agent, this is
	// obfuscated. This field is deprecated. Use `username` instead.
	Email string `json:"email,omitempty"`
	// GoogleSupport: Output only. Whether the actor is a Google support actor.
	GoogleSupport bool `json:"googleSupport,omitempty"`
	// Username: Output only. The username of the actor. It may look like an email
	// or other format provided by the identity provider. If not provided, it is
	// inferred from the credentials supplied. When a name is provided, a username
	// must also be provided. If the user is a Google Support agent, this will not
	// be set.
	Username string `json:"username,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") 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. "DisplayName") 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 Actor) MarshalJSON() ([]byte, error) {
	type NoMethod Actor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Attachment: An Attachment contains metadata about a file that was uploaded
// to a case - it is NOT a file itself. That being said, the name of an
// Attachment object can be used to download its accompanying file through the
// `media.download` endpoint. While attachments can be uploaded in the console
// at the same time as a comment, they're associated on a "case" level, not a
// "comment" level.
type Attachment struct {
	// CreateTime: Output only. The time at which the attachment was created.
	CreateTime string `json:"createTime,omitempty"`
	// Creator: Output only. The user who uploaded the attachment. Note, the name
	// and email will be obfuscated if the attachment was uploaded by Google
	// support.
	Creator *Actor `json:"creator,omitempty"`
	// Filename: The filename of the attachment (e.g. "graph.jpg").
	Filename string `json:"filename,omitempty"`
	// MimeType: Output only. The MIME type of the attachment (e.g. text/plain).
	MimeType string `json:"mimeType,omitempty"`
	// Name: Output only. Identifier. The resource name of the attachment.
	Name string `json:"name,omitempty"`
	// SizeBytes: Output only. The size of the attachment in bytes.
	SizeBytes int64 `json:"sizeBytes,omitempty,string"`

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

// Blobstore2Info: # gdata.* are outside protos with mising documentation
type Blobstore2Info struct {
	// BlobGeneration: # gdata.* are outside protos with mising documentation
	BlobGeneration int64 `json:"blobGeneration,omitempty,string"`
	// BlobId: # gdata.* are outside protos with mising documentation
	BlobId string `json:"blobId,omitempty"`
	// DownloadExternalReadToken: # gdata.* are outside protos with mising
	// documentation
	DownloadExternalReadToken string `json:"downloadExternalReadToken,omitempty"`
	// DownloadReadHandle: # gdata.* are outside protos with mising documentation
	DownloadReadHandle string `json:"downloadReadHandle,omitempty"`
	// ReadToken: # gdata.* are outside protos with mising documentation
	ReadToken string `json:"readToken,omitempty"`
	// UploadFragmentListCreationInfo: # gdata.* are outside protos with mising
	// documentation
	UploadFragmentListCreationInfo string `json:"uploadFragmentListCreationInfo,omitempty"`
	// UploadMetadataContainer: # gdata.* are outside protos with mising
	// documentation
	UploadMetadataContainer string `json:"uploadMetadataContainer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BlobGeneration") 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. "BlobGeneration") 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 Blobstore2Info) MarshalJSON() ([]byte, error) {
	type NoMethod Blobstore2Info
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Case: A Case is an object that contains the details of a support case. It
// contains fields for the time it was created, its priority, its
// classification, and more. Cases can also have comments and attachments that
// get added over time. A case is parented by a Google Cloud organization or
// project. Organizations are identified by a number, so the name of a case
// parented by an organization would look like this: ```
// organizations/123/cases/456 ``` Projects have two unique identifiers, an ID
// and a number, and they look like this: ``` projects/abc/cases/456 ``` ```
// projects/123/cases/456 ``` You can use either of them when calling the API.
// To learn more about project identifiers, see AIP-2510
// (https://google.aip.dev/cloud/2510).
type Case struct {
	// Classification: The issue classification applicable to this case.
	Classification *CaseClassification `json:"classification,omitempty"`
	// ContactEmail: A user-supplied email address to send case update
	// notifications for. This should only be used in BYOID flows, where we cannot
	// infer the user's email address directly from their EUCs.
	ContactEmail string `json:"contactEmail,omitempty"`
	// CreateTime: Output only. The time this case was created.
	CreateTime string `json:"createTime,omitempty"`
	// Creator: The user who created the case. Note: The name and email will be
	// obfuscated if the case was created by Google Support.
	Creator *Actor `json:"creator,omitempty"`
	// Description: A broad description of the issue.
	Description string `json:"description,omitempty"`
	// DisplayName: The short summary of the issue reported in this case.
	DisplayName string `json:"displayName,omitempty"`
	// Escalated: Whether the case is currently escalated.
	Escalated bool `json:"escalated,omitempty"`
	// LanguageCode: The language the user has requested to receive support in.
	// This should be a BCP 47 language code (e.g., "en", "zh-CN", "zh-TW",
	// "ja", "ko"). If no language or an unsupported language is specified,
	// this field defaults to English (en). Language selection during case creation
	// may affect your available support options. For a list of supported languages
	// and their support working hours, see:
	// https://cloud.google.com/support/docs/language-working-hours
	LanguageCode string `json:"languageCode,omitempty"`
	// Name: Identifier. The resource name for the case.
	Name string `json:"name,omitempty"`
	// Priority: The priority of this case.
	//
	// Possible values:
	//   "PRIORITY_UNSPECIFIED" - Priority is undefined or has not been set yet.
	//   "P0" - Extreme impact on a production service. Service is hard down.
	//   "P1" - Critical impact on a production service. Service is currently
	// unusable.
	//   "P2" - Severe impact on a production service. Service is usable but
	// greatly impaired.
	//   "P3" - Medium impact on a production service. Service is available, but
	// moderately impaired.
	//   "P4" - General questions or minor issues. Production service is fully
	// available.
	Priority string `json:"priority,omitempty"`
	// Severity: REMOVED. The severity of this case. Use priority instead.
	//
	// Possible values:
	//   "SEVERITY_UNSPECIFIED" - Severity is undefined or has not been set yet.
	//   "S0" - Extreme impact on a production service. Service is hard down.
	//   "S1" - Critical impact on a production service. Service is currently
	// unusable.
	//   "S2" - Severe impact on a production service. Service is usable but
	// greatly impaired.
	//   "S3" - Medium impact on a production service. Service is available, but
	// moderately impaired.
	//   "S4" - General questions or minor issues. Production service is fully
	// available.
	Severity string `json:"severity,omitempty"`
	// State: Output only. The current status of the support case.
	//
	// Possible values:
	//   "STATE_UNSPECIFIED" - Case is in an unknown state.
	//   "NEW" - The case has been created but no one is assigned to work on it
	// yet.
	//   "IN_PROGRESS_GOOGLE_SUPPORT" - The case is currently being handled by
	// Google support.
	//   "ACTION_REQUIRED" - Google is waiting for a response.
	//   "SOLUTION_PROVIDED" - A solution has been offered for the case, but it
	// isn't yet closed.
	//   "CLOSED" - The case has been resolved.
	State string `json:"state,omitempty"`
	// SubscriberEmailAddresses: The email addresses to receive updates on this
	// case.
	SubscriberEmailAddresses []string `json:"subscriberEmailAddresses,omitempty"`
	// TestCase: Whether this case was created for internal API testing and should
	// not be acted on by the support team.
	TestCase bool `json:"testCase,omitempty"`
	// TimeZone: The timezone of the user who created the support case. It should
	// be in a format IANA recognizes: https://www.iana.org/time-zones. There is no
	// additional validation done by the API.
	TimeZone string `json:"timeZone,omitempty"`
	// UpdateTime: Output only. The time this case was last updated.
	UpdateTime string `json:"updateTime,omitempty"`

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

// CaseClassification: A Case Classification represents the topic that a case
// is about. It's very important to use accurate classifications, because
// they're used to route your cases to specialists who can help you. A
// classification always has an ID that is its unique identifier. A valid ID is
// required when creating a case.
type CaseClassification struct {
	// DisplayName: A display name for the classification. The display name is not
	// static and can change. To uniquely and consistently identify
	// classifications, use the `CaseClassification.id` field.
	DisplayName string `json:"displayName,omitempty"`
	// Id: The unique ID for a classification. Must be specified for case creation.
	// To retrieve valid classification IDs for case creation, use
	// `caseClassifications.search`. Classification IDs returned by
	// `caseClassifications.search` are guaranteed to be valid for at least 6
	// months. If a given classification is deactiveated, it will immediately stop
	// being returned. After 6 months, `case.create` requests using the
	// classification ID will fail.
	Id string `json:"id,omitempty"`
	// Product: The full product the classification corresponds to.
	Product *Product `json:"product,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") 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. "DisplayName") 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 CaseClassification) MarshalJSON() ([]byte, error) {
	type NoMethod CaseClassification
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CloseCaseRequest: The request message for the CloseCase endpoint.
type CloseCaseRequest struct {
}

// Comment: A comment associated with a support case. Case comments are the
// primary way for Google Support to communicate with a user who has opened a
// case. When a user responds to Google Support, the user's responses also
// appear as comments.
type Comment struct {
	// Body: The full comment body. Maximum of 12800 characters.
	Body string `json:"body,omitempty"`
	// CreateTime: Output only. The time when the comment was created.
	CreateTime string `json:"createTime,omitempty"`
	// Creator: Output only. The user or Google Support agent who created the
	// comment.
	Creator *Actor `json:"creator,omitempty"`
	// Name: Output only. Identifier. The resource name of the comment.
	Name string `json:"name,omitempty"`
	// PlainTextBody: Output only. DEPRECATED. DO NOT USE. A duplicate of the
	// `body` field. This field is only present for legacy reasons.
	PlainTextBody string `json:"plainTextBody,omitempty"`

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

// CompositeMedia: # gdata.* are outside protos with mising documentation
type CompositeMedia struct {
	// BlobRef: # gdata.* are outside protos with mising documentation
	BlobRef string `json:"blobRef,omitempty"`
	// Blobstore2Info: # gdata.* are outside protos with mising documentation
	Blobstore2Info *Blobstore2Info `json:"blobstore2Info,omitempty"`
	// CosmoBinaryReference: # gdata.* are outside protos with mising documentation
	CosmoBinaryReference string `json:"cosmoBinaryReference,omitempty"`
	// Crc32cHash: # gdata.* are outside protos with mising documentation
	Crc32cHash int64 `json:"crc32cHash,omitempty"`
	// Inline: # gdata.* are outside protos with mising documentation
	Inline string `json:"inline,omitempty"`
	// Length: # gdata.* are outside protos with mising documentation
	Length int64 `json:"length,omitempty,string"`
	// Md5Hash: # gdata.* are outside protos with mising documentation
	Md5Hash string `json:"md5Hash,omitempty"`
	// ObjectId: # gdata.* are outside protos with mising documentation
	ObjectId *ObjectId `json:"objectId,omitempty"`
	// Path: # gdata.* are outside protos with mising documentation
	Path string `json:"path,omitempty"`
	// ReferenceType: # gdata.* are outside protos with mising documentation
	//
	// Possible values:
	//   "PATH" - # gdata.* are outside protos with mising documentation
	//   "BLOB_REF" - # gdata.* are outside protos with mising documentation
	//   "INLINE" - # gdata.* are outside protos with mising documentation
	//   "BIGSTORE_REF" - # gdata.* are outside protos with mising documentation
	//   "COSMO_BINARY_REFERENCE" - # gdata.* are outside protos with mising
	// documentation
	ReferenceType string `json:"referenceType,omitempty"`
	// Sha1Hash: # gdata.* are outside protos with mising documentation
	Sha1Hash string `json:"sha1Hash,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BlobRef") 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. "BlobRef") 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 CompositeMedia) MarshalJSON() ([]byte, error) {
	type NoMethod CompositeMedia
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ContentTypeInfo: # gdata.* are outside protos with mising documentation
type ContentTypeInfo struct {
	// BestGuess: # gdata.* are outside protos with mising documentation
	BestGuess string `json:"bestGuess,omitempty"`
	// FromBytes: # gdata.* are outside protos with mising documentation
	FromBytes string `json:"fromBytes,omitempty"`
	// FromFileName: # gdata.* are outside protos with mising documentation
	FromFileName string `json:"fromFileName,omitempty"`
	// FromFusionId: # gdata.* are outside protos with mising documentation
	FromFusionId string `json:"fromFusionId,omitempty"`
	// FromHeader: # gdata.* are outside protos with mising documentation
	FromHeader string `json:"fromHeader,omitempty"`
	// FromUrlPath: # gdata.* are outside protos with mising documentation
	FromUrlPath string `json:"fromUrlPath,omitempty"`
	// FusionIdDetectionMetadata: # gdata.* are outside protos with mising
	// documentation
	FusionIdDetectionMetadata string `json:"fusionIdDetectionMetadata,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BestGuess") 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. "BestGuess") 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 ContentTypeInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ContentTypeInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CreateAttachmentRequest: The request message for the CreateAttachment
// endpoint.
type CreateAttachmentRequest struct {
	// Attachment: Required. The attachment to be created.
	Attachment *Attachment `json:"attachment,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attachment") 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. "Attachment") 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 CreateAttachmentRequest) MarshalJSON() ([]byte, error) {
	type NoMethod CreateAttachmentRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DiffChecksumsResponse: # gdata.* are outside protos with mising
// documentation
type DiffChecksumsResponse struct {
	// ChecksumsLocation: # gdata.* are outside protos with mising documentation
	ChecksumsLocation *CompositeMedia `json:"checksumsLocation,omitempty"`
	// ChunkSizeBytes: # gdata.* are outside protos with mising documentation
	ChunkSizeBytes int64 `json:"chunkSizeBytes,omitempty,string"`
	// ObjectLocation: # gdata.* are outside protos with mising documentation
	ObjectLocation *CompositeMedia `json:"objectLocation,omitempty"`
	// ObjectSizeBytes: # gdata.* are outside protos with mising documentation
	ObjectSizeBytes int64 `json:"objectSizeBytes,omitempty,string"`
	// ObjectVersion: # gdata.* are outside protos with mising documentation
	ObjectVersion string `json:"objectVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ChecksumsLocation") 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. "ChecksumsLocation") 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 DiffChecksumsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod DiffChecksumsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DiffDownloadResponse: # gdata.* are outside protos with mising documentation
type DiffDownloadResponse struct {
	// ObjectLocation: # gdata.* are outside protos with mising documentation
	ObjectLocation *CompositeMedia `json:"objectLocation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ObjectLocation") 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. "ObjectLocation") 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 DiffDownloadResponse) MarshalJSON() ([]byte, error) {
	type NoMethod DiffDownloadResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DiffUploadRequest: # gdata.* are outside protos with mising documentation
type DiffUploadRequest struct {
	// ChecksumsInfo: # gdata.* are outside protos with mising documentation
	ChecksumsInfo *CompositeMedia `json:"checksumsInfo,omitempty"`
	// ObjectInfo: # gdata.* are outside protos with mising documentation
	ObjectInfo *CompositeMedia `json:"objectInfo,omitempty"`
	// ObjectVersion: # gdata.* are outside protos with mising documentation
	ObjectVersion string `json:"objectVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ChecksumsInfo") 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. "ChecksumsInfo") 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 DiffUploadRequest) MarshalJSON() ([]byte, error) {
	type NoMethod DiffUploadRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DiffUploadResponse: # gdata.* are outside protos with mising documentation
type DiffUploadResponse struct {
	// ObjectVersion: # gdata.* are outside protos with mising documentation
	ObjectVersion string `json:"objectVersion,omitempty"`
	// OriginalObject: # gdata.* are outside protos with mising documentation
	OriginalObject *CompositeMedia `json:"originalObject,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ObjectVersion") 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. "ObjectVersion") 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 DiffUploadResponse) MarshalJSON() ([]byte, error) {
	type NoMethod DiffUploadResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DiffVersionResponse: # gdata.* are outside protos with mising documentation
type DiffVersionResponse struct {
	// ObjectSizeBytes: # gdata.* are outside protos with mising documentation
	ObjectSizeBytes int64 `json:"objectSizeBytes,omitempty,string"`
	// ObjectVersion: # gdata.* are outside protos with mising documentation
	ObjectVersion string `json:"objectVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ObjectSizeBytes") 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. "ObjectSizeBytes") 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 DiffVersionResponse) MarshalJSON() ([]byte, error) {
	type NoMethod DiffVersionResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DownloadParameters: # gdata.* are outside protos with mising documentation
type DownloadParameters struct {
	// AllowGzipCompression: # gdata.* are outside protos with mising documentation
	AllowGzipCompression bool `json:"allowGzipCompression,omitempty"`
	// IgnoreRange: # gdata.* are outside protos with mising documentation
	IgnoreRange bool `json:"ignoreRange,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllowGzipCompression") 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. "AllowGzipCompression") 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 DownloadParameters) MarshalJSON() ([]byte, error) {
	type NoMethod DownloadParameters
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// EmailMessage: An email associated with a support case.
type EmailMessage struct {
	// Actor: Output only. The user or Google Support agent that created this email
	// message. This is inferred from the headers on the email message.
	Actor *Actor `json:"actor,omitempty"`
	// BodyContent: Output only. The full email message body. A best-effort attempt
	// is made to remove extraneous reply threads.
	BodyContent *TextContent `json:"bodyContent,omitempty"`
	// CcEmailAddresses: Output only. Email addresses CCed on the email.
	CcEmailAddresses []string `json:"ccEmailAddresses,omitempty"`
	// CreateTime: Output only. Time when this email message object was created.
	CreateTime string `json:"createTime,omitempty"`
	// Name: Identifier. Resource name for the email message.
	Name string `json:"name,omitempty"`
	// RecipientEmailAddresses: Output only. Email addresses the email was sent to.
	RecipientEmailAddresses []string `json:"recipientEmailAddresses,omitempty"`
	// Subject: Output only. Subject of the email.
	Subject string `json:"subject,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Actor") 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. "Actor") 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 EmailMessage) MarshalJSON() ([]byte, error) {
	type NoMethod EmailMessage
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// EscalateCaseRequest: The request message for the EscalateCase endpoint.
type EscalateCaseRequest struct {
	// Escalation: The escalation information to be sent with the escalation
	// request.
	Escalation *Escalation `json:"escalation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Escalation") 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. "Escalation") 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 EscalateCaseRequest) MarshalJSON() ([]byte, error) {
	type NoMethod EscalateCaseRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Escalation: An escalation of a support case.
type Escalation struct {
	// Justification: Required. A free text description to accompany the `reason`
	// field above. Provides additional context on why the case is being escalated.
	Justification string `json:"justification,omitempty"`
	// Reason: Required. The reason why the Case is being escalated.
	//
	// Possible values:
	//   "REASON_UNSPECIFIED" - The escalation reason is in an unknown state or has
	// not been specified.
	//   "RESOLUTION_TIME" - The case is taking too long to resolve.
	//   "TECHNICAL_EXPERTISE" - The support agent does not have the expertise
	// required to successfully resolve the issue.
	//   "BUSINESS_IMPACT" - The issue is having a significant business impact.
	Reason string `json:"reason,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Justification") 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. "Justification") 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 Escalation) MarshalJSON() ([]byte, error) {
	type NoMethod Escalation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// FeedItem: A feed item associated with a support case.
type FeedItem struct {
	// Attachment: Output only. An attachment attached to the case.
	Attachment *Attachment `json:"attachment,omitempty"`
	// Comment: Output only. A comment added to the case.
	Comment *Comment `json:"comment,omitempty"`
	// DeletedAttachment: Output only. A deleted attachment that used to be
	// associated with the support case.
	DeletedAttachment *Attachment `json:"deletedAttachment,omitempty"`
	// EmailMessage: Output only. An email message received in reply to the case.
	EmailMessage *EmailMessage `json:"emailMessage,omitempty"`
	// EventTime: Output only. Time corresponding to the event of this item.
	EventTime string `json:"eventTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attachment") 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. "Attachment") 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 FeedItem) MarshalJSON() ([]byte, error) {
	type NoMethod FeedItem
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListAttachmentsResponse: The response message for the ListAttachments
// endpoint.
type ListAttachmentsResponse struct {
	// Attachments: The list of attachments associated with a case.
	Attachments []*Attachment `json:"attachments,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. Set this in the
	// `page_token` field of subsequent `cases.attachments.list` requests. If
	// unspecified, there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// 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 ListAttachmentsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListAttachmentsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListCasesResponse: The response message for the ListCases endpoint.
type ListCasesResponse struct {
	// Cases: The list of cases associated with the parent after any filters have
	// been applied.
	Cases []*Case `json:"cases,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. Set this in the
	// `page_token` field of subsequent `cases.list` requests. If unspecified,
	// there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

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

// ListCommentsResponse: The response message for the ListComments endpoint.
type ListCommentsResponse struct {
	// Comments: List of the comments associated with the case.
	Comments []*Comment `json:"comments,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. Set this in the
	// `page_token` field of subsequent `cases.comments.list` requests. If
	// unspecified, there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

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

// Media: # gdata.* are outside protos with mising documentation
type Media struct {
	// Algorithm: # gdata.* are outside protos with mising documentation
	Algorithm string `json:"algorithm,omitempty"`
	// BigstoreObjectRef: # gdata.* are outside protos with mising documentation
	BigstoreObjectRef string `json:"bigstoreObjectRef,omitempty"`
	// BlobRef: # gdata.* are outside protos with mising documentation
	BlobRef string `json:"blobRef,omitempty"`
	// Blobstore2Info: # gdata.* are outside protos with mising documentation
	Blobstore2Info *Blobstore2Info `json:"blobstore2Info,omitempty"`
	// CompositeMedia: # gdata.* are outside protos with mising documentation
	CompositeMedia []*CompositeMedia `json:"compositeMedia,omitempty"`
	// ContentType: # gdata.* are outside protos with mising documentation
	ContentType string `json:"contentType,omitempty"`
	// ContentTypeInfo: # gdata.* are outside protos with mising documentation
	ContentTypeInfo *ContentTypeInfo `json:"contentTypeInfo,omitempty"`
	// CosmoBinaryReference: # gdata.* are outside protos with mising documentation
	CosmoBinaryReference string `json:"cosmoBinaryReference,omitempty"`
	// Crc32cHash: # gdata.* are outside protos with mising documentation
	Crc32cHash int64 `json:"crc32cHash,omitempty"`
	// DiffChecksumsResponse: # gdata.* are outside protos with mising
	// documentation
	DiffChecksumsResponse *DiffChecksumsResponse `json:"diffChecksumsResponse,omitempty"`
	// DiffDownloadResponse: # gdata.* are outside protos with mising documentation
	DiffDownloadResponse *DiffDownloadResponse `json:"diffDownloadResponse,omitempty"`
	// DiffUploadRequest: # gdata.* are outside protos with mising documentation
	DiffUploadRequest *DiffUploadRequest `json:"diffUploadRequest,omitempty"`
	// DiffUploadResponse: # gdata.* are outside protos with mising documentation
	DiffUploadResponse *DiffUploadResponse `json:"diffUploadResponse,omitempty"`
	// DiffVersionResponse: # gdata.* are outside protos with mising documentation
	DiffVersionResponse *DiffVersionResponse `json:"diffVersionResponse,omitempty"`
	// DownloadParameters: # gdata.* are outside protos with mising documentation
	DownloadParameters *DownloadParameters `json:"downloadParameters,omitempty"`
	// Filename: # gdata.* are outside protos with mising documentation
	Filename string `json:"filename,omitempty"`
	// Hash: # gdata.* are outside protos with mising documentation
	Hash string `json:"hash,omitempty"`
	// HashVerified: # gdata.* are outside protos with mising documentation
	HashVerified bool `json:"hashVerified,omitempty"`
	// Inline: # gdata.* are outside protos with mising documentation
	Inline string `json:"inline,omitempty"`
	// IsPotentialRetry: # gdata.* are outside protos with mising documentation
	IsPotentialRetry bool `json:"isPotentialRetry,omitempty"`
	// Length: # gdata.* are outside protos with mising documentation
	Length int64 `json:"length,omitempty,string"`
	// Md5Hash: # gdata.* are outside protos with mising documentation
	Md5Hash string `json:"md5Hash,omitempty"`
	// MediaId: # gdata.* are outside protos with mising documentation
	MediaId string `json:"mediaId,omitempty"`
	// ObjectId: # gdata.* are outside protos with mising documentation
	ObjectId *ObjectId `json:"objectId,omitempty"`
	// Path: # gdata.* are outside protos with mising documentation
	Path string `json:"path,omitempty"`
	// ReferenceType: # gdata.* are outside protos with mising documentation
	//
	// Possible values:
	//   "PATH" - # gdata.* are outside protos with mising documentation
	//   "BLOB_REF" - # gdata.* are outside protos with mising documentation
	//   "INLINE" - # gdata.* are outside protos with mising documentation
	//   "GET_MEDIA" - # gdata.* are outside protos with mising documentation
	//   "COMPOSITE_MEDIA" - # gdata.* are outside protos with mising documentation
	//   "BIGSTORE_REF" - # gdata.* are outside protos with mising documentation
	//   "DIFF_VERSION_RESPONSE" - # gdata.* are outside protos with mising
	// documentation
	//   "DIFF_CHECKSUMS_RESPONSE" - # gdata.* are outside protos with mising
	// documentation
	//   "DIFF_DOWNLOAD_RESPONSE" - # gdata.* are outside protos with mising
	// documentation
	//   "DIFF_UPLOAD_REQUEST" - # gdata.* are outside protos with mising
	// documentation
	//   "DIFF_UPLOAD_RESPONSE" - # gdata.* are outside protos with mising
	// documentation
	//   "COSMO_BINARY_REFERENCE" - # gdata.* are outside protos with mising
	// documentation
	//   "ARBITRARY_BYTES" - # gdata.* are outside protos with mising documentation
	ReferenceType string `json:"referenceType,omitempty"`
	// Sha1Hash: # gdata.* are outside protos with mising documentation
	Sha1Hash string `json:"sha1Hash,omitempty"`
	// Sha256Hash: # gdata.* are outside protos with mising documentation
	Sha256Hash string `json:"sha256Hash,omitempty"`
	// Sha512Hash: # gdata.* are outside protos with mising documentation
	Sha512Hash string `json:"sha512Hash,omitempty"`
	// Timestamp: # gdata.* are outside protos with mising documentation
	Timestamp uint64 `json:"timestamp,omitempty,string"`
	// Token: # gdata.* are outside protos with mising documentation
	Token string `json:"token,omitempty"`

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

// ObjectId: # gdata.* are outside protos with mising documentation
type ObjectId struct {
	// BucketName: # gdata.* are outside protos with mising documentation
	BucketName string `json:"bucketName,omitempty"`
	// Generation: # gdata.* are outside protos with mising documentation
	Generation int64 `json:"generation,omitempty,string"`
	// ObjectName: # gdata.* are outside protos with mising documentation
	ObjectName string `json:"objectName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BucketName") 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. "BucketName") 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 ObjectId) MarshalJSON() ([]byte, error) {
	type NoMethod ObjectId
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Product: The product a case may be associated with.
type Product struct {
	// ProductLine: The product line of the Product.
	//
	// Possible values:
	//   "PRODUCT_LINE_UNSPECIFIED" - Unknown product type.
	//   "GOOGLE_CLOUD" - Google Cloud
	//   "GOOGLE_MAPS" - Google Maps
	ProductLine string `json:"productLine,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductLine") 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. "ProductLine") 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 Product) MarshalJSON() ([]byte, error) {
	type NoMethod Product
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SearchCaseClassificationsResponse: The response message for
// SearchCaseClassifications endpoint.
type SearchCaseClassificationsResponse struct {
	// CaseClassifications: The classifications retrieved.
	CaseClassifications []*CaseClassification `json:"caseClassifications,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. Set this in the
	// `page_token` field of subsequent `caseClassifications.list` requests. If
	// unspecified, there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

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

// SearchCasesResponse: The response message for the SearchCases endpoint.
type SearchCasesResponse struct {
	// Cases: The list of cases associated with the parent after any filters have
	// been applied.
	Cases []*Case `json:"cases,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. Set this in the
	// `page_token` field of subsequent `cases.search` requests. If unspecified,
	// there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

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

// ShowFeedResponse: The response message for the ShowFeed endpoint.
type ShowFeedResponse struct {
	// FeedItems: The list of feed items associated with the given Case.
	FeedItems []*FeedItem `json:"feedItems,omitempty"`
	// NextPageToken: A token to retrieve the next page of results. This should be
	// set in the `page_token` field of subsequent `ShowFeedRequests`. If
	// unspecified, there are no more results to retrieve.
	NextPageToken string `json:"nextPageToken,omitempty"`

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

// TextContent: Stores text attached to a support object.
type TextContent struct {
	// PlainText: Content in this field should be rendered and interpreted as-is.
	PlainText string `json:"plainText,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PlainText") 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. "PlainText") 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 TextContent) MarshalJSON() ([]byte, error) {
	type NoMethod TextContent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type CaseClassificationsSearchCall struct {
	s            *Service
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Search: Retrieve valid classifications to use when creating a support case.
// Classifications are hierarchical. Each classification is a string containing
// all levels of the hierarchy separated by " > ". For example, "Technical
// Issue > Compute > Compute Engine". Classification IDs returned by this
// endpoint are valid for at least six months. When a classification is
// deactivated, this endpoint immediately stops returning it. After six months,
// `case.create` requests using the classification will fail. EXAMPLES: cURL:
// ```shell curl \ --header "Authorization: Bearer $(gcloud auth
// print-access-token)" \
// 'https://cloudsupport.googleapis.com/v2beta/caseClassifications:search?query=
// display_name:"*Compute%20Engine*"' ``` Python: ```python import
// googleapiclient.discovery supportApiService =
// googleapiclient.discovery.build( serviceName="cloudsupport",
// version="v2beta",
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion=v2", ) request = supportApiService.caseClassifications().search(
// query='display_name:"*Compute Engine*"' ) print(request.execute()) ```
func (r *CaseClassificationsService) Search() *CaseClassificationsSearchCall {
	c := &CaseClassificationsSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// classifications fetched with each request.
func (c *CaseClassificationsSearchCall) PageSize(pageSize int64) *CaseClassificationsSearchCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, the first page is retrieved.
func (c *CaseClassificationsSearchCall) PageToken(pageToken string) *CaseClassificationsSearchCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ProductProductLine sets the optional parameter "product.productLine": The
// product line of the Product.
//
// Possible values:
//
//	"PRODUCT_LINE_UNSPECIFIED" - Unknown product type.
//	"GOOGLE_CLOUD" - Google Cloud
//	"GOOGLE_MAPS" - Google Maps
func (c *CaseClassificationsSearchCall) ProductProductLine(productProductLine string) *CaseClassificationsSearchCall {
	c.urlParams_.Set("product.productLine", productProductLine)
	return c
}

// Query sets the optional parameter "query": An expression used to filter case
// classifications. If it's an empty string, then no filtering happens.
// Otherwise, case classifications will be returned that match the filter.
func (c *CaseClassificationsSearchCall) Query(query string) *CaseClassificationsSearchCall {
	c.urlParams_.Set("query", query)
	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 *CaseClassificationsSearchCall) Fields(s ...googleapi.Field) *CaseClassificationsSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CaseClassificationsSearchCall) IfNoneMatch(entityTag string) *CaseClassificationsSearchCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CaseClassificationsSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/caseClassifications:search")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.caseClassifications.search", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CaseClassificationsSearchCall) Pages(ctx context.Context, f func(*SearchCaseClassificationsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type CasesCloseCall struct {
	s                *Service
	name             string
	closecaserequest *CloseCaseRequest
	urlParams_       gensupport.URLParams
	ctx_             context.Context
	header_          http.Header
}

// Close: Close a case. EXAMPLES: cURL: ```shell
// case="projects/some-project/cases/43595344" curl \ --request POST \ --header
// "Authorization: Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$case:close" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().close(
// name="projects/some-project/cases/43595344" ) print(request.execute()) ```
//
// - name: The name of the case to close.
func (r *CasesService) Close(name string, closecaserequest *CloseCaseRequest) *CasesCloseCall {
	c := &CasesCloseCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.closecaserequest = closecaserequest
	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 *CasesCloseCall) Fields(s ...googleapi.Field) *CasesCloseCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

func (c *CasesCloseCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.closecaserequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}:close")
	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{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.close", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesCreateCall struct {
	s          *Service
	parent     string
	case_      *Case
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Create a new case and associate it with a parent. It must have the
// following fields set: `display_name`, `description`, `classification`, and
// `priority`. If you're just testing the API and don't want to route your case
// to an agent, set `testCase=true`. EXAMPLES: cURL: ```shell
// parent="projects/some-project" curl \ --request POST \ --header
// "Authorization: Bearer $(gcloud auth print-access-token)" \ --header
// 'Content-Type: application/json' \ --data '{ "display_name": "Test case
// created by me.", "description": "a random test case, feel free to close",
// "classification": { "id":
// "100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN
// 6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8" }, "time_zone": "-07:00",
// "subscriber_email_addresses": [ "foo@domain.com", "bar@domain.com" ],
// "testCase": true, "priority": "P3" }' \
// "https://cloudsupport.googleapis.com/v2beta/$parent/cases" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().create(
// parent="projects/some-project", body={ "displayName": "A Test Case",
// "description": "This is a test case.", "testCase": True, "priority": "P2",
// "classification": { "id":
// "100IK2AKCLHMGRJ9CDGMOCGP8DM6UTB4BT262T31BT1M2T31DHNMENPO6KS36CPJ786L2TBFEHGN
// 6NPI64R3CDHN8880G08I1H3MURR7DHII0GRCDTQM8" }, }, ) print(request.execute())
// ```
//
// - parent: The name of the parent under which the case should be created.
func (r *CasesService) Create(parent string, case_ *Case) *CasesCreateCall {
	c := &CasesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.case_ = case_
	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 *CasesCreateCall) Fields(s ...googleapi.Field) *CasesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

func (c *CasesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.case_)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/cases")
	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{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesEscalateCall struct {
	s                   *Service
	name                string
	escalatecaserequest *EscalateCaseRequest
	urlParams_          gensupport.URLParams
	ctx_                context.Context
	header_             http.Header
}

// Escalate: Escalate a case, starting the Google Cloud Support escalation
// management process. This operation is only available for some support
// services. Go to https://cloud.google.com/support and look for 'Technical
// support escalations' in the feature list to find out which ones let you do
// that. EXAMPLES: cURL: ```shell case="projects/some-project/cases/43595344"
// curl \ --request POST \ --header "Authorization: Bearer $(gcloud auth
// print-access-token)" \ --header "Content-Type: application/json" \ --data '{
// "escalation": { "reason": "BUSINESS_IMPACT", "justification": "This is a
// test escalation." } }' \
// "https://cloudsupport.googleapis.com/v2beta/$case:escalate" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().escalate(
// name="projects/some-project/cases/43595344", body={ "escalation": {
// "reason": "BUSINESS_IMPACT", "justification": "This is a test escalation.",
// }, }, ) print(request.execute()) ```
//
// - name: The name of the case to be escalated.
func (r *CasesService) Escalate(name string, escalatecaserequest *EscalateCaseRequest) *CasesEscalateCall {
	c := &CasesEscalateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.escalatecaserequest = escalatecaserequest
	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 *CasesEscalateCall) Fields(s ...googleapi.Field) *CasesEscalateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

func (c *CasesEscalateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.escalatecaserequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}:escalate")
	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{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.escalate", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Retrieve a case. EXAMPLES: cURL: ```shell
// case="projects/some-project/cases/16033687" curl \ --header "Authorization:
// Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$case" ``` Python: ```python
// import googleapiclient.discovery api_version = "v2beta" supportApiService =
// googleapiclient.discovery.build( serviceName="cloudsupport",
// version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().get(
// name="projects/some-project/cases/43595344", ) print(request.execute()) ```
//
// - name: The full name of a case to be retrieved.
func (r *CasesService) Get(name string) *CasesGetCall {
	c := &CasesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	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 *CasesGetCall) Fields(s ...googleapi.Field) *CasesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesGetCall) IfNoneMatch(entityTag string) *CasesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Retrieve all cases under a parent, but not its children. For example,
// listing cases under an organization only returns the cases that are directly
// parented by that organization. To retrieve cases under an organization and
// its projects, use `cases.search`. EXAMPLES: cURL: ```shell
// parent="projects/some-project" curl \ --header "Authorization: Bearer
// $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$parent/cases" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request =
// supportApiService.cases().list(parent="projects/some-project")
// print(request.execute()) ```
//
// - parent: The name of a parent to list cases under.
func (r *CasesService) List(parent string) *CasesListCall {
	c := &CasesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": An expression used to filter
// cases. If it's an empty string, then no filtering happens. Otherwise, the
// endpoint returns the cases that match the filter. Expressions use the
// following fields separated by `AND` and specified with `=`: - `state`: Can
// be `OPEN` or `CLOSED`. - `priority`: Can be `P0`, `P1`, `P2`, `P3`, or `P4`.
// You can specify multiple values for priority using the `OR` operator. For
// example, `priority=P1 OR priority=P2`. - `creator.email`: The email address
// of the case creator. EXAMPLES: - `state=CLOSED` - `state=OPEN AND
// creator.email="tester@example.com" - `state=OPEN AND (priority=P0 OR
// priority=P1)`
func (c *CasesListCall) Filter(filter string) *CasesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of cases
// fetched with each request. Defaults to 10.
func (c *CasesListCall) PageSize(pageSize int64) *CasesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, the first page is retrieved.
func (c *CasesListCall) PageToken(pageToken string) *CasesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ProductLine sets the optional parameter "productLine": The product line to
// request cases for. If unspecified, only Google Cloud cases will be returned.
//
// Possible values:
//
//	"PRODUCT_LINE_UNSPECIFIED" - Unknown product type.
//	"GOOGLE_CLOUD" - Google Cloud
//	"GOOGLE_MAPS" - Google Maps
func (c *CasesListCall) ProductLine(productLine string) *CasesListCall {
	c.urlParams_.Set("productLine", productLine)
	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 *CasesListCall) Fields(s ...googleapi.Field) *CasesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesListCall) IfNoneMatch(entityTag string) *CasesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/cases")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CasesListCall) Pages(ctx context.Context, f func(*ListCasesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type CasesPatchCall struct {
	s          *Service
	name       string
	case_      *Case
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Patch: Update a case. Only some fields can be updated. EXAMPLES: cURL:
// ```shell case="projects/some-project/cases/43595344" curl \ --request PATCH
// \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \
// --header "Content-Type: application/json" \ --data '{ "priority": "P1" }' \
// "https://cloudsupport.googleapis.com/v2beta/$case?updateMask=priority" ```
// Python: ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().patch(
// name="projects/some-project/cases/43112854", body={ "displayName": "This is
// Now a New Title", "priority": "P2", }, ) print(request.execute()) ```
//
// - name: Identifier. The resource name for the case.
func (r *CasesService) Patch(name string, case_ *Case) *CasesPatchCall {
	c := &CasesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.case_ = case_
	return c
}

// UpdateMask sets the optional parameter "updateMask": A list of attributes of
// the case that should be updated. Supported values are `priority`,
// `display_name`, and `subscriber_email_addresses`. If no fields are
// specified, all supported fields are updated. Be careful - if you do not
// provide a field mask, then you might accidentally clear some fields. For
// example, if you leave the field mask empty and do not provide a value for
// `subscriber_email_addresses`, then `subscriber_email_addresses` is updated
// to empty.
func (c *CasesPatchCall) UpdateMask(updateMask string) *CasesPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	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 *CasesPatchCall) Fields(s ...googleapi.Field) *CasesPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

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

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

type CasesSearchCall struct {
	s            *Service
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Search: Search for cases using a query. EXAMPLES: cURL: ```shell
// parent="projects/some-project" curl \ --header "Authorization: Bearer
// $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$parent/cases:search" ```
// Python: ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().search(
// parent="projects/some-project", query="state=OPEN" )
// print(request.execute()) ```
func (r *CasesService) Search() *CasesSearchCall {
	c := &CasesSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of cases
// fetched with each request. The default page size is 10.
func (c *CasesSearchCall) PageSize(pageSize int64) *CasesSearchCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, the first page is retrieved.
func (c *CasesSearchCall) PageToken(pageToken string) *CasesSearchCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Parent sets the optional parameter "parent": The name of the parent resource
// to search for cases under.
func (c *CasesSearchCall) Parent(parent string) *CasesSearchCall {
	c.urlParams_.Set("parent", parent)
	return c
}

// Query sets the optional parameter "query": An expression used to filter
// cases. Expressions use the following fields separated by `AND` and specified
// with `=`: - `state`: Can be `OPEN` or `CLOSED`. - `priority`: Can be `P0`,
// `P1`, `P2`, `P3`, or `P4`. You can specify multiple values for priority
// using the `OR` operator. For example, `priority=P1 OR priority=P2`. -
// `creator.email`: The email address of the case creator. To search across
// `displayName`, `description`, and comments, use a global restriction with no
// keyword or operator. For example, "my search". To search only cases
// updated after a certain date, use `update_time` restricted with that
// particular date, time, and timezone in ISO datetime format. For example,
// `update_time>"2020-01-01T00:00:00-05:00". `update_time` only supports the
// greater than operator (`>`). If you are using the `v2` version of the API,
// you must specify the case parent in the `parent` field. If you provide an
// empty `query`, all cases under the parent resource will be returned. If you
// are using the `v2beta` version of the API, you must specify the case parent
// in the `query` field using one of the two fields below, which are only
// available for `v2beta`. The `parent` field will be ignored. -
// `organization`: An organization name in the form `organizations/`. -
// `project`: A project name in the form `projects/`. Examples: For `v2`: -
// `state=CLOSED` - `state=OPEN AND creator.email="tester@example.com" -
// `state=OPEN AND (priority=P0 OR priority=P1)` -
// `update_time>"2020-01-01T00:00:00-05:00" For `v2beta`: -
// `organization="organizations/123456789" -
// `project="projects/my-project-id" - `project="projects/123456789" -
// `organization="organizations/123456789" AND state=CLOSED` -
// `project="projects/my-project-id" AND creator.email="tester@example.com" -
// `project="projects/my-project-id" AND (priority=P0 OR priority=P1)`
func (c *CasesSearchCall) Query(query string) *CasesSearchCall {
	c.urlParams_.Set("query", query)
	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 *CasesSearchCall) Fields(s ...googleapi.Field) *CasesSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesSearchCall) IfNoneMatch(entityTag string) *CasesSearchCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/cases:search")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.search", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CasesSearchCall) Pages(ctx context.Context, f func(*SearchCasesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type CasesShowFeedCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// ShowFeed: Show items in the feed of this case, including case emails,
// attachments, and comments.
//
//   - parent: The resource name of the case for which feed items should be
//     listed.
func (r *CasesService) ShowFeed(parent string) *CasesShowFeedCall {
	c := &CasesShowFeedCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// OrderBy sets the optional parameter "orderBy": Field to order feed items by,
// followed by `asc` or `desc` postfix. The only valid field is
// `creation_time`. This list is case-insensitive, default sorting order is
// ascending, and the redundant space characters are insignificant. Example:
// `creation_time desc`
func (c *CasesShowFeedCall) OrderBy(orderBy string) *CasesShowFeedCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of feed
// items fetched with each request.
func (c *CasesShowFeedCall) PageSize(pageSize int64) *CasesShowFeedCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, it retrieves the first page.
func (c *CasesShowFeedCall) PageToken(pageToken string) *CasesShowFeedCall {
	c.urlParams_.Set("pageToken", pageToken)
	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 *CasesShowFeedCall) Fields(s ...googleapi.Field) *CasesShowFeedCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesShowFeedCall) IfNoneMatch(entityTag string) *CasesShowFeedCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesShowFeedCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}:showFeed")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.showFeed", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CasesShowFeedCall) Pages(ctx context.Context, f func(*ShowFeedResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type CasesAttachmentsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Retrieve an attachment associated with a support case. EXAMPLES: cURL:
// ```shell
// attachment="projects/some-project/cases/23598314/attachments/0684M00000P3h1fQ
// AB" curl \ --header "Authorization: Bearer $(gcloud auth
// print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$attachment" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = ( supportApiService.cases() .attachments()
// .get(name="projects/some-project/cases/43595344/attachments/0684M00000P3h1fQA
// B") ) print(request.execute()) ```
//
// - name: The name of the attachment to get.
func (r *CasesAttachmentsService) Get(name string) *CasesAttachmentsGetCall {
	c := &CasesAttachmentsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	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 *CasesAttachmentsGetCall) Fields(s ...googleapi.Field) *CasesAttachmentsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesAttachmentsGetCall) IfNoneMatch(entityTag string) *CasesAttachmentsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesAttachmentsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.attachments.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesAttachmentsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: List all the attachments associated with a support case. EXAMPLES:
// cURL: ```shell case="projects/some-project/cases/23598314" curl \ --header
// "Authorization: Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$case/attachments" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = ( supportApiService.cases() .attachments()
// .list(parent="projects/some-project/cases/43595344") )
// print(request.execute()) ```
//
// - parent: The name of the case for which attachments should be listed.
func (r *CasesAttachmentsService) List(parent string) *CasesAttachmentsListCall {
	c := &CasesAttachmentsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// attachments fetched with each request. If not provided, the default is 10.
// The maximum page size that will be returned is 100. The size of each page
// can be smaller than the requested page size and can include zero. For
// example, you could request 100 attachments on one page, receive 0, and then
// on the next page, receive 90.
func (c *CasesAttachmentsListCall) PageSize(pageSize int64) *CasesAttachmentsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, the first page is retrieved.
func (c *CasesAttachmentsListCall) PageToken(pageToken string) *CasesAttachmentsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	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 *CasesAttachmentsListCall) Fields(s ...googleapi.Field) *CasesAttachmentsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesAttachmentsListCall) IfNoneMatch(entityTag string) *CasesAttachmentsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesAttachmentsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/attachments")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.attachments.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CasesAttachmentsListCall) Pages(ctx context.Context, f func(*ListAttachmentsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type CasesCommentsCreateCall struct {
	s          *Service
	parent     string
	comment    *Comment
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Add a new comment to a case. The comment must have the following
// fields set: `body`. EXAMPLES: cURL: ```shell
// case="projects/some-project/cases/43591344" curl \ --request POST \ --header
// "Authorization: Bearer $(gcloud auth print-access-token)" \ --header
// 'Content-Type: application/json' \ --data '{ "body": "This is a test
// comment." }' \ "https://cloudsupport.googleapis.com/v2beta/$case/comments"
// ``` Python: ```python import googleapiclient.discovery api_version =
// "v2beta" supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = ( supportApiService.cases() .comments()
// .create( parent="projects/some-project/cases/43595344", body={"body": "This
// is a test comment."}, ) ) print(request.execute()) ```
//
// - parent: The name of the case to which the comment should be added.
func (r *CasesCommentsService) Create(parent string, comment *Comment) *CasesCommentsCreateCall {
	c := &CasesCommentsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.comment = comment
	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 *CasesCommentsCreateCall) Fields(s ...googleapi.Field) *CasesCommentsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

func (c *CasesCommentsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.comment)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/comments")
	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{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.comments.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesCommentsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Retrieve a comment. EXAMPLES: cURL: ```shell
// comment="projects/some-project/cases/43595344/comments/234567890" curl \
// --header "Authorization: Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$comment" ``` Python: ```python
// import googleapiclient.discovery api_version = "v2beta" supportApiService =
// googleapiclient.discovery.build( serviceName="cloudsupport",
// version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.cases().comments().get(
// name="projects/some-project/cases/43595344/comments/234567890", )
// print(request.execute()) ```
//
// - name: The name of the comment to retrieve.
func (r *CasesCommentsService) Get(name string) *CasesCommentsGetCall {
	c := &CasesCommentsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	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 *CasesCommentsGetCall) Fields(s ...googleapi.Field) *CasesCommentsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesCommentsGetCall) IfNoneMatch(entityTag string) *CasesCommentsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesCommentsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.comments.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

type CasesCommentsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: List all the comments associated with a case. EXAMPLES: cURL: ```shell
// case="projects/some-project/cases/43595344" curl \ --header "Authorization:
// Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$case/comments" ``` Python:
// ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = ( supportApiService.cases() .comments()
// .list(parent="projects/some-project/cases/43595344") )
// print(request.execute()) ```
//
// - parent: The name of the case for which to list comments.
func (r *CasesCommentsService) List(parent string) *CasesCommentsListCall {
	c := &CasesCommentsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// comments to fetch. Defaults to 10.
func (c *CasesCommentsListCall) PageSize(pageSize int64) *CasesCommentsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A token identifying the
// page of results to return. If unspecified, the first page is returned.
func (c *CasesCommentsListCall) PageToken(pageToken string) *CasesCommentsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	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 *CasesCommentsListCall) Fields(s ...googleapi.Field) *CasesCommentsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *CasesCommentsListCall) IfNoneMatch(entityTag string) *CasesCommentsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *CasesCommentsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/comments")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.cases.comments.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

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

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *CasesCommentsListCall) Pages(ctx context.Context, f func(*ListCommentsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type MediaDownloadCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Download: Download a file attached to a case. When this endpoint is called,
// no "response body" will be returned. Instead, the attachment's blob will be
// returned. Note: HTTP requests must append "?alt=media" to the URL. EXAMPLES:
// cURL: ```shell
// name="projects/some-project/cases/43594844/attachments/0674M00000WijAnZAJ"
// curl \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \
// "https://cloudsupport.googleapis.com/v2beta/$name:download?alt=media" ```
// Python: ```python import googleapiclient.discovery api_version = "v2beta"
// supportApiService = googleapiclient.discovery.build(
// serviceName="cloudsupport", version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) request = supportApiService.media().download(
// name="projects/some-project/cases/43595344/attachments/0684M00000Pw6pHQAR" )
// request.uri = request.uri.split("?")[0] + "?alt=media"
// print(request.execute()) ```
//
// - name: The name of the file attachment to download.
func (r *MediaService) Download(name string) *MediaDownloadCall {
	c := &MediaDownloadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	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 *MediaDownloadCall) Fields(s ...googleapi.Field) *MediaDownloadCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *MediaDownloadCall) IfNoneMatch(entityTag string) *MediaDownloadCall {
	c.ifNoneMatch_ = entityTag
	return c
}

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

func (c *MediaDownloadCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+name}:download")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.media.download", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Download fetches the API endpoint's "media" value, instead of the normal
// API response value. If the returned error is nil, the Response is guaranteed to
// have a 2xx status code. Callers must close the Response.Body as usual.
func (c *MediaDownloadCall) Download(opts ...googleapi.CallOption) (*http.Response, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("media")
	if err != nil {
		return nil, err
	}
	if err := googleapi.CheckResponse(res); err != nil {
		res.Body.Close()
		return nil, gensupport.WrapError(err)
	}
	return res, nil
}

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

type MediaUploadCall struct {
	s                       *Service
	parent                  string
	createattachmentrequest *CreateAttachmentRequest
	urlParams_              gensupport.URLParams
	mediaInfo_              *gensupport.MediaInfo
	ctx_                    context.Context
	header_                 http.Header
}

// Upload: Create a file attachment on a case or Cloud resource. The attachment
// must have the following fields set: `filename`. EXAMPLES: cURL: ```shell
// echo "This text is in a file I'm uploading using CSAPI." \ >
// "./example_file.txt" case="projects/some-project/cases/43594844" curl \
// --header "Authorization: Bearer $(gcloud auth print-access-token)" \
// --data-binary @"./example_file.txt" \
// "https://cloudsupport.googleapis.com/upload/v2beta/$case/attachments?attachme
// nt.filename=uploaded_via_curl.txt" ``` Python: ```python import
// googleapiclient.discovery api_version = "v2beta" supportApiService =
// googleapiclient.discovery.build( serviceName="cloudsupport",
// version=api_version,
// discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?ver
// sion={api_version}", ) file_path = "./example_file.txt" with open(file_path,
// "w") as file: file.write( "This text is inside a file I'm going to upload
// using the Cloud Support API.", ) request = supportApiService.media().upload(
// parent="projects/some-project/cases/43595344", media_body=file_path )
// request.uri = request.uri.split("?")[0] +
// "?attachment.filename=uploaded_via_python.txt" print(request.execute()) ```
//
//   - parent: The name of the case or Cloud resource to which the attachment
//     should be attached.
func (r *MediaService) Upload(parent string, createattachmentrequest *CreateAttachmentRequest) *MediaUploadCall {
	c := &MediaUploadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.createattachmentrequest = createattachmentrequest
	return c
}

// Media specifies the media to upload in one or more chunks. The chunk size
// may be controlled by supplying a MediaOption generated by
// googleapi.ChunkSize. The chunk size defaults to
// googleapi.DefaultUploadChunkSize.The Content-Type header used in the upload
// request will be determined by sniffing the contents of r, unless a
// MediaOption generated by googleapi.ContentType is supplied.
// At most one of Media and ResumableMedia may be set.
func (c *MediaUploadCall) Media(r io.Reader, options ...googleapi.MediaOption) *MediaUploadCall {
	c.mediaInfo_ = gensupport.NewInfoFromMedia(r, options)
	return c
}

// ResumableMedia specifies the media to upload in chunks and can be canceled
// with ctx.
//
// Deprecated: use Media instead.
//
// At most one of Media and ResumableMedia may be set. mediaType identifies the
// MIME media type of the upload, such as "image/png". If mediaType is "", it
// will be auto-detected. The provided ctx will supersede any context
// previously provided to the Context method.
func (c *MediaUploadCall) ResumableMedia(ctx context.Context, r io.ReaderAt, size int64, mediaType string) *MediaUploadCall {
	c.ctx_ = ctx
	c.mediaInfo_ = gensupport.NewInfoFromResumableMedia(r, size, mediaType)
	return c
}

// ProgressUpdater provides a callback function that will be called after every
// chunk. It should be a low-latency function in order to not slow down the
// upload operation. This should only be called when using ResumableMedia (as
// opposed to Media).
func (c *MediaUploadCall) ProgressUpdater(pu googleapi.ProgressUpdater) *MediaUploadCall {
	c.mediaInfo_.SetProgressUpdater(pu)
	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 *MediaUploadCall) Fields(s ...googleapi.Field) *MediaUploadCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

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

func (c *MediaUploadCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.createattachmentrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta/{+parent}/attachments")
	if c.mediaInfo_ != nil {
		urls = googleapi.ResolveRelative(c.s.BasePath, "/upload/v2beta/{+parent}/attachments")
		c.urlParams_.Set("uploadType", c.mediaInfo_.UploadType())
	}
	newBody, getBody, cleanup := c.mediaInfo_.UploadRequest(reqHeaders, body)
	defer cleanup()
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, newBody)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	req.GetBody = getBody
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "cloudsupport.media.upload", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "cloudsupport.media.upload" call.
// Any non-2xx status code is an error. Response headers are in either
// *Attachment.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 *MediaUploadCall) Do(opts ...googleapi.CallOption) (*Attachment, 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)
	}
	rx := c.mediaInfo_.ResumableUpload(res.Header.Get("Location"))
	if rx != nil {
		rx.Client = c.s.client
		rx.UserAgent = c.s.userAgent()
		ctx := c.ctx_
		if ctx == nil {
			ctx = context.TODO()
		}
		res, err = rx.Upload(ctx)
		if err != nil {
			return nil, err
		}
		defer res.Body.Close()
		if err := googleapi.CheckResponse(res); err != nil {
			return nil, gensupport.WrapError(err)
		}
	}
	ret := &Attachment{
		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", "cloudsupport.media.upload", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}
