// Copyright 2023 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 paymentsresellersubscription provides access to the Payments Reseller Subscription API.
//
// For product documentation, see: https://developers.google.com/payments/reseller/subscription/
//
// # 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/paymentsresellersubscription/v1"
//	...
//	ctx := context.Background()
//	paymentsresellersubscriptionService, err := paymentsresellersubscription.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]:
//
//	paymentsresellersubscriptionService, err := paymentsresellersubscription.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, ...)
//	paymentsresellersubscriptionService, err := paymentsresellersubscription.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package paymentsresellersubscription // import "google.golang.org/api/paymentsresellersubscription/v1"

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

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

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

const apiId = "paymentsresellersubscription:v1"
const apiName = "paymentsresellersubscription"
const apiVersion = "v1"
const basePath = "https://paymentsresellersubscription.googleapis.com/"
const mtlsBasePath = "https://paymentsresellersubscription.mtls.googleapis.com/"

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s, err := New(client)
	if err != nil {
		return nil, err
	}
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

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

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

	Partners *PartnersService
}

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

func NewPartnersService(s *Service) *PartnersService {
	rs := &PartnersService{s: s}
	rs.Products = NewPartnersProductsService(s)
	rs.Promotions = NewPartnersPromotionsService(s)
	rs.Subscriptions = NewPartnersSubscriptionsService(s)
	return rs
}

type PartnersService struct {
	s *Service

	Products *PartnersProductsService

	Promotions *PartnersPromotionsService

	Subscriptions *PartnersSubscriptionsService
}

func NewPartnersProductsService(s *Service) *PartnersProductsService {
	rs := &PartnersProductsService{s: s}
	return rs
}

type PartnersProductsService struct {
	s *Service
}

func NewPartnersPromotionsService(s *Service) *PartnersPromotionsService {
	rs := &PartnersPromotionsService{s: s}
	return rs
}

type PartnersPromotionsService struct {
	s *Service
}

func NewPartnersSubscriptionsService(s *Service) *PartnersSubscriptionsService {
	rs := &PartnersSubscriptionsService{s: s}
	return rs
}

type PartnersSubscriptionsService struct {
	s *Service
}

// GoogleCloudPaymentsResellerSubscriptionV1Amount: Describes the amount
// unit including the currency code.
type GoogleCloudPaymentsResellerSubscriptionV1Amount struct {
	// AmountMicros: Required. Amount in micros (1_000_000 micros = 1
	// currency unit)
	AmountMicros int64 `json:"amountMicros,omitempty,string"`

	// CurrencyCode: Required. Currency codes in accordance with [ISO-4217
	// Currency Codes] (https://en.wikipedia.org/wiki/ISO_4217). For
	// example, USD.
	CurrencyCode string `json:"currencyCode,omitempty"`

	// ForceSendFields is a list of field names (e.g. "AmountMicros") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "AmountMicros") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionRequest struct {
	// CancelImmediately: Optional. If true, Google will cancel the
	// subscription immediately, and may or may not (based on the contract)
	// issue a prorated refund for the remainder of the billing cycle.
	// Otherwise, Google defers the cancelation at renewal_time, and will
	// not issue a refund.
	CancelImmediately bool `json:"cancelImmediately,omitempty"`

	// CancellationReason: Specifies the reason for the cancellation.
	//
	// Possible values:
	//   "CANCELLATION_REASON_UNSPECIFIED" - Reason is unspecified.
	//   "CANCELLATION_REASON_FRAUD" - Fraudualant transaction.
	//   "CANCELLATION_REASON_REMORSE" - Buyer's remorse.
	//   "CANCELLATION_REASON_ACCIDENTAL_PURCHASE" - Accidential purchase.
	//   "CANCELLATION_REASON_PAST_DUE" - Payment is past due.
	//   "CANCELLATION_REASON_ACCOUNT_CLOSED" - User account closed.
	//   "CANCELLATION_REASON_UPGRADE_DOWNGRADE" - Used for notification
	// only, do not use in Cancel API. Cancellation due to upgrade or
	// downgrade.
	//   "CANCELLATION_REASON_USER_DELINQUENCY" - Cancellation due to user
	// delinquency
	//   "CANCELLATION_REASON_SYSTEM_ERROR" - Cancellation due to an
	// unrecoverable system error.
	//   "CANCELLATION_REASON_SYSTEM_CANCEL" - Cancellation by a system.
	//   "CANCELLATION_REASON_OTHER" - Other reason.
	CancellationReason string `json:"cancellationReason,omitempty"`

	// ForceSendFields is a list of field names (e.g. "CancelImmediately")
	// to unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "CancelImmediately") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse struct {
	// Subscription: The cancelled subscription resource.
	Subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription `json:"subscription,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "Subscription") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Subscription") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Duration: Describes the
// length of a period of a time.
type GoogleCloudPaymentsResellerSubscriptionV1Duration struct {
	// Count: number of duration units to be included.
	Count int64 `json:"count,omitempty"`

	// Unit: The unit used for the duration
	//
	// Possible values:
	//   "UNIT_UNSPECIFIED" - Default value.
	//   "MONTH" - Unit of a calendar month.
	//   "DAY" - Unit of a day.
	Unit string `json:"unit,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Count") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Count") to include in API
	// requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequest:
// Partner request for entitling the previously provisioned subscription
// to an end user. The end user identity is inferred from the request
// OAuth context.
type GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequest struct {
	// LineItemEntitlementDetails: Optional. The line items to be entitled.
	// If unspecified, all line items will be entitled.
	LineItemEntitlementDetails []*GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequestLineItemEntitlementDetails `json:"lineItemEntitlementDetails,omitempty"`

	// ForceSendFields is a list of field names (e.g.
	// "LineItemEntitlementDetails") to unconditionally include in API
	// requests. By default, fields with empty or default values are omitted
	// from API requests. However, any non-pointer, non-interface field
	// appearing in ForceSendFields will be sent to the server regardless of
	// whether the field is empty or not. This may be used to include empty
	// fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g.
	// "LineItemEntitlementDetails") to include in API requests with the
	// JSON null value. By default, fields with empty values are omitted
	// from API requests. However, any field with an empty value appearing
	// in NullFields will be sent to the server as null. It is an error if a
	// field in this list has a non-empty value. This may be used to include
	// null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequestLin
// eItemEntitlementDetails: The details of the line item to be entitled.
type GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequestLineItemEntitlementDetails struct {
	// LineItemIndex: Required. The index of the line item to be entitled.
	LineItemIndex int64 `json:"lineItemIndex,omitempty"`

	// Products: Optional. Only applicable if the line item corresponds to a
	// hard bundle. Product resource names that identify the bundle elements
	// to be entitled in the line item. If unspecified, all bundle elements
	// will be entitled. The format is
	// 'partners/{partner_id}/products/{product_id}'.
	Products []string `json:"products,omitempty"`

	// ForceSendFields is a list of field names (e.g. "LineItemIndex") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "LineItemIndex") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse struct {
	// Subscription: The subscription that has user linked to it.
	Subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription `json:"subscription,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "Subscription") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Subscription") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionRequest:
// Request message for extending a Subscription resource. A new
// recurrence will be made based on the subscription schedule defined by
// the original product.
type GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionRequest struct {
	// Extension: Required. Specifies details of the extension. Currently,
	// the duration of the extension must be exactly one billing cycle of
	// the original subscription.
	Extension *GoogleCloudPaymentsResellerSubscriptionV1Extension `json:"extension,omitempty"`

	// RequestId: Required. Restricted to 36 ASCII characters. A random UUID
	// is recommended. The idempotency key for the request. The ID
	// generation logic is controlled by the partner. request_id should be
	// the same as on retries of the same request. A different request_id
	// must be used for a extension of a different cycle. A random UUID is
	// recommended.
	RequestId string `json:"requestId,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Extension") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Extension") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse struct {
	// CycleEndTime: The time at which the subscription is expected to be
	// extended, in ISO 8061 format. UTC timezone. Example,
	// "cycleEndTime":"2019-08-31T17:28:54.564Z"
	CycleEndTime string `json:"cycleEndTime,omitempty"`

	// FreeTrialEndTime: End of the free trial period, in ISO 8061 format.
	// UTC timezone. Example, "freeTrialEndTime":"2019-08-31T17:28:54.564Z"
	// This time will be set the same as initial subscription creation time
	// if no free trial period is offered to the partner.
	FreeTrialEndTime string `json:"freeTrialEndTime,omitempty"`

	// RenewalTime: Output only. The time at which the subscription is
	// expected to be renewed by Google - a new charge will be incurred and
	// the service entitlement will be renewed. A non-immediate cancellation
	// will take place at this time too, before which, the service
	// entitlement for the end user will remain valid. UTC timezone in ISO
	// 8061 format. For example: "2019-08-31T17:28:54.564Z"
	RenewalTime string `json:"renewalTime,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "CycleEndTime") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "CycleEndTime") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Extension: Describes the
// details of an extension request.
type GoogleCloudPaymentsResellerSubscriptionV1Extension struct {
	// Duration: Specifies the period of access the subscription should
	// grant.
	Duration *GoogleCloudPaymentsResellerSubscriptionV1Duration `json:"duration,omitempty"`

	// PartnerUserToken: Required. Identifier of the end-user in partner’s
	// system.
	PartnerUserToken string `json:"partnerUserToken,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Duration") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Duration") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRequest struct {
	// Filter: Optional. Specifies the filters for the promotion results.
	// The syntax is defined in https://google.aip.dev/160 with the
	// following caveats: - Only the following features are supported: -
	// Logical operator `AND` - Comparison operator `=` (no wildcards `*`) -
	// Traversal operator `.` - Has operator `:` (no wildcards `*`) - Only
	// the following fields are supported: - `applicableProducts` -
	// `regionCodes` - `youtubePayload.partnerEligibilityId` -
	// `youtubePayload.postalCode` - Unless explicitly mentioned above,
	// other features are not supported. Example:
	// `applicableProducts:partners/partner1/products/product1 AND
	// regionCodes:US AND youtubePayload.postalCode=94043 AND
	// youtubePayload.partnerEligibilityId=eligibility-id`
	Filter string `json:"filter,omitempty"`

	// PageSize: Optional. The maximum number of promotions to return. The
	// service may return fewer than this value. If unspecified, at most 50
	// products will be returned. The maximum value is 1000; values above
	// 1000 will be coerced to 1000.
	PageSize int64 `json:"pageSize,omitempty"`

	// PageToken: Optional. A page token, received from a previous
	// `ListPromotions` call. Provide this to retrieve the subsequent page.
	// When paginating, all other parameters provided to `ListPromotions`
	// must match the call that provided the page token.
	PageToken string `json:"pageToken,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Filter") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRespons
// e: Response containing the found promotions for the current user.
type GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsResponse struct {
	// NextPageToken: A token, which can be sent as `page_token` to retrieve
	// the next page. If this field is empty, there are no subsequent pages.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// Promotions: The promotions for the current user.
	Promotions []*GoogleCloudPaymentsResellerSubscriptionV1Promotion `json:"promotions,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "NextPageToken") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1FiniteBillingCycleDetails:
// Details for a subscriptiin line item with finite billing cycles.
type GoogleCloudPaymentsResellerSubscriptionV1FiniteBillingCycleDetails struct {
	// BillingCycleCountLimit: Required. The number of a subscription line
	// item billing cycles after which billing will stop automatically.
	BillingCycleCountLimit int64 `json:"billingCycleCountLimit,omitempty,string"`

	// ForceSendFields is a list of field names (e.g.
	// "BillingCycleCountLimit") to unconditionally include in API requests.
	// By default, fields with empty or default values are omitted from API
	// requests. However, any non-pointer, non-interface field appearing in
	// ForceSendFields will be sent to the server regardless of whether the
	// field is empty or not. This may be used to include empty fields in
	// Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "BillingCycleCountLimit")
	// to include in API requests with the JSON null value. By default,
	// fields with empty values are omitted from API requests. However, any
	// field with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1GoogleOnePayload: Payload
// specific to Google One products.
type GoogleCloudPaymentsResellerSubscriptionV1GoogleOnePayload struct {
	// Campaigns: Campaign attributed to sales of this subscription.
	Campaigns []string `json:"campaigns,omitempty"`

	// Offering: The type of offering the subscription was sold by the
	// partner. e.g. VAS.
	//
	// Possible values:
	//   "OFFERING_UNSPECIFIED" - The type of partner offering is
	// unspecified.
	//   "OFFERING_VAS_BUNDLE" - Google One product purchased as a Value
	// added service in addition to existing partner's products. Customer
	// pays additional amount for Google One product.
	//   "OFFERING_VAS_STANDALONE" - Google One product purchased by itself
	// by customer as a value add service. Customer pays additional amount
	// for Google One product.
	//   "OFFERING_HARD_BUNDLE" - Product purchased as part of a hard bundle
	// where Google One was included with the bundle. Google One pricing is
	// included in the bundle.
	//   "OFFERING_SOFT_BUNDLE" - Purchased as part of a bundle where Google
	// One was provided as an option. Google One pricing is included in the
	// bundle.
	Offering string `json:"offering,omitempty"`

	// SalesChannel: The type of sales channel through which the
	// subscription was sold.
	//
	// Possible values:
	//   "CHANNEL_UNSPECIFIED" - The channel type is unspecified.
	//   "CHANNEL_RETAIL" - Sold at store.
	//   "CHANNEL_ONLINE_WEB" - Sold through partner website.
	//   "CHANNEL_ONLINE_ANDROID_APP" - Sold through partner android app.
	//   "CHANNEL_ONLINE_IOS_APP" - Sold through partner iOS app.
	SalesChannel string `json:"salesChannel,omitempty"`

	// StoreId: The identifier for the partner store where the subscription
	// was sold.
	StoreId string `json:"storeId,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Campaigns") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Campaigns") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse struct {
	// NextPageToken: A token, which can be sent as `page_token` to retrieve
	// the next page. If this field is empty, there are no subsequent pages.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// Products: The products for the specified partner.
	Products []*GoogleCloudPaymentsResellerSubscriptionV1Product `json:"products,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "NextPageToken") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

type GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse struct {
	// NextPageToken: A token, which can be sent as `page_token` to retrieve
	// the next page. If this field is empty, there are no subsequent pages.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// Promotions: The promotions for the specified partner.
	Promotions []*GoogleCloudPaymentsResellerSubscriptionV1Promotion `json:"promotions,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "NextPageToken") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Location: Describes a
// location of an end user.
type GoogleCloudPaymentsResellerSubscriptionV1Location struct {
	// PostalCode: The postal code this location refers to. Ex. "94043"
	PostalCode string `json:"postalCode,omitempty"`

	// RegionCode: 2-letter ISO region code for current content region. Ex.
	// “US” Please refers to: https://en.wikipedia.org/wiki/ISO_3166-1
	RegionCode string `json:"regionCode,omitempty"`

	// ForceSendFields is a list of field names (e.g. "PostalCode") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "PostalCode") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Product: A Product resource
// that defines a subscription service that can be resold.
type GoogleCloudPaymentsResellerSubscriptionV1Product struct {
	// BundleDetails: Output only. Output Only. Specifies the details for a
	// bundle product.
	BundleDetails *ProductBundleDetails `json:"bundleDetails,omitempty"`

	// FiniteBillingCycleDetails: Optional. Details for a subscription line
	// item with finite billing cycles. If unset, the line item will be
	// charged indefinitely.
	FiniteBillingCycleDetails *GoogleCloudPaymentsResellerSubscriptionV1FiniteBillingCycleDetails `json:"finiteBillingCycleDetails,omitempty"`

	// Name: Output only. Response only. Resource name of the product. It
	// will have the format of "partners/{partner_id}/products/{product_id}"
	Name string `json:"name,omitempty"`

	// PriceConfigs: Output only. Price configs for the product in the
	// available regions.
	PriceConfigs []*GoogleCloudPaymentsResellerSubscriptionV1ProductPriceConfig `json:"priceConfigs,omitempty"`

	// ProductType: Output only. Output Only. Specifies the type of the
	// product.
	//
	// Possible values:
	//   "PRODUCT_TYPE_UNSPECIFIED" - Unspecified. It's reserved as an
	// unexpected value, should not be used.
	//   "PRODUCT_TYPE_SUBSCRIPTION" - The product is a subscription.
	//   "PRODUCT_TYPE_BUNDLE_SUBSCRIPTION" - The product is a bundled
	// subscription plan, which includes multiple subscription elements.
	ProductType string `json:"productType,omitempty"`

	// RegionCodes: Output only. 2-letter ISO region code where the product
	// is available in. Ex. "US" Please refers to:
	// https://en.wikipedia.org/wiki/ISO_3166-1
	RegionCodes []string `json:"regionCodes,omitempty"`

	// SubscriptionBillingCycleDuration: Output only. Specifies the length
	// of the billing cycle of the subscription.
	SubscriptionBillingCycleDuration *GoogleCloudPaymentsResellerSubscriptionV1Duration `json:"subscriptionBillingCycleDuration,omitempty"`

	// Titles: Output only. Localized human readable name of the product.
	Titles []*GoogleTypeLocalizedText `json:"titles,omitempty"`

	// ForceSendFields is a list of field names (e.g. "BundleDetails") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "BundleDetails") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1ProductBundleDetailsBundleEle
// ment: The individual product that is included in the bundle.
type GoogleCloudPaymentsResellerSubscriptionV1ProductBundleDetailsBundleElement struct {
	// Product: Required. Output only. Product resource name that identifies
	// the bundle element. The format is
	// 'partners/{partner_id}/products/{product_id}'.
	Product string `json:"product,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Product") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Product") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1ProductPayload: Specifies
// product specific payload.
type GoogleCloudPaymentsResellerSubscriptionV1ProductPayload struct {
	// GoogleOnePayload: Product-specific payloads. Payload specific to
	// Google One products.
	GoogleOnePayload *GoogleCloudPaymentsResellerSubscriptionV1GoogleOnePayload `json:"googleOnePayload,omitempty"`

	// YoutubePayload: Payload specific to Youtube products.
	YoutubePayload *GoogleCloudPaymentsResellerSubscriptionV1YoutubePayload `json:"youtubePayload,omitempty"`

	// ForceSendFields is a list of field names (e.g. "GoogleOnePayload") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "GoogleOnePayload") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1ProductPriceConfig: Configs
// the prices in an available region.
type GoogleCloudPaymentsResellerSubscriptionV1ProductPriceConfig struct {
	// Amount: Output only. The price in the region.
	Amount *GoogleCloudPaymentsResellerSubscriptionV1Amount `json:"amount,omitempty"`

	// RegionCode: Output only. 2-letter ISO region code where the product
	// is available in. Ex. "US".
	RegionCode string `json:"regionCode,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Amount") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Amount") to include in API
	// requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Promotion: A Promotion
// resource that defines a promotion for a subscription that can be
// resold.
type GoogleCloudPaymentsResellerSubscriptionV1Promotion struct {
	// ApplicableProducts: Output only. The product ids this promotion can
	// be applied to.
	ApplicableProducts []string `json:"applicableProducts,omitempty"`

	// EndTime: Optional. Specifies the end time (exclusive) of the period
	// that the promotion is available in. If unset, the promotion is
	// available indefinitely.
	EndTime string `json:"endTime,omitempty"`

	// FreeTrialDuration: Optional. Specifies the duration of the free trial
	// of the subscription when promotion_type is PROMOTION_TYPE_FREE_TRIAL
	FreeTrialDuration *GoogleCloudPaymentsResellerSubscriptionV1Duration `json:"freeTrialDuration,omitempty"`

	// IntroductoryPricingDetails: Optional. Specifies the introductory
	// pricing details when the promotion_type is
	// PROMOTION_TYPE_INTRODUCTORY_PRICING.
	IntroductoryPricingDetails *GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingDetails `json:"introductoryPricingDetails,omitempty"`

	// Name: Output only. Response only. Resource name of the subscription
	// promotion. It will have the format of
	// "partners/{partner_id}/promotion/{promotion_id}"
	Name string `json:"name,omitempty"`

	// PromotionType: Output only. Output Only. Specifies the type of the
	// promotion.
	//
	// Possible values:
	//   "PROMOTION_TYPE_UNSPECIFIED" - The promotion type is unspecified.
	//   "PROMOTION_TYPE_FREE_TRIAL" - The promotion is a free trial.
	//   "PROMOTION_TYPE_INTRODUCTORY_PRICING" - The promotion is a reduced
	// introductory pricing.
	PromotionType string `json:"promotionType,omitempty"`

	// RegionCodes: Output only. 2-letter ISO region code where the
	// promotion is available in. Ex. "US" Please refers to:
	// https://en.wikipedia.org/wiki/ISO_3166-1
	RegionCodes []string `json:"regionCodes,omitempty"`

	// StartTime: Optional. Specifies the start time (inclusive) of the
	// period that the promotion is available in.
	StartTime string `json:"startTime,omitempty"`

	// Titles: Output only. Localized human readable name of the promotion.
	Titles []*GoogleTypeLocalizedText `json:"titles,omitempty"`

	// ForceSendFields is a list of field names (e.g. "ApplicableProducts")
	// to unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "ApplicableProducts") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingD
// etails: The details of a introductory pricing promotion.
type GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingDetails struct {
	// IntroductoryPricingSpecs: Specifies the introductory pricing periods.
	IntroductoryPricingSpecs []*GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingDetailsIntroductoryPricingSpec `json:"introductoryPricingSpecs,omitempty"`

	// ForceSendFields is a list of field names (e.g.
	// "IntroductoryPricingSpecs") to unconditionally include in API
	// requests. By default, fields with empty or default values are omitted
	// from API requests. However, any non-pointer, non-interface field
	// appearing in ForceSendFields will be sent to the server regardless of
	// whether the field is empty or not. This may be used to include empty
	// fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "IntroductoryPricingSpecs")
	// to include in API requests with the JSON null value. By default,
	// fields with empty values are omitted from API requests. However, any
	// field with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingD
// etailsIntroductoryPricingSpec: The duration of an introductory
// pricing promotion.
type GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingDetailsIntroductoryPricingSpec struct {
	// DiscountAmount: Output only. The discount amount. The value is
	// positive.
	DiscountAmount *GoogleCloudPaymentsResellerSubscriptionV1Amount `json:"discountAmount,omitempty"`

	// DiscountRatioMicros: Output only. The discount percentage in micros.
	// For example, 50,000 represents 5%.
	DiscountRatioMicros int64 `json:"discountRatioMicros,omitempty,string"`

	// RecurrenceCount: Output only. Output Only. The duration of an
	// introductory offer in billing cycles.
	RecurrenceCount int64 `json:"recurrenceCount,omitempty"`

	// RegionCode: Output only. 2-letter ISO region code where the product
	// is available in. Ex. "US".
	RegionCode string `json:"regionCode,omitempty"`

	// ForceSendFields is a list of field names (e.g. "DiscountAmount") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "DiscountAmount") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1ServicePeriod: A description
// of what time period or moment in time the product or service is being
// delivered over.
type GoogleCloudPaymentsResellerSubscriptionV1ServicePeriod struct {
	// EndTime: Optional. The end time of the service period. Time is
	// exclusive.
	EndTime string `json:"endTime,omitempty"`

	// StartTime: Required. The start time of the service period. Time is
	// inclusive.
	StartTime string `json:"startTime,omitempty"`

	// ForceSendFields is a list of field names (e.g. "EndTime") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "EndTime") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1Subscription: A Subscription
// resource managed by 3P Partners.
type GoogleCloudPaymentsResellerSubscriptionV1Subscription struct {
	// CancellationDetails: Output only. Describes the details of a
	// cancelled subscription. Only applicable to subscription of state
	// `STATE_CANCELLED`.
	CancellationDetails *GoogleCloudPaymentsResellerSubscriptionV1SubscriptionCancellationDetails `json:"cancellationDetails,omitempty"`

	// CreateTime: Output only. System generated timestamp when the
	// subscription is created. UTC timezone.
	CreateTime string `json:"createTime,omitempty"`

	// CycleEndTime: Output only. The time at which the subscription is
	// expected to be extended, in ISO 8061 format. UTC timezone. For
	// example: "2019-08-31T17:28:54.564Z"
	CycleEndTime string `json:"cycleEndTime,omitempty"`

	// EndUserEntitled: Output only. Indicates if the subscription is
	// entitled to the end user.
	EndUserEntitled bool `json:"endUserEntitled,omitempty"`

	// FreeTrialEndTime: Output only. End of the free trial period, in ISO
	// 8061 format. For example, "2019-08-31T17:28:54.564Z". It will be set
	// the same as createTime if no free trial promotion is specified.
	FreeTrialEndTime string `json:"freeTrialEndTime,omitempty"`

	// LineItems: Required. The line items of the subscription.
	LineItems []*GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItem `json:"lineItems,omitempty"`

	// Name: Optional. Resource name of the subscription. It will have the
	// format of "partners/{partner_id}/subscriptions/{subscription_id}".
	// This is available for authorizeAddon, but otherwise is response only.
	Name string `json:"name,omitempty"`

	// PartnerUserToken: Required. Identifier of the end-user in partner’s
	// system. The value is restricted to 63 ASCII characters at the
	// maximum.
	PartnerUserToken string `json:"partnerUserToken,omitempty"`

	// ProcessingState: Output only. Describes the processing state of the
	// subscription. See more details at the lifecycle of a subscription
	// (/payments/reseller/subscription/reference/index/Receive.Notifications
	// #payments-subscription-lifecycle).
	//
	// Possible values:
	//   "PROCESSING_STATE_UNSPECIFIED" - The processing state is
	// unspecified.
	//   "PROCESSING_STATE_CANCELLING" - The subscription is being
	// cancelled.
	//   "PROCESSING_STATE_RECURRING" - The subscription is recurring.
	ProcessingState string `json:"processingState,omitempty"`

	// Products: Optional. Deprecated: consider using `line_items` as the
	// input. Required. Resource name that identifies the purchased
	// products. The format will be
	// 'partners/{partner_id}/products/{product_id}'.
	Products []string `json:"products,omitempty"`

	// PromotionSpecs: Optional. Subscription-level promotions. Only free
	// trial is supported on this level. It determines the first renewal
	// time of the subscription to be the end of the free trial period.
	// Specify the promotion resource name only when used as input.
	PromotionSpecs []*GoogleCloudPaymentsResellerSubscriptionV1SubscriptionPromotionSpec `json:"promotionSpecs,omitempty"`

	// Promotions: Optional. Deprecated: consider using the top-level
	// `promotion_specs` as the input. Optional. Resource name that
	// identifies one or more promotions that can be applied on the product.
	// A typical promotion for a subscription is Free trial. The format will
	// be 'partners/{partner_id}/promotions/{promotion_id}'.
	Promotions []string `json:"promotions,omitempty"`

	// RedirectUri: Output only. The place where partners should redirect
	// the end-user to after creation. This field might also be populated
	// when creation failed. However, Partners should always prepare a
	// default URL to redirect the user in case this field is empty.
	RedirectUri string `json:"redirectUri,omitempty"`

	// RenewalTime: Output only. The time at which the subscription is
	// expected to be renewed by Google - a new charge will be incurred and
	// the service entitlement will be renewed. A non-immediate cancellation
	// will take place at this time too, before which, the service
	// entitlement for the end user will remain valid. UTC timezone in ISO
	// 8061 format. For example: "2019-08-31T17:28:54.564Z"
	RenewalTime string `json:"renewalTime,omitempty"`

	// ServiceLocation: Required. The location that the service is provided
	// as indicated by the partner.
	ServiceLocation *GoogleCloudPaymentsResellerSubscriptionV1Location `json:"serviceLocation,omitempty"`

	// State: Output only. Describes the state of the subscription. See more
	// details at the lifecycle of a subscription
	// (/payments/reseller/subscription/reference/index/Receive.Notifications
	// #payments-subscription-lifecycle).
	//
	// Possible values:
	//   "STATE_UNSPECIFIED" - The state is unspecified.
	//   "STATE_CREATED" - The subscription is created, a state before it is
	// moved to STATE_ACTIVE.
	//   "STATE_ACTIVE" - The subscription is active.
	//   "STATE_CANCELLED" - The subscription is cancelled. This is the
	// final state of the subscription, as it can no longer be modified or
	// reactivated.
	//   "STATE_IN_GRACE_PERIOD" - The subscription is in grace period. It
	// can happen: 1) in manual extend mode, the subscription is not
	// extended by the partner at the end of current cycle. 2) for outbound
	// authorization enabled partners, a renewal purchase order is rejected.
	//   "STATE_CANCEL_AT_END_OF_CYCLE" - The subscription is waiting to be
	// cancelled by the next recurrence cycle.
	//   "STATE_SUSPENDED" - The subscription is suspended.
	State string `json:"state,omitempty"`

	// UpdateTime: Output only. System generated timestamp when the
	// subscription is most recently updated. UTC timezone.
	UpdateTime string `json:"updateTime,omitempty"`

	// UpgradeDowngradeDetails: Optional. Details about the previous
	// subscription that this new subscription upgrades/downgrades from.
	// Only populated if this subscription is an upgrade/downgrade from
	// another subscription.
	UpgradeDowngradeDetails *GoogleCloudPaymentsResellerSubscriptionV1SubscriptionUpgradeDowngradeDetails `json:"upgradeDowngradeDetails,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "CancellationDetails")
	// to unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "CancellationDetails") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionCancellationDetai
// ls: Describes the details of a cancelled or cancelling subscription.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionCancellationDetails struct {
	// Reason: The reason of the cancellation.
	//
	// Possible values:
	//   "CANCELLATION_REASON_UNSPECIFIED" - Reason is unspecified.
	//   "CANCELLATION_REASON_FRAUD" - Fraudualant transaction.
	//   "CANCELLATION_REASON_REMORSE" - Buyer's remorse.
	//   "CANCELLATION_REASON_ACCIDENTAL_PURCHASE" - Accidential purchase.
	//   "CANCELLATION_REASON_PAST_DUE" - Payment is past due.
	//   "CANCELLATION_REASON_ACCOUNT_CLOSED" - User account closed.
	//   "CANCELLATION_REASON_UPGRADE_DOWNGRADE" - Used for notification
	// only, do not use in Cancel API. Cancellation due to upgrade or
	// downgrade.
	//   "CANCELLATION_REASON_USER_DELINQUENCY" - Cancellation due to user
	// delinquency
	//   "CANCELLATION_REASON_SYSTEM_ERROR" - Cancellation due to an
	// unrecoverable system error.
	//   "CANCELLATION_REASON_SYSTEM_CANCEL" - Cancellation by a system.
	//   "CANCELLATION_REASON_OTHER" - Other reason.
	Reason string `json:"reason,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Reason") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Reason") to include in API
	// requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItem:
// Individual line item definition of a subscription.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItem struct {
	// Amount: Output only. The price of the product/service in this line
	// item. The amount could be the wholesale price, or it can include a
	// cost of sale based on the contract.
	Amount *GoogleCloudPaymentsResellerSubscriptionV1Amount `json:"amount,omitempty"`

	// BundleDetails: Output only. The bundle details for the line item.
	// Only populated if the line item corresponds to a hard bundle.
	BundleDetails *SubscriptionLineItemBundleDetails `json:"bundleDetails,omitempty"`

	// Description: Output only. Description of this line item.
	Description string `json:"description,omitempty"`

	// FiniteBillingCycleDetails: Optional. Details for a subscription line
	// item with finite billing cycles. If unset, the line item will be
	// charged indefinitely. Used only with
	// LINE_ITEM_RECURRENCE_TYPE_PERIODIC.
	FiniteBillingCycleDetails *GoogleCloudPaymentsResellerSubscriptionV1FiniteBillingCycleDetails `json:"finiteBillingCycleDetails,omitempty"`

	// LineItemFreeTrialEndTime: Output only. The free trial end time will
	// be populated after the line item is successfully processed. End time
	// of the line item free trial period, in ISO 8061 format. For example,
	// "2019-08-31T17:28:54.564Z". It will be set the same as createTime if
	// no free trial promotion is specified.
	LineItemFreeTrialEndTime string `json:"lineItemFreeTrialEndTime,omitempty"`

	// LineItemIndex: Output only. A unique index of the subscription line
	// item.
	LineItemIndex int64 `json:"lineItemIndex,omitempty"`

	// LineItemPromotionSpecs: Optional. The promotions applied on the line
	// item. It can be: - a free trial promotion, which overrides the
	// subscription-level free trial promotion. - an introductory pricing
	// promotion. When used as input in Create or Provision API, specify its
	// resource name only.
	LineItemPromotionSpecs []*GoogleCloudPaymentsResellerSubscriptionV1SubscriptionPromotionSpec `json:"lineItemPromotionSpecs,omitempty"`

	// OneTimeRecurrenceDetails: Output only. Details only set for a
	// ONE_TIME recurrence line item.
	OneTimeRecurrenceDetails *GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemOneTimeRecurrenceDetails `json:"oneTimeRecurrenceDetails,omitempty"`

	// Product: Required. Product resource name that identifies one the line
	// item The format is 'partners/{partner_id}/products/{product_id}'.
	Product string `json:"product,omitempty"`

	// ProductPayload: Optional. Product specific payload for this line
	// item.
	ProductPayload *GoogleCloudPaymentsResellerSubscriptionV1ProductPayload `json:"productPayload,omitempty"`

	// RecurrenceType: Output only. The recurrence type of the line item.
	//
	// Possible values:
	//   "LINE_ITEM_RECURRENCE_TYPE_UNSPECIFIED" - The line item recurrence
	// type is unspecified.
	//   "LINE_ITEM_RECURRENCE_TYPE_PERIODIC" - The line item recurs
	// periodically.
	//   "LINE_ITEM_RECURRENCE_TYPE_ONE_TIME" - The line item does not recur
	// in the future.
	RecurrenceType string `json:"recurrenceType,omitempty"`

	// State: Output only. The state of the line item.
	//
	// Possible values:
	//   "LINE_ITEM_STATE_UNSPECIFIED" - Unspecified state.
	//   "LINE_ITEM_STATE_ACTIVE" - The line item is in ACTIVE state. If the
	// subscription is cancelled or suspended, the line item will not be
	// charged even if the line item is active.
	//   "LINE_ITEM_STATE_INACTIVE" - The line item is in INACTIVE state.
	//   "LINE_ITEM_STATE_NEW" - The line item is new, and is not activated
	// or charged yet.
	//   "LINE_ITEM_STATE_ACTIVATING" - The line item is being activated in
	// order to be charged. If a free trial applies to the line item, the
	// line item is pending a prorated charge at the end of the free trial
	// period, as indicated by `line_item_free_trial_end_time`.
	//   "LINE_ITEM_STATE_DEACTIVATING" - The line item is being
	// deactivated, and a prorated refund in being processed.
	//   "LINE_ITEM_STATE_WAITING_TO_DEACTIVATE" - The line item is
	// scheduled to be deactivated at the end of the current cycle.
	//   "LINE_ITEM_STATE_OFF_CYCLE_CHARGING" - Line item is being charged
	// off-cycle.
	State string `json:"state,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Amount") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Amount") to include in API
	// requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemBundleDet
// ailsBundleElementDetails: The details for an element in the hard
// bundle.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemBundleDetailsBundleElementDetails struct {
	// Product: Output only. Product resource name that identifies the
	// bundle element. The format is
	// 'partners/{partner_id}/products/{product_id}'.
	Product string `json:"product,omitempty"`

	// UserAccountLinkedTime: Output only. The time when this product is
	// linked to an end user.
	UserAccountLinkedTime string `json:"userAccountLinkedTime,omitempty"`

	// ForceSendFields is a list of field names (e.g. "Product") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Product") to include in
	// API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. However, any field with an
	// empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemOneTimeRe
// currenceDetails: Details for a ONE_TIME recurrence line item.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemOneTimeRecurrenceDetails struct {
	// ServicePeriod: The service period of the ONE_TIME line item.
	ServicePeriod *GoogleCloudPaymentsResellerSubscriptionV1ServicePeriod `json:"servicePeriod,omitempty"`

	// ForceSendFields is a list of field names (e.g. "ServicePeriod") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "ServicePeriod") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionPromotionSpec:
// Describes the spec for one promotion.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionPromotionSpec struct {
	// FreeTrialDuration: Output only. The duration of the free trial if the
	// promotion is of type FREE_TRIAL.
	FreeTrialDuration *GoogleCloudPaymentsResellerSubscriptionV1Duration `json:"freeTrialDuration,omitempty"`

	// IntroductoryPricingDetails: Output only. The details of the
	// introductory pricing spec if the promotion is of type
	// INTRODUCTORY_PRICING.
	IntroductoryPricingDetails *GoogleCloudPaymentsResellerSubscriptionV1PromotionIntroductoryPricingDetails `json:"introductoryPricingDetails,omitempty"`

	// Promotion: Required. Promotion resource name that identifies a
	// promotion. The format is
	// 'partners/{partner_id}/promotions/{promotion_id}'.
	Promotion string `json:"promotion,omitempty"`

	// Type: Output only. The type of the promotion for the spec.
	//
	// Possible values:
	//   "PROMOTION_TYPE_UNSPECIFIED" - The promotion type is unspecified.
	//   "PROMOTION_TYPE_FREE_TRIAL" - The promotion is a free trial.
	//   "PROMOTION_TYPE_INTRODUCTORY_PRICING" - The promotion is a reduced
	// introductory pricing.
	Type string `json:"type,omitempty"`

	// ForceSendFields is a list of field names (e.g. "FreeTrialDuration")
	// to unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "FreeTrialDuration") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1SubscriptionUpgradeDowngradeD
// etails: Details about the previous subscription that this new
// subscription upgrades/downgrades from.
type GoogleCloudPaymentsResellerSubscriptionV1SubscriptionUpgradeDowngradeDetails struct {
	// BillingCycleSpec: Required. Specifies the billing cycle spec for the
	// new upgraded/downgraded subscription.
	//
	// Possible values:
	//   "BILLING_CYCLE_SPEC_UNSPECIFIED" - Billing cycle spec is not
	// specified.
	//   "BILLING_CYCLE_SPEC_ALIGN_WITH_PREVIOUS_SUBSCRIPTION" - The billing
	// cycle of the new subscription aligns with the previous subscription
	// it upgrades or downgrades from.
	//   "BILLING_CYCLE_SPEC_START_IMMEDIATELY" - The billing cycle of the
	// new subscription starts immediately.
	BillingCycleSpec string `json:"billingCycleSpec,omitempty"`

	// PreviousSubscriptionId: Required. The previous subscription id to be
	// replaced. This is not the full resource name, use the subscription_id
	// segment only.
	PreviousSubscriptionId string `json:"previousSubscriptionId,omitempty"`

	// ForceSendFields is a list of field names (e.g. "BillingCycleSpec") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "BillingCycleSpec") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRequest
// : Request to revoke a cancellation request.
type GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRequest struct {
}

// GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRespons
// e: Response that contains the updated subscription resource.
type GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionResponse struct {
	// Subscription: The updated subscription resource.
	Subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription `json:"subscription,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the
	// server.
	googleapi.ServerResponse `json:"-"`

	// ForceSendFields is a list of field names (e.g. "Subscription") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "Subscription") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleCloudPaymentsResellerSubscriptionV1YoutubePayload: Payload
// specific to Youtube products.
type GoogleCloudPaymentsResellerSubscriptionV1YoutubePayload struct {
	// AccessEndTime: Output only. The access expiration time for this line
	// item.
	AccessEndTime string `json:"accessEndTime,omitempty"`

	// PartnerEligibilityIds: The list of eligibility_ids which are
	// applicable for the line item.
	PartnerEligibilityIds []string `json:"partnerEligibilityIds,omitempty"`

	// ForceSendFields is a list of field names (e.g. "AccessEndTime") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "AccessEndTime") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// GoogleTypeLocalizedText: Localized variant of a text in a particular
// language.
type GoogleTypeLocalizedText struct {
	// LanguageCode: The text's BCP-47 language code, such as "en-US" or
	// "sr-Latn". For more information, see
	// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
	LanguageCode string `json:"languageCode,omitempty"`

	// Text: Localized string in the language corresponding to
	// `language_code' below.
	Text string `json:"text,omitempty"`

	// ForceSendFields is a list of field names (e.g. "LanguageCode") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "LanguageCode") to include
	// in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. However, any field with
	// an empty value appearing in NullFields will be sent to the server as
	// null. It is an error if a field in this list has a non-empty value.
	// This may be used to include null fields in Patch requests.
	NullFields []string `json:"-"`
}

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

// ProductBundleDetails: Details for a bundle product.
type ProductBundleDetails struct {
	// BundleElements: The individual products that are included in the
	// bundle.
	BundleElements []*GoogleCloudPaymentsResellerSubscriptionV1ProductBundleDetailsBundleElement `json:"bundleElements,omitempty"`

	// EntitlementMode: The entitlement mode of the bundle product.
	//
	// Possible values:
	//   "ENTITLEMENT_MODE_UNSPECIFIED" - Unspecified. It's reserved as an
	// unexpected value, should not be used.
	//   "ENTITLEMENT_MODE_FULL" - All the bundle elements must be fully
	// activated in a single request.
	//   "ENTITLEMENT_MODE_INCREMENTAL" - The bundle elements could be
	// incrementally activated.
	EntitlementMode string `json:"entitlementMode,omitempty"`

	// ForceSendFields is a list of field names (e.g. "BundleElements") to
	// unconditionally include in API requests. By default, fields with
	// empty or default values are omitted from API requests. However, any
	// non-pointer, non-interface field appearing in ForceSendFields will be
	// sent to the server regardless of whether the field is empty or not.
	// This may be used to include empty fields in Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "BundleElements") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// SubscriptionLineItemBundleDetails: The bundle details for a line item
// corresponding to a hard bundle.
type SubscriptionLineItemBundleDetails struct {
	// BundleElementDetails: The details for each element in the hard
	// bundle.
	BundleElementDetails []*GoogleCloudPaymentsResellerSubscriptionV1SubscriptionLineItemBundleDetailsBundleElementDetails `json:"bundleElementDetails,omitempty"`

	// ForceSendFields is a list of field names (e.g.
	// "BundleElementDetails") to unconditionally include in API requests.
	// By default, fields with empty or default values are omitted from API
	// requests. However, any non-pointer, non-interface field appearing in
	// ForceSendFields will be sent to the server regardless of whether the
	// field is empty or not. This may be used to include empty fields in
	// Patch requests.
	ForceSendFields []string `json:"-"`

	// NullFields is a list of field names (e.g. "BundleElementDetails") to
	// include in API requests with the JSON null value. By default, fields
	// with empty values are omitted from API requests. However, any field
	// with an empty value appearing in NullFields will be sent to the
	// server as null. It is an error if a field in this list has a
	// non-empty value. This may be used to include null fields in Patch
	// requests.
	NullFields []string `json:"-"`
}

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

// method id "paymentsresellersubscription.partners.products.list":

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

// List: To retrieve the products that can be resold by the partner. It
// should be autenticated with a service account.
//
//   - parent: The parent, the partner that can resell. Format:
//     partners/{partner}.
func (r *PartnersProductsService) List(parent string) *PartnersProductsListCall {
	c := &PartnersProductsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": Specifies the filters
// for the product results. The syntax is defined in
// https://google.aip.dev/160 with the following caveats: - Only the
// following features are supported: - Logical operator `AND` -
// Comparison operator `=` (no wildcards `*`) - Traversal operator `.` -
// Has operator `:` (no wildcards `*`) - Only the following fields are
// supported: - `regionCodes` - `youtubePayload.partnerEligibilityId` -
// `youtubePayload.postalCode` - Unless explicitly mentioned above,
// other features are not supported. Example: `regionCodes:US AND
// youtubePayload.postalCode=94043 AND
// youtubePayload.partnerEligibilityId=eligibility-id`
func (c *PartnersProductsListCall) Filter(filter string) *PartnersProductsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number
// of products to return. The service may return fewer than this value.
// If unspecified, at most 50 products will be returned. The maximum
// value is 1000; values above 1000 will be coerced to 1000.
func (c *PartnersProductsListCall) PageSize(pageSize int64) *PartnersProductsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token,
// received from a previous `ListProducts` call. Provide this to
// retrieve the subsequent page. When paginating, all other parameters
// provided to `ListProducts` must match the call that provided the page
// token.
func (c *PartnersProductsListCall) PageToken(pageToken string) *PartnersProductsListCall {
	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 information.
func (c *PartnersProductsListCall) Fields(s ...googleapi.Field) *PartnersProductsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets the 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. Use googleapi.IsNotModified to check whether the response
// error from Do is the result of In-None-Match.
func (c *PartnersProductsListCall) IfNoneMatch(entityTag string) *PartnersProductsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersProductsListCall) Context(ctx context.Context) *PartnersProductsListCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersProductsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	var body io.Reader = nil
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/products")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.products.list" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse or
// error will be non-nil. Any non-2xx status code is an error. Response
// headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse.ServerR
// esponse.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 *PartnersProductsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "To retrieve the products that can be resold by the partner. It should be autenticated with a service account.",
	//   "flatPath": "v1/partners/{partnersId}/products",
	//   "httpMethod": "GET",
	//   "id": "paymentsresellersubscription.partners.products.list",
	//   "parameterOrder": [
	//     "parent"
	//   ],
	//   "parameters": {
	//     "filter": {
	//       "description": "Optional. Specifies the filters for the product results. The syntax is defined in https://google.aip.dev/160 with the following caveats: - Only the following features are supported: - Logical operator `AND` - Comparison operator `=` (no wildcards `*`) - Traversal operator `.` - Has operator `:` (no wildcards `*`) - Only the following fields are supported: - `regionCodes` - `youtubePayload.partnerEligibilityId` - `youtubePayload.postalCode` - Unless explicitly mentioned above, other features are not supported. Example: `regionCodes:US AND youtubePayload.postalCode=94043 AND youtubePayload.partnerEligibilityId=eligibility-id`",
	//       "location": "query",
	//       "type": "string"
	//     },
	//     "pageSize": {
	//       "description": "Optional. The maximum number of products to return. The service may return fewer than this value. If unspecified, at most 50 products will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
	//       "format": "int32",
	//       "location": "query",
	//       "type": "integer"
	//     },
	//     "pageToken": {
	//       "description": "Optional. A page token, received from a previous `ListProducts` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListProducts` must match the call that provided the page token.",
	//       "location": "query",
	//       "type": "string"
	//     },
	//     "parent": {
	//       "description": "Required. The parent, the partner that can resell. Format: partners/{partner}",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+parent}/products",
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse"
	//   }
	// }

}

// 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 *PartnersProductsListCall) Pages(ctx context.Context, f func(*GoogleCloudPaymentsResellerSubscriptionV1ListProductsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
	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)
	}
}

// method id "paymentsresellersubscription.partners.promotions.findEligible":

type PartnersPromotionsFindEligibleCall struct {
	s                                                                      *Service
	parent                                                                 string
	googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest *GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRequest
	urlParams_                                                             gensupport.URLParams
	ctx_                                                                   context.Context
	header_                                                                http.Header
}

// FindEligible: To find eligible promotions for the current user. The
// API requires user authorization via OAuth. The user is inferred from
// the authenticated OAuth credential.
//
//   - parent: The parent, the partner that can resell. Format:
//     partners/{partner}.
func (r *PartnersPromotionsService) FindEligible(parent string, googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest *GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRequest) *PartnersPromotionsFindEligibleCall {
	c := &PartnersPromotionsFindEligibleCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest = googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersPromotionsFindEligibleCall) Context(ctx context.Context) *PartnersPromotionsFindEligibleCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersPromotionsFindEligibleCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/promotions:findEligible")
	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,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.promotions.findEligible" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRespon
// se or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRespon
// se.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 *PartnersPromotionsFindEligibleCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "To find eligible promotions for the current user. The API requires user authorization via OAuth. The user is inferred from the authenticated OAuth credential.",
	//   "flatPath": "v1/partners/{partnersId}/promotions:findEligible",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.promotions.findEligible",
	//   "parameterOrder": [
	//     "parent"
	//   ],
	//   "parameters": {
	//     "parent": {
	//       "description": "Required. The parent, the partner that can resell. Format: partners/{partner}",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+parent}/promotions:findEligible",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsRequest"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsResponse"
	//   }
	// }

}

// 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 *PartnersPromotionsFindEligibleCall) Pages(ctx context.Context, f func(*GoogleCloudPaymentsResellerSubscriptionV1FindEligiblePromotionsResponse) error) error {
	c.ctx_ = ctx
	defer func(pt string) {
		c.googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest.PageToken = pt
	}(c.googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest.PageToken) // reset paging to original point
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.googlecloudpaymentsresellersubscriptionv1findeligiblepromotionsrequest.PageToken = x.NextPageToken
	}
}

// method id "paymentsresellersubscription.partners.promotions.list":

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

// List: To retrieve the promotions, such as free trial, that can be
// used by the partner. It should be autenticated with a service
// account.
//
//   - parent: The parent, the partner that can resell. Format:
//     partners/{partner}.
func (r *PartnersPromotionsService) List(parent string) *PartnersPromotionsListCall {
	c := &PartnersPromotionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": Specifies the filters
// for the promotion results. The syntax is defined in
// https://google.aip.dev/160 with the following caveats: - Only the
// following features are supported: - Logical operator `AND` -
// Comparison operator `=` (no wildcards `*`) - Traversal operator `.` -
// Has operator `:` (no wildcards `*`) - Only the following fields are
// supported: - `applicableProducts` - `regionCodes` -
// `youtubePayload.partnerEligibilityId` - `youtubePayload.postalCode` -
// Unless explicitly mentioned above, other features are not supported.
// Example: `applicableProducts:partners/partner1/products/product1 AND
// regionCodes:US AND youtubePayload.postalCode=94043 AND
// youtubePayload.partnerEligibilityId=eligibility-id`
func (c *PartnersPromotionsListCall) Filter(filter string) *PartnersPromotionsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number
// of promotions to return. The service may return fewer than this
// value. If unspecified, at most 50 products will be returned. The
// maximum value is 1000; values above 1000 will be coerced to 1000.
func (c *PartnersPromotionsListCall) PageSize(pageSize int64) *PartnersPromotionsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token,
// received from a previous `ListPromotions` call. Provide this to
// retrieve the subsequent page. When paginating, all other parameters
// provided to `ListPromotions` must match the call that provided the
// page token.
func (c *PartnersPromotionsListCall) PageToken(pageToken string) *PartnersPromotionsListCall {
	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 information.
func (c *PartnersPromotionsListCall) Fields(s ...googleapi.Field) *PartnersPromotionsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets the 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. Use googleapi.IsNotModified to check whether the response
// error from Do is the result of In-None-Match.
func (c *PartnersPromotionsListCall) IfNoneMatch(entityTag string) *PartnersPromotionsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersPromotionsListCall) Context(ctx context.Context) *PartnersPromotionsListCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersPromotionsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	var body io.Reader = nil
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/promotions")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.promotions.list" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse or
// error will be non-nil. Any non-2xx status code is an error. Response
// headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse.Serve
// rResponse.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 *PartnersPromotionsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "To retrieve the promotions, such as free trial, that can be used by the partner. It should be autenticated with a service account.",
	//   "flatPath": "v1/partners/{partnersId}/promotions",
	//   "httpMethod": "GET",
	//   "id": "paymentsresellersubscription.partners.promotions.list",
	//   "parameterOrder": [
	//     "parent"
	//   ],
	//   "parameters": {
	//     "filter": {
	//       "description": "Optional. Specifies the filters for the promotion results. The syntax is defined in https://google.aip.dev/160 with the following caveats: - Only the following features are supported: - Logical operator `AND` - Comparison operator `=` (no wildcards `*`) - Traversal operator `.` - Has operator `:` (no wildcards `*`) - Only the following fields are supported: - `applicableProducts` - `regionCodes` - `youtubePayload.partnerEligibilityId` - `youtubePayload.postalCode` - Unless explicitly mentioned above, other features are not supported. Example: `applicableProducts:partners/partner1/products/product1 AND regionCodes:US AND youtubePayload.postalCode=94043 AND youtubePayload.partnerEligibilityId=eligibility-id`",
	//       "location": "query",
	//       "type": "string"
	//     },
	//     "pageSize": {
	//       "description": "Optional. The maximum number of promotions to return. The service may return fewer than this value. If unspecified, at most 50 products will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
	//       "format": "int32",
	//       "location": "query",
	//       "type": "integer"
	//     },
	//     "pageToken": {
	//       "description": "Optional. A page token, received from a previous `ListPromotions` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListPromotions` must match the call that provided the page token.",
	//       "location": "query",
	//       "type": "string"
	//     },
	//     "parent": {
	//       "description": "Required. The parent, the partner that can resell. Format: partners/{partner}",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+parent}/promotions",
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse"
	//   }
	// }

}

// 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 *PartnersPromotionsListCall) Pages(ctx context.Context, f func(*GoogleCloudPaymentsResellerSubscriptionV1ListPromotionsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
	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)
	}
}

// method id "paymentsresellersubscription.partners.subscriptions.cancel":

type PartnersSubscriptionsCancelCall struct {
	s                                                                  *Service
	name                                                               string
	googlecloudpaymentsresellersubscriptionv1cancelsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionRequest
	urlParams_                                                         gensupport.URLParams
	ctx_                                                               context.Context
	header_                                                            http.Header
}

// Cancel: Used by partners to cancel a subscription service either
// immediately or by the end of the current billing cycle for their
// customers. It should be called directly by the partner using service
// accounts.
//
//   - name: The name of the subscription resource to be cancelled. It
//     will have the format of
//     "partners/{partner_id}/subscriptions/{subscription_id}".
func (r *PartnersSubscriptionsService) Cancel(name string, googlecloudpaymentsresellersubscriptionv1cancelsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionRequest) *PartnersSubscriptionsCancelCall {
	c := &PartnersSubscriptionsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudpaymentsresellersubscriptionv1cancelsubscriptionrequest = googlecloudpaymentsresellersubscriptionv1cancelsubscriptionrequest
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsCancelCall) Context(ctx context.Context) *PartnersSubscriptionsCancelCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsCancelCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1cancelsubscriptionrequest)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
	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,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.cancel" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse.S
// erverResponse.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 *PartnersSubscriptionsCancelCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to cancel a subscription service either immediately or by the end of the current billing cycle for their customers. It should be called directly by the partner using service accounts.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions/{subscriptionsId}:cancel",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.cancel",
	//   "parameterOrder": [
	//     "name"
	//   ],
	//   "parameters": {
	//     "name": {
	//       "description": "Required. The name of the subscription resource to be cancelled. It will have the format of \"partners/{partner_id}/subscriptions/{subscription_id}\"",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+/subscriptions/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+name}:cancel",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionRequest"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1CancelSubscriptionResponse"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.create":

type PartnersSubscriptionsCreateCall struct {
	s                                                     *Service
	parentid                                              string
	googlecloudpaymentsresellersubscriptionv1subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription
	urlParams_                                            gensupport.URLParams
	ctx_                                                  context.Context
	header_                                               http.Header
}

// Create: Used by partners to create a subscription for their
// customers. The created subscription is associated with the end user
// inferred from the end user credentials. This API must be authorized
// by the end user using OAuth.
//
//   - parent: The parent resource name, which is the identifier of the
//     partner. It will have the format of "partners/{partner_id}".
func (r *PartnersSubscriptionsService) Create(parentid string, googlecloudpaymentsresellersubscriptionv1subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription) *PartnersSubscriptionsCreateCall {
	c := &PartnersSubscriptionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parentid = parentid
	c.googlecloudpaymentsresellersubscriptionv1subscription = googlecloudpaymentsresellersubscriptionv1subscription
	return c
}

// SubscriptionId sets the optional parameter "subscriptionId":
// Required. Identifies the subscription resource on the Partner side.
// The value is restricted to 63 ASCII characters at the maximum. If a
// subscription was previously created with the same subscription_id, we
// will directly return that one.
func (c *PartnersSubscriptionsCreateCall) SubscriptionId(subscriptionId string) *PartnersSubscriptionsCreateCall {
	c.urlParams_.Set("subscriptionId", subscriptionId)
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsCreateCall) Context(ctx context.Context) *PartnersSubscriptionsCreateCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1subscription)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/subscriptions")
	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.parentid,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.create" call.
// Exactly one of *GoogleCloudPaymentsResellerSubscriptionV1Subscription
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1Subscription.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 *PartnersSubscriptionsCreateCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1Subscription, 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 := &GoogleCloudPaymentsResellerSubscriptionV1Subscription{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to create a subscription for their customers. The created subscription is associated with the end user inferred from the end user credentials. This API must be authorized by the end user using OAuth.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.create",
	//   "parameterOrder": [
	//     "parent"
	//   ],
	//   "parameters": {
	//     "parent": {
	//       "description": "Required. The parent resource name, which is the identifier of the partner. It will have the format of \"partners/{partner_id}\".",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     },
	//     "subscriptionId": {
	//       "description": "Required. Identifies the subscription resource on the Partner side. The value is restricted to 63 ASCII characters at the maximum. If a subscription was previously created with the same subscription_id, we will directly return that one.",
	//       "location": "query",
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+parent}/subscriptions",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1Subscription"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1Subscription"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.entitle":

type PartnersSubscriptionsEntitleCall struct {
	s                                                                   *Service
	name                                                                string
	googlecloudpaymentsresellersubscriptionv1entitlesubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequest
	urlParams_                                                          gensupport.URLParams
	ctx_                                                                context.Context
	header_                                                             http.Header
}

// Entitle: Used by partners to entitle a previously provisioned
// subscription to the current end user. The end user identity is
// inferred from the authorized credential of the request. This API must
// be authorized by the end user using OAuth.
//
//   - name: The name of the subscription resource that is entitled to the
//     current end user. It will have the format of
//     "partners/{partner_id}/subscriptions/{subscription_id}".
func (r *PartnersSubscriptionsService) Entitle(name string, googlecloudpaymentsresellersubscriptionv1entitlesubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequest) *PartnersSubscriptionsEntitleCall {
	c := &PartnersSubscriptionsEntitleCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudpaymentsresellersubscriptionv1entitlesubscriptionrequest = googlecloudpaymentsresellersubscriptionv1entitlesubscriptionrequest
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsEntitleCall) Context(ctx context.Context) *PartnersSubscriptionsEntitleCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsEntitleCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1entitlesubscriptionrequest)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:entitle")
	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,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.entitle" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse.
// 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 *PartnersSubscriptionsEntitleCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to entitle a previously provisioned subscription to the current end user. The end user identity is inferred from the authorized credential of the request. This API must be authorized by the end user using OAuth.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions/{subscriptionsId}:entitle",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.entitle",
	//   "parameterOrder": [
	//     "name"
	//   ],
	//   "parameters": {
	//     "name": {
	//       "description": "Required. The name of the subscription resource that is entitled to the current end user. It will have the format of \"partners/{partner_id}/subscriptions/{subscription_id}\"",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+/subscriptions/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+name}:entitle",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionRequest"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1EntitleSubscriptionResponse"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.extend":

type PartnersSubscriptionsExtendCall struct {
	s                                                                  *Service
	name                                                               string
	googlecloudpaymentsresellersubscriptionv1extendsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionRequest
	urlParams_                                                         gensupport.URLParams
	ctx_                                                               context.Context
	header_                                                            http.Header
}

// Extend: [Opt-in only] Most partners should be on auto-extend by
// default. Used by partners to extend a subscription service for their
// customers on an ongoing basis for the subscription to remain active
// and renewable. It should be called directly by the partner using
// service accounts.
//
//   - name: The name of the subscription resource to be extended. It will
//     have the format of
//     "partners/{partner_id}/subscriptions/{subscription_id}".
func (r *PartnersSubscriptionsService) Extend(name string, googlecloudpaymentsresellersubscriptionv1extendsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionRequest) *PartnersSubscriptionsExtendCall {
	c := &PartnersSubscriptionsExtendCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudpaymentsresellersubscriptionv1extendsubscriptionrequest = googlecloudpaymentsresellersubscriptionv1extendsubscriptionrequest
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsExtendCall) Context(ctx context.Context) *PartnersSubscriptionsExtendCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsExtendCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1extendsubscriptionrequest)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:extend")
	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,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.extend" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse.S
// erverResponse.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 *PartnersSubscriptionsExtendCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "[Opt-in only] Most partners should be on auto-extend by default. Used by partners to extend a subscription service for their customers on an ongoing basis for the subscription to remain active and renewable. It should be called directly by the partner using service accounts.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions/{subscriptionsId}:extend",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.extend",
	//   "parameterOrder": [
	//     "name"
	//   ],
	//   "parameters": {
	//     "name": {
	//       "description": "Required. The name of the subscription resource to be extended. It will have the format of \"partners/{partner_id}/subscriptions/{subscription_id}\".",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+/subscriptions/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+name}:extend",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionRequest"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1ExtendSubscriptionResponse"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.get":

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

// Get: Used by partners to get a subscription by id. It should be
// called directly by the partner using service accounts.
//
//   - name: The name of the subscription resource to retrieve. It will
//     have the format of
//     "partners/{partner_id}/subscriptions/{subscription_id}".
func (r *PartnersSubscriptionsService) Get(name string) *PartnersSubscriptionsGetCall {
	c := &PartnersSubscriptionsGetCall{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 information.
func (c *PartnersSubscriptionsGetCall) Fields(s ...googleapi.Field) *PartnersSubscriptionsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets the 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. Use googleapi.IsNotModified to check whether the response
// error from Do is the result of In-None-Match.
func (c *PartnersSubscriptionsGetCall) IfNoneMatch(entityTag string) *PartnersSubscriptionsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsGetCall) Context(ctx context.Context) *PartnersSubscriptionsGetCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	var body io.Reader = nil
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.get" call.
// Exactly one of *GoogleCloudPaymentsResellerSubscriptionV1Subscription
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1Subscription.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 *PartnersSubscriptionsGetCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1Subscription, 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 := &GoogleCloudPaymentsResellerSubscriptionV1Subscription{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to get a subscription by id. It should be called directly by the partner using service accounts.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions/{subscriptionsId}",
	//   "httpMethod": "GET",
	//   "id": "paymentsresellersubscription.partners.subscriptions.get",
	//   "parameterOrder": [
	//     "name"
	//   ],
	//   "parameters": {
	//     "name": {
	//       "description": "Required. The name of the subscription resource to retrieve. It will have the format of \"partners/{partner_id}/subscriptions/{subscription_id}\"",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+/subscriptions/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+name}",
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1Subscription"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.provision":

type PartnersSubscriptionsProvisionCall struct {
	s                                                     *Service
	parentid                                              string
	googlecloudpaymentsresellersubscriptionv1subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription
	urlParams_                                            gensupport.URLParams
	ctx_                                                  context.Context
	header_                                               http.Header
}

// Provision: Used by partners to provision a subscription for their
// customers. This creates a subscription without associating it with
// the end user account. EntitleSubscription must be called separately
// using OAuth in order for the end user account to be associated with
// the subscription. It should be called directly by the partner using
// service accounts.
//
//   - parent: The parent resource name, which is the identifier of the
//     partner. It will have the format of "partners/{partner_id}".
func (r *PartnersSubscriptionsService) Provision(parentid string, googlecloudpaymentsresellersubscriptionv1subscription *GoogleCloudPaymentsResellerSubscriptionV1Subscription) *PartnersSubscriptionsProvisionCall {
	c := &PartnersSubscriptionsProvisionCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parentid = parentid
	c.googlecloudpaymentsresellersubscriptionv1subscription = googlecloudpaymentsresellersubscriptionv1subscription
	return c
}

// SubscriptionId sets the optional parameter "subscriptionId":
// Required. Identifies the subscription resource on the Partner side.
// The value is restricted to 63 ASCII characters at the maximum. If a
// subscription was previously created with the same subscription_id, we
// will directly return that one.
func (c *PartnersSubscriptionsProvisionCall) SubscriptionId(subscriptionId string) *PartnersSubscriptionsProvisionCall {
	c.urlParams_.Set("subscriptionId", subscriptionId)
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsProvisionCall) Context(ctx context.Context) *PartnersSubscriptionsProvisionCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsProvisionCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1subscription)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/subscriptions:provision")
	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.parentid,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.provision" call.
// Exactly one of *GoogleCloudPaymentsResellerSubscriptionV1Subscription
// or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1Subscription.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 *PartnersSubscriptionsProvisionCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1Subscription, 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 := &GoogleCloudPaymentsResellerSubscriptionV1Subscription{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to provision a subscription for their customers. This creates a subscription without associating it with the end user account. EntitleSubscription must be called separately using OAuth in order for the end user account to be associated with the subscription. It should be called directly by the partner using service accounts.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions:provision",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.provision",
	//   "parameterOrder": [
	//     "parent"
	//   ],
	//   "parameters": {
	//     "parent": {
	//       "description": "Required. The parent resource name, which is the identifier of the partner. It will have the format of \"partners/{partner_id}\".",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     },
	//     "subscriptionId": {
	//       "description": "Required. Identifies the subscription resource on the Partner side. The value is restricted to 63 ASCII characters at the maximum. If a subscription was previously created with the same subscription_id, we will directly return that one.",
	//       "location": "query",
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+parent}/subscriptions:provision",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1Subscription"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1Subscription"
	//   }
	// }

}

// method id "paymentsresellersubscription.partners.subscriptions.undoCancel":

type PartnersSubscriptionsUndoCancelCall struct {
	s                                                                      *Service
	name                                                                   string
	googlecloudpaymentsresellersubscriptionv1undocancelsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRequest
	urlParams_                                                             gensupport.URLParams
	ctx_                                                                   context.Context
	header_                                                                http.Header
}

// UndoCancel: Used by partners to revoke the pending cancellation of a
// subscription, which is currently in `STATE_CANCEL_AT_END_OF_CYCLE`
// state. If the subscription is already cancelled, the request will
// fail. It should be called directly by the partner using service
// accounts.
//
//   - name: The name of the subscription resource whose pending
//     cancellation needs to be undone. It will have the format of
//     "partners/{partner_id}/subscriptions/{subscription_id}".
func (r *PartnersSubscriptionsService) UndoCancel(name string, googlecloudpaymentsresellersubscriptionv1undocancelsubscriptionrequest *GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRequest) *PartnersSubscriptionsUndoCancelCall {
	c := &PartnersSubscriptionsUndoCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudpaymentsresellersubscriptionv1undocancelsubscriptionrequest = googlecloudpaymentsresellersubscriptionv1undocancelsubscriptionrequest
	return c
}

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

// Context sets the context to be used in this call's Do method. Any
// pending HTTP request will be aborted if the provided context is
// canceled.
func (c *PartnersSubscriptionsUndoCancelCall) Context(ctx context.Context) *PartnersSubscriptionsUndoCancelCall {
	c.ctx_ = ctx
	return c
}

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

func (c *PartnersSubscriptionsUndoCancelCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := make(http.Header)
	reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
	for k, v := range c.header_ {
		reqHeaders[k] = v
	}
	reqHeaders.Set("User-Agent", c.s.userAgent())
	var body io.Reader = nil
	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudpaymentsresellersubscriptionv1undocancelsubscriptionrequest)
	if err != nil {
		return nil, err
	}
	reqHeaders.Set("Content-Type", "application/json")
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:undoCancel")
	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,
	})
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "paymentsresellersubscription.partners.subscriptions.undoCancel" call.
// Exactly one of
// *GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRespon
// se or error will be non-nil. Any non-2xx status code is an error.
// Response headers are in either
// *GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRespon
// se.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 *PartnersSubscriptionsUndoCancelCall) Do(opts ...googleapi.CallOption) (*GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionResponse, 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 := &GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	if err := gensupport.DecodeResponse(target, res); err != nil {
		return nil, err
	}
	return ret, nil
	// {
	//   "description": "Used by partners to revoke the pending cancellation of a subscription, which is currently in `STATE_CANCEL_AT_END_OF_CYCLE` state. If the subscription is already cancelled, the request will fail. It should be called directly by the partner using service accounts.",
	//   "flatPath": "v1/partners/{partnersId}/subscriptions/{subscriptionsId}:undoCancel",
	//   "httpMethod": "POST",
	//   "id": "paymentsresellersubscription.partners.subscriptions.undoCancel",
	//   "parameterOrder": [
	//     "name"
	//   ],
	//   "parameters": {
	//     "name": {
	//       "description": "Required. The name of the subscription resource whose pending cancellation needs to be undone. It will have the format of \"partners/{partner_id}/subscriptions/{subscription_id}\"",
	//       "location": "path",
	//       "pattern": "^partners/[^/]+/subscriptions/[^/]+$",
	//       "required": true,
	//       "type": "string"
	//     }
	//   },
	//   "path": "v1/{+name}:undoCancel",
	//   "request": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionRequest"
	//   },
	//   "response": {
	//     "$ref": "GoogleCloudPaymentsResellerSubscriptionV1UndoCancelSubscriptionResponse"
	//   }
	// }

}
