// Copyright 2022 Luca Casonato. All rights reserved. MIT license.
/**
 * Search Ads 360 Reporting API Client for Deno
 * ============================================
 * 
 * The Search Ads 360 API allows developers to automate downloading reports from Search Ads 360.
 * 
 * Docs: https://developers.google.com/search-ads/reporting
 * Source: https://googleapis.deno.dev/v1/searchads360:v23.ts
 */

import { auth, CredentialsClient, GoogleAuth, request } from "/_/base@v1/mod.ts";
export { auth, GoogleAuth };
export type { CredentialsClient };

/**
 * The Search Ads 360 API allows developers to automate downloading reports
 * from Search Ads 360.
 */
export class SearchAds360 {
  #client: CredentialsClient | undefined;
  #baseUrl: string;

  constructor(client?: CredentialsClient, baseUrl: string = "https://searchads360.googleapis.com/") {
    this.#client = client;
    this.#baseUrl = baseUrl;
  }

  /**
   * Lists date ranges for which audience insights data can be requested. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   */
  async audienceInsightsListInsightsEligibleDates(req: GoogleAdsSearchads360V23Services__ListInsightsEligibleDatesRequest): Promise<GoogleAdsSearchads360V23Services__ListInsightsEligibleDatesResponse> {
    const url = new URL(`${this.#baseUrl}v23/audienceInsights:listInsightsEligibleDates`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListInsightsEligibleDatesResponse;
  }

  /**
   * Creates, updates, or removes account budget proposals. Operation statuses
   * are returned. List of thrown errors: [AccountBudgetProposalError]()
   * [AuthenticationError]() [AuthorizationError]() [DatabaseError]()
   * [DateError]() [FieldError]() [FieldMaskError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   * [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersAccountBudgetProposalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest): Promise<GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/accountBudgetProposals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalResponse;
  }

  /**
   * Creates an account link. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   * [ThirdPartyAppAnalyticsLinkError]()
   *
   * @param customerId Required. The ID of the customer for which the account link is created.
   */
  async customersAccountLinksCreate(customerId: string, req: GoogleAdsSearchads360V23Services__CreateAccountLinkRequest): Promise<GoogleAdsSearchads360V23Services__CreateAccountLinkResponse> {
    req = serializeGoogleAdsSearchads360V23Services__CreateAccountLinkRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/accountLinks:create`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateAccountLinkResponse;
  }

  /**
   * Creates or removes an account link. From V5, create is not supported
   * through AccountLinkService.MutateAccountLink. Use
   * AccountLinkService.CreateAccountLink instead. List of thrown errors:
   * [AccountLinkError]() [AuthenticationError]() [AuthorizationError]()
   * [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersAccountLinksMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAccountLinkRequest): Promise<GoogleAdsSearchads360V23Services__MutateAccountLinkResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAccountLinkRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/accountLinks:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAccountLinkResponse;
  }

  /**
   * Creates and removes ad group ad labels. Operation statuses are returned.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [HeaderError]() [InternalError]() [LabelError]()
   * [MutateError]() [NewResourceCreationError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. ID of the customer whose ad group ad labels are being modified.
   */
  async customersAdGroupAdLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupAdLabels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelsResponse;
  }

  /**
   * Creates, updates, or removes ads. Operation statuses are returned. List of
   * thrown errors: [AdCustomizerError]() [AdError]() [AdGroupAdError]()
   * [AdSharingError]() [AdxError]() [AssetError]() [AssetLinkError]()
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [ContextError]() [DatabaseError]() [DateError]() [DistinctError]()
   * [FeedAttributeReferenceError]() [FieldError]() [FieldMaskError]()
   * [FunctionError]() [FunctionParsingError]() [HeaderError]() [IdError]()
   * [ImageError]() [InternalError]() [ListOperationError]()
   * [MediaBundleError]() [MediaFileError]() [MutateError]()
   * [NewResourceCreationError]() [NotEmptyError]() [NullError]()
   * [OperationAccessDeniedError]() [OperatorError]() [PolicyFindingError]()
   * [PolicyValidationParameterError]() [PolicyViolationError]() [QuotaError]()
   * [RangeError]() [RequestError]() [ResourceCountLimitExceededError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   * [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer whose ads are being modified.
   */
  async customersAdGroupAdsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupAds:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse(data);
  }

  /**
   * Remove automatically created assets from an ad. List of thrown errors:
   * [AdError]() [AuthenticationError]() [AuthorizationError]()
   * [AutomaticallyCreatedAssetRemovalError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param adGroupAd Required. The resource name of the AdGroupAd from which to remove automatically created assets.
   */
  async customersAdGroupAdsRemoveAutomaticallyCreatedAssets(adGroupAd: string, req: GoogleAdsSearchads360V23Services__RemoveAutomaticallyCreatedAssetsRequest): Promise<GoogleProtobuf__Empty> {
    const url = new URL(`${this.#baseUrl}v23/${ adGroupAd }:removeAutomaticallyCreatedAssets`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleProtobuf__Empty;
  }

  /**
   * Creates, or removes ad group asset sets. Operation statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose ad group asset sets are being modified.
   */
  async customersAdGroupAssetSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupAssetSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetsResponse;
  }

  /**
   * Creates, updates, or removes ad group assets. Operation statuses are
   * returned. List of thrown errors: [AssetLinkError]() [AuthenticationError]()
   * [AuthorizationError]() [ContextError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [NotAllowlistedError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose ad group assets are being modified.
   */
  async customersAdGroupAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupAssetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupAssets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupAssetsResponse;
  }

  /**
   * Creates, updates, or removes ad group bid modifiers. Operation statuses
   * are returned. List of thrown errors: [AdGroupBidModifierError]()
   * [AuthenticationError]() [AuthorizationError]() [ContextError]()
   * [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]()
   * [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]()
   * [MutateError]() [NewResourceCreationError]() [NotEmptyError]()
   * [OperatorError]() [QuotaError]() [RangeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [SizeLimitError]()
   * [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. ID of the customer whose ad group bid modifiers are being modified.
   */
  async customersAdGroupBidModifiersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupBidModifiers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse(data);
  }

  /**
   * Creates, updates, or removes criteria. Operation statuses are returned.
   * List of thrown errors: [AdGroupCriterionError]() [AdxError]()
   * [AuthenticationError]() [AuthorizationError]() [BiddingError]()
   * [BiddingStrategyError]() [CollectionSizeError]() [ContextError]()
   * [CriterionError]() [DatabaseError]() [DateError]() [DistinctError]()
   * [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]()
   * [InternalError]() [MultiplierError]() [MutateError]()
   * [NewResourceCreationError]() [NotEmptyError]() [NullError]()
   * [OperationAccessDeniedError]() [OperatorError]() [PolicyViolationError]()
   * [QuotaError]() [RangeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [SizeLimitError]()
   * [StringFormatError]() [StringLengthError]() [UrlFieldError]()
   *
   * @param customerId Required. ID of the customer whose criteria are being modified.
   */
  async customersAdGroupCriteriaMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupCriteria:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse(data);
  }

  /**
   * Creates, updates or removes ad group criterion customizers. Operation
   * statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose ad group criterion customizers are being modified.
   */
  async customersAdGroupCriterionCustomizersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizersRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizersResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/AdGroupCriterionCustomizers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizersResponse;
  }

  /**
   * Creates and removes ad group criterion labels. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. ID of the customer whose ad group criterion labels are being modified.
   */
  async customersAdGroupCriterionLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupCriterionLabels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelsResponse;
  }

  /**
   * Creates, updates or removes ad group customizers. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose ad group customizers are being modified.
   */
  async customersAdGroupCustomizersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupCustomizersRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupCustomizersResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupCustomizers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupCustomizersResponse;
  }

  /**
   * Creates and removes ad group labels. Operation statuses are returned. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]()
   * [LabelError]() [MutateError]() [NewResourceCreationError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. ID of the customer whose ad group labels are being modified.
   */
  async customersAdGroupLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupLabelsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroupLabels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAdGroupLabelsResponse;
  }

  /**
   * Creates, updates, or removes ad groups. Operation statuses are returned.
   * List of thrown errors: [AdGroupError]() [AdxError]()
   * [AuthenticationError]() [AuthorizationError]() [BiddingError]()
   * [BiddingStrategyError]() [DatabaseError]() [DateError]() [DistinctError]()
   * [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]()
   * [InternalError]() [ListOperationError]() [MultiplierError]()
   * [MutateError]() [NewResourceCreationError]() [NotEmptyError]()
   * [NullError]() [OperationAccessDeniedError]() [OperatorError]()
   * [QuotaError]() [RangeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [SettingError]() [SizeLimitError]()
   * [StringFormatError]() [StringLengthError]() [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer whose ad groups are being modified.
   */
  async customersAdGroupsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdGroupsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdGroupsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdGroupsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adGroups:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdGroupsResponse(data);
  }

  /**
   * Creates, updates, or removes ad parameters. Operation statuses are
   * returned. List of thrown errors: [AdParameterError]()
   * [AuthenticationError]() [AuthorizationError]() [ContextError]()
   * [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose ad parameters are being modified.
   */
  async customersAdParametersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdParametersRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdParametersResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdParametersRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/adParameters:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdParametersResponse(data);
  }

  /**
   * Updates ads. Operation statuses are returned. Updating ads is not
   * supported for TextAd, ExpandedDynamicSearchAd, GmailAd and ImageAd. List of
   * thrown errors: [AdCustomizerError]() [AdError]() [AdSharingError]()
   * [AdxError]() [AssetError]() [AssetLinkError]() [AuthenticationError]()
   * [AuthorizationError]() [CollectionSizeError]() [DatabaseError]()
   * [DateError]() [DistinctError]() [FeedAttributeReferenceError]()
   * [FieldError]() [FieldMaskError]() [FunctionError]()
   * [FunctionParsingError]() [HeaderError]() [IdError]() [ImageError]()
   * [InternalError]() [ListOperationError]() [MediaBundleError]()
   * [MediaFileError]() [MutateError]() [NewResourceCreationError]()
   * [NotEmptyError]() [NullError]() [OperatorError]() [PolicyFindingError]()
   * [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   * [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer whose ads are being modified.
   */
  async customersAdsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAdsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAdsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAdsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/ads:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAdsResponse(data);
  }

  /**
   * Creates, updates or removes asset group assets. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose asset group assets are being modified.
   */
  async customersAssetGroupAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetGroupAssets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsResponse;
  }

  /**
   * Creates, updates or removes asset group listing group filters. Operation
   * statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose asset group listing group filters are being modified.
   */
  async customersAssetGroupListingGroupFiltersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetGroupListingGroupFilters:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse(data);
  }

  /**
   * Creates or removes asset group signals. Operation statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose asset group signals are being modified.
   */
  async customersAssetGroupSignalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetGroupSignalsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetGroupSignalsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetGroupSignals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAssetGroupSignalsResponse;
  }

  /**
   * Creates, updates or removes asset groups. Operation statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose asset groups are being modified.
   */
  async customersAssetGroupsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetGroupsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetGroupsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAssetGroupsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetGroups:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAssetGroupsResponse;
  }

  /**
   * Creates, updates or removes asset set assets. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose asset set assets are being modified.
   */
  async customersAssetSetAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetSetAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetSetAssetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetSetAssets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAssetSetAssetsResponse;
  }

  /**
   * Creates, updates or removes asset sets. Operation statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose asset sets are being modified.
   */
  async customersAssetSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetSetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAssetSetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assetSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAssetSetsResponse(data);
  }

  /**
   * Creates assets. Operation statuses are returned. List of thrown errors:
   * [AssetError]() [AuthenticationError]() [AuthorizationError]()
   * [CollectionSizeError]() [CurrencyCodeError]() [DatabaseError]()
   * [DateError]() [DistinctError]() [FieldError]() [FieldMaskError]()
   * [HeaderError]() [IdError]() [InternalError]() [ListOperationError]()
   * [MediaUploadError]() [MutateError]() [NotAllowlistedError]()
   * [NotEmptyError]() [OperatorError]() [QuotaError]() [RangeError]()
   * [RequestError]() [SizeLimitError]() [StringFormatError]()
   * [StringLengthError]() [UrlFieldError]() [YoutubeVideoRegistrationError]()
   *
   * @param customerId Required. The ID of the customer whose assets are being modified.
   */
  async customersAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateAssetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAssetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/assets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateAssetsResponse(data);
  }

  /**
   * Creates audiences. Operation statuses are returned. List of thrown errors:
   * [AudienceError]()
   *
   * @param customerId Required. The ID of the customer whose audiences are being modified.
   */
  async customersAudiencesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateAudiencesRequest): Promise<GoogleAdsSearchads360V23Services__MutateAudiencesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateAudiencesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/audiences:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateAudiencesResponse;
  }

  /**
   * Add operations to the batch job. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [BatchJobError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   * [ResourceCountLimitExceededError]()
   *
   * @param resourceName Required. The resource name of the batch job.
   */
  async customersBatchJobsAddOperations(resourceName: string, req: GoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest): Promise<GoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:addOperations`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse(data);
  }

  /**
   * Returns the results of the batch job. The job must be done. Supports
   * standard list paging. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [BatchJobError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The resource name of the batch job whose results are being listed.
   */
  async customersBatchJobsListResults(resourceName: string, opts: CustomersBatchJobsListResultsOptions = {}): Promise<GoogleAdsSearchads360V23Services__ListBatchJobResultsResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:listResults`);
    if (opts.pageSize !== undefined) {
      url.searchParams.append("pageSize", String(opts.pageSize));
    }
    if (opts.pageToken !== undefined) {
      url.searchParams.append("pageToken", String(opts.pageToken));
    }
    if (opts.responseContentType !== undefined) {
      url.searchParams.append("responseContentType", String(opts.responseContentType));
    }
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return deserializeGoogleAdsSearchads360V23Services__ListBatchJobResultsResponse(data);
  }

  /**
   * Mutates a batch job. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]() [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer for which to create a batch job.
   */
  async customersBatchJobsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateBatchJobRequest): Promise<GoogleAdsSearchads360V23Services__MutateBatchJobResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/batchJobs:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateBatchJobResponse;
  }

  /**
   * Runs the batch job. The Operation.metadata field type is BatchJobMetadata.
   * When finished, the long running operation will not contain errors or a
   * response. Instead, use ListBatchJobResults to get the results of the job.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [BatchJobError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param resourceName Required. The resource name of the BatchJob to run.
   */
  async customersBatchJobsRun(resourceName: string, req: GoogleAdsSearchads360V23Services__RunBatchJobRequest): Promise<GoogleLongrunning__Operation> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:run`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleLongrunning__Operation;
  }

  /**
   * Creates, updates, or removes data exclusions. Operation statuses are
   * returned.
   *
   * @param customerId Required. ID of the customer whose data exclusions are being modified.
   */
  async customersBiddingDataExclusionsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest): Promise<GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/biddingDataExclusions:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResponse;
  }

  /**
   * Creates, updates, or removes seasonality adjustments. Operation statuses
   * are returned.
   *
   * @param customerId Required. ID of the customer whose seasonality adjustments are being modified.
   */
  async customersBiddingSeasonalityAdjustmentsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest): Promise<GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/biddingSeasonalityAdjustments:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResponse;
  }

  /**
   * Creates, updates, or removes bidding strategies. Operation statuses are
   * returned. List of thrown errors: [AdxError]() [AuthenticationError]()
   * [AuthorizationError]() [BiddingError]() [BiddingStrategyError]()
   * [ContextError]() [DatabaseError]() [DateError]() [DistinctError]()
   * [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]()
   * [InternalError]() [MutateError]() [NewResourceCreationError]()
   * [NotEmptyError]() [NullError]() [OperationAccessDeniedError]()
   * [OperatorError]() [QuotaError]() [RangeError]() [RequestError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose bidding strategies are being modified.
   */
  async customersBiddingStrategiesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest): Promise<GoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/biddingStrategies:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse(data);
  }

  /**
   * Creates a billing setup, or cancels an existing billing setup. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [BillingSetupError]() [DateError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. Id of the customer to apply the billing setup mutate operation to.
   */
  async customersBillingSetupsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateBillingSetupRequest): Promise<GoogleAdsSearchads360V23Services__MutateBillingSetupResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/billingSetups:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateBillingSetupResponse;
  }

  /**
   * Creates, updates or removes campaign asset sets. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose campaign asset sets are being modified.
   */
  async customersCampaignAssetSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignAssetSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignAssetSetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignAssetSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignAssetSetsResponse;
  }

  /**
   * Creates or removes campaign assets. Operation statuses are returned. List
   * of thrown errors: [AssetLinkError]() [AuthenticationError]()
   * [AuthorizationError]() [ContextError]() [DatabaseError]() [FieldError]()
   * [HeaderError]() [InternalError]() [MutateError]() [NotAllowlistedError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose campaign assets are being modified.
   */
  async customersCampaignAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignAssetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignAssets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignAssetsResponse;
  }

  /**
   * Creates, updates, or removes campaign bid modifiers. Operation statuses
   * are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ContextError]() [CriterionError]()
   * [DatabaseError]() [DateError]() [DistinctError]() [FieldError]()
   * [HeaderError]() [IdError]() [InternalError]() [MutateError]()
   * [NewResourceCreationError]() [NotEmptyError]() [NullError]()
   * [OperatorError]() [QuotaError]() [RangeError]() [RequestError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. ID of the customer whose campaign bid modifiers are being modified.
   */
  async customersCampaignBidModifiersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignBidModifiers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersResponse;
  }

  /**
   * Creates, updates, or removes campaign budgets. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [CampaignBudgetError]() [DatabaseError]()
   * [DistinctError]() [FieldError]() [FieldMaskError]() [HeaderError]()
   * [InternalError]() [MutateError]() [NewResourceCreationError]()
   * [OperationAccessDeniedError]() [QuotaError]() [RangeError]()
   * [RequestError]() [ResourceCountLimitExceededError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose campaign budgets are being modified.
   */
  async customersCampaignBudgetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignBudgets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse(data);
  }

  /**
   * Creates, updates or removes campaign conversion goals. Operation statuses
   * are returned.
   *
   * @param customerId Required. The ID of the customer whose campaign conversion goals are being modified.
   */
  async customersCampaignConversionGoalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignConversionGoals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsResponse;
  }

  /**
   * Creates, updates, or removes criteria. Operation statuses are returned.
   * List of thrown errors: [AdxError]() [AuthenticationError]()
   * [AuthorizationError]() [CampaignCriterionError]() [CollectionSizeError]()
   * [ContextError]() [CriterionError]() [DatabaseError]() [DistinctError]()
   * [FieldError]() [FieldMaskError]() [FunctionError]() [HeaderError]()
   * [IdError]() [InternalError]() [MutateError]() [NewResourceCreationError]()
   * [NotEmptyError]() [NullError]() [OperationAccessDeniedError]()
   * [OperatorError]() [QuotaError]() [RangeError]() [RegionCodeError]()
   * [RequestError]() [ResourceCountLimitExceededError]() [SizeLimitError]()
   * [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose criteria are being modified.
   */
  async customersCampaignCriteriaMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignCriteria:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse(data);
  }

  /**
   * Creates, updates or removes campaign customizers. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose campaign customizers are being modified.
   */
  async customersCampaignCustomizersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignCustomizersRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignCustomizersResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignCustomizers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignCustomizersResponse;
  }

  /**
   * Returns all errors that occurred during CampaignDraft promote. Throws an
   * error if called before campaign draft is promoted. Supports standard list
   * paging. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param resourceName Required. The name of the campaign draft from which to retrieve the async errors.
   */
  async customersCampaignDraftsListAsyncErrors(resourceName: string, opts: CustomersCampaignDraftsListAsyncErrorsOptions = {}): Promise<GoogleAdsSearchads360V23Services__ListCampaignDraftAsyncErrorsResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:listAsyncErrors`);
    if (opts.pageSize !== undefined) {
      url.searchParams.append("pageSize", String(opts.pageSize));
    }
    if (opts.pageToken !== undefined) {
      url.searchParams.append("pageToken", String(opts.pageToken));
    }
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListCampaignDraftAsyncErrorsResponse;
  }

  /**
   * Creates, updates, or removes campaign drafts. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [CampaignDraftError]() [DatabaseError]()
   * [FieldError]() [HeaderError]() [InternalError]() [MutateError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose campaign drafts are being modified.
   */
  async customersCampaignDraftsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignDraftsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignDrafts:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignDraftsResponse;
  }

  /**
   * Promotes the changes in a draft back to the base campaign. This method
   * returns a Long Running Operation (LRO) indicating if the Promote is done.
   * Use google.longrunning.Operations.GetOperation to poll the LRO until it is
   * done. Only a done status is returned in the response. See the status in the
   * Campaign Draft resource to determine if the promotion was successful. If
   * the LRO failed, use CampaignDraftService.ListCampaignDraftAsyncErrors to
   * view the list of error reasons. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CampaignDraftError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param campaignDraft Required. The resource name of the campaign draft to promote.
   */
  async customersCampaignDraftsPromote(campaignDraft: string, req: GoogleAdsSearchads360V23Services__PromoteCampaignDraftRequest): Promise<GoogleLongrunning__Operation> {
    const url = new URL(`${this.#baseUrl}v23/${ campaignDraft }:promote`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleLongrunning__Operation;
  }

  /**
   * Create or update campaign goal configs. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   * [CampaignGoalConfigError]() [GoalServicesError]()
   *
   * @param customerId Required. The ID of the customer whose campaign goal configs are being modified.
   */
  async customersCampaignGoalConfigsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/CampaignGoalConfigs:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsResponse;
  }

  /**
   * Creates, updates, or removes campaign groups. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose campaign groups are being modified.
   */
  async customersCampaignGroupsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignGroupsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignGroups:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignGroupsResponse;
  }

  /**
   * Creates and removes campaign-label relationships. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [LabelError]() [MutateError]()
   * [NewResourceCreationError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. ID of the customer whose campaign-label relationships are being modified.
   */
  async customersCampaignLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignLabelsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignLabels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignLabelsResponse;
  }

  /**
   * Process the given campaign lifecycle configurations. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]()
   * [CampaignLifecycleGoalConfigError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer performing the upload.
   */
  async customersCampaignLifecycleGoalConfigureCampaignLifecycleGoals(customerId: string, req: GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest): Promise<GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignLifecycleGoal:configureCampaignLifecycleGoals`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsResponse;
  }

  /**
   * Enables Brand Guidelines for Performance Max campaigns. List of thrown
   * errors: [AuthenticationError]() [AssetError]() [AssetLinkError]()
   * [AuthorizationError]() [BrandGuidelinesMigrationError]() [CampaignError]()
   * [HeaderError]() [InternalError]() [MutateError]() [QuotaError]()
   * [RequestError]() [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer whose campaigns are being enabled.
   */
  async customersCampaignsEnablePMaxBrandGuidelines(customerId: string, req: GoogleAdsSearchads360V23Services__EnablePMaxBrandGuidelinesRequest): Promise<GoogleAdsSearchads360V23Services__EnablePMaxBrandGuidelinesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaigns:enablePMaxBrandGuidelines`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__EnablePMaxBrandGuidelinesResponse;
  }

  /**
   * Creates or removes campaign shared sets. Operation statuses are returned.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CampaignSharedSetError]() [ContextError]() [DatabaseError]() [DateError]()
   * [DistinctError]() [FieldError]() [HeaderError]() [IdError]()
   * [InternalError]() [MutateError]() [NewResourceCreationError]()
   * [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]()
   * [RangeError]() [RequestError]() [SizeLimitError]() [StringFormatError]()
   * [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose campaign shared sets are being modified.
   */
  async customersCampaignSharedSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignSharedSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignSharedSetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaignSharedSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCampaignSharedSetsResponse;
  }

  /**
   * Creates, updates, or removes campaigns. Operation statuses are returned.
   * List of thrown errors: [AdxError]() [AuthenticationError]()
   * [AuthorizationError]() [BiddingError]() [BiddingStrategyError]()
   * [CampaignBudgetError]() [CampaignError]() [ContextError]()
   * [DatabaseError]() [DateError]() [DateRangeError]() [DistinctError]()
   * [FieldError]() [FieldMaskError]() [HeaderError]() [IdError]()
   * [InternalError]() [ListOperationError]() [MutateError]()
   * [NewResourceCreationError]() [NotAllowlistedError]() [NotEmptyError]()
   * [NullError]() [OperationAccessDeniedError]() [OperatorError]()
   * [QuotaError]() [RangeError]() [RegionCodeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [SettingError]() [SizeLimitError]()
   * [StringFormatError]() [StringLengthError]() [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer whose campaigns are being modified.
   */
  async customersCampaignsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCampaignsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCampaignsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCampaignsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/campaigns:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateCampaignsResponse(data);
  }

  /**
   * Creates, updates or removes conversion actions. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ConversionActionError]() [CurrencyCodeError]()
   * [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]()
   * [InternalError]() [MutateError]() [NewResourceCreationError]()
   * [QuotaError]() [RangeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose conversion actions are being modified.
   */
  async customersConversionActionsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateConversionActionsRequest): Promise<GoogleAdsSearchads360V23Services__MutateConversionActionsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateConversionActionsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/conversionActions:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateConversionActionsResponse(data);
  }

  /**
   * Creates or updates conversion custom variables. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ConversionCustomVariableError]() [DatabaseError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose conversion custom variables are being modified.
   */
  async customersConversionCustomVariablesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest): Promise<GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/conversionCustomVariables:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesResponse;
  }

  /**
   * Creates, updates or removes conversion goal campaign config. Operation
   * statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose custom conversion goals are being modified.
   */
  async customersConversionGoalCampaignConfigsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest): Promise<GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/conversionGoalCampaignConfigs:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsResponse;
  }

  /**
   * Creates, updates or removes conversion value rule sets. Operation statuses
   * are returned.
   *
   * @param customerId Required. The ID of the customer whose conversion value rule sets are being modified.
   */
  async customersConversionValueRuleSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/conversionValueRuleSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsResponse;
  }

  /**
   * Creates, updates, or removes conversion value rules. Operation statuses
   * are returned.
   *
   * @param customerId Required. The ID of the customer whose conversion value rules are being modified.
   */
  async customersConversionValueRulesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest): Promise<GoogleAdsSearchads360V23Services__MutateConversionValueRulesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/conversionValueRules:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateConversionValueRulesResponse;
  }

  /**
   * Creates a new client under manager. The new client customer is returned.
   * List of thrown errors: [AccessInvitationError]() [AuthenticationError]()
   * [AuthorizationError]() [CurrencyCodeError]() [HeaderError]()
   * [InternalError]() [ManagerLinkError]() [QuotaError]() [RequestError]()
   * [StringLengthError]() [TimeZoneError]()
   *
   * @param customerId Required. The ID of the Manager under whom client customer is being created.
   */
  async customersCreateCustomerClient(customerId: string, req: GoogleAdsSearchads360V23Services__CreateCustomerClientRequest): Promise<GoogleAdsSearchads360V23Services__CreateCustomerClientResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:createCustomerClient`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateCustomerClientResponse;
  }

  /**
   * Creates or updates custom audiences. Operation statuses are returned. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CustomAudienceError]() [CustomInterestError]() [FieldError]()
   * [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]()
   * [OperationAccessDeniedError]() [PolicyViolationError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose custom audiences are being modified.
   */
  async customersCustomAudiencesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomAudiencesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customAudiences:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomAudiencesResponse;
  }

  /**
   * Returns the requested custom column in full detail.
   *
   * @param resourceName Required. The resource name of the custom column to fetch.
   */
  async customersCustomColumnsGet(resourceName: string): Promise<GoogleAdsSearchads360V23Resources__CustomColumn> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Resources__CustomColumn;
  }

  /**
   * Returns all the custom columns associated with the customer in full
   * detail.
   *
   * @param customerId Required. The ID of the customer to apply the CustomColumn list operation to.
   */
  async customersCustomColumnsList(customerId: string): Promise<GoogleAdsSearchads360V23Services__ListCustomColumnsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customColumns`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListCustomColumnsResponse;
  }

  /**
   * Creates, updates or removes custom conversion goals. Operation statuses
   * are returned.
   *
   * @param customerId Required. The ID of the customer whose custom conversion goals are being modified.
   */
  async customersCustomConversionGoalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customConversionGoals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse(data);
  }

  /**
   * Creates, or removes customer asset sets. Operation statuses are returned.
   *
   * @param customerId Required. The ID of the customer whose customer asset sets are being modified.
   */
  async customersCustomerAssetSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerAssetSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerAssetSetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerAssetSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerAssetSetsResponse;
  }

  /**
   * Creates, updates, or removes customer assets. Operation statuses are
   * returned. List of thrown errors: [AssetLinkError]() [AuthenticationError]()
   * [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose customer assets are being modified.
   */
  async customersCustomerAssetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerAssetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerAssets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerAssetsResponse;
  }

  /**
   * Creates or updates a customer client link. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]()
   * [HeaderError]() [InternalError]() [ManagerLinkError]() [MutateError]()
   * [NewResourceCreationError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose customer link are being modified.
   */
  async customersCustomerClientLinksMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerClientLinkResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerClientLinks:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerClientLinkResponse;
  }

  /**
   * Creates, updates or removes customer conversion goals. Operation statuses
   * are returned.
   *
   * @param customerId Required. The ID of the customer whose customer conversion goals are being modified.
   */
  async customersCustomerConversionGoalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerConversionGoals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsResponse;
  }

  /**
   * Creates, updates or removes customer customizers. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose customer customizers are being modified.
   */
  async customersCustomerCustomizersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerCustomizersRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerCustomizersResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/CustomerCustomizers:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerCustomizersResponse;
  }

  /**
   * Creates and removes customer-label relationships. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [HeaderError]() [InternalError]()
   * [LabelError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. ID of the customer whose customer-label relationships are being modified.
   */
  async customersCustomerLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerLabelsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerLabels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerLabelsResponse;
  }

  /**
   * Process the given customer lifecycle configurations. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]()
   * [CustomerLifecycleGoalConfigError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer performing the upload.
   */
  async customersCustomerLifecycleGoalConfigureCustomerLifecycleGoals(customerId: string, req: GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest): Promise<GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerLifecycleGoal:configureCustomerLifecycleGoals`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsResponse;
  }

  /**
   * Moves a client customer to a new manager customer. This simplifies the
   * complex request that requires two operations to move a client customer to a
   * new manager, for example: 1. Update operation with Status INACTIVE
   * (previous manager) and, 2. Update operation with Status ACTIVE (new
   * manager). List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the client customer that is being moved.
   */
  async customersCustomerManagerLinksMoveManagerLink(customerId: string, req: GoogleAdsSearchads360V23Services__MoveManagerLinkRequest): Promise<GoogleAdsSearchads360V23Services__MoveManagerLinkResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerManagerLinks:moveManagerLink`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MoveManagerLinkResponse;
  }

  /**
   * Updates customer manager links. Operation statuses are returned. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [FieldError]() [FieldMaskError]() [HeaderError]()
   * [InternalError]() [ManagerLinkError]() [MutateError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose customer manager links are being modified.
   */
  async customersCustomerManagerLinksMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerManagerLinks:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkResponse;
  }

  /**
   * Creates or removes criteria. Operation statuses are returned. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CriterionError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose criteria are being modified.
   */
  async customersCustomerNegativeCriteriaMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerNegativeCriteria:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResponse;
  }

  /**
   * Creates or updates the CustomerSkAdNetworkConversionValueSchema. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [InternalError]() [MutateError]()
   *
   * @param customerId The ID of the customer whose shared sets are being modified.
   */
  async customersCustomerSkAdNetworkConversionValueSchemasMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerSkAdNetworkConversionValueSchemas:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse;
  }

  /**
   * Updates, removes permission of a user on a given customer. Operation
   * statuses are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [CustomerUserAccessError]() [FieldMaskError]()
   * [HeaderError]() [InternalError]() [MutateError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersCustomerUserAccessesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerUserAccessResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerUserAccesses:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerUserAccessResponse;
  }

  /**
   * Creates or removes an access invitation. List of thrown errors:
   * [AccessInvitationError]() [AuthenticationError]() [AuthorizationError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose access invitation is being modified.
   */
  async customersCustomerUserAccessInvitationsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customerUserAccessInvitations:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationResponse;
  }

  /**
   * Creates or updates custom interests. Operation statuses are returned. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CriterionError]() [CustomInterestError]() [HeaderError]()
   * [InternalError]() [MutateError]() [PolicyViolationError]() [QuotaError]()
   * [RequestError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose custom interests are being modified.
   */
  async customersCustomInterestsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomInterestsRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomInterestsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomInterestsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customInterests:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomInterestsResponse;
  }

  /**
   * Creates, updates or removes customizer attributes. Operation statuses are
   * returned.
   *
   * @param customerId Required. The ID of the customer whose customizer attributes are being modified.
   */
  async customersCustomizerAttributesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomizerAttributesResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/customizerAttributes:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomizerAttributesResponse;
  }

  /**
   * Creates a data link. The requesting Google Ads account name and account ID
   * will be shared with the third party (such as YouTube creators for video
   * links) to whom you are creating the link with. Only customers on the
   * allow-list can create data links. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [DatabaseError]()
   * [DataLinkError]() [FieldError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer for which the data link is created.
   */
  async customersDataLinksCreate(customerId: string, req: GoogleAdsSearchads360V23Services__CreateDataLinkRequest): Promise<GoogleAdsSearchads360V23Services__CreateDataLinkResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/dataLinks:create`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateDataLinkResponse;
  }

  /**
   * Remove a data link. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [DataLinkError]() [FieldError]()
   * [HeaderError]() [InternalError]() [MutateError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer for which the data link is updated.
   */
  async customersDataLinksRemove(customerId: string, req: GoogleAdsSearchads360V23Services__RemoveDataLinkRequest): Promise<GoogleAdsSearchads360V23Services__RemoveDataLinkResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/dataLinks:remove`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__RemoveDataLinkResponse;
  }

  /**
   * Update a data link. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [DataLinkError]() [FieldError]()
   * [HeaderError]() [InternalError]() [MutateError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer for which the data link is created.
   */
  async customersDataLinksUpdate(customerId: string, req: GoogleAdsSearchads360V23Services__UpdateDataLinkRequest): Promise<GoogleAdsSearchads360V23Services__UpdateDataLinkResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/dataLinks:update`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__UpdateDataLinkResponse;
  }

  /**
   * Creates, updates, or removes experiment arms. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ExperimentArmError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose experiments are being modified.
   */
  async customersExperimentArmsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateExperimentArmsRequest): Promise<GoogleAdsSearchads360V23Services__MutateExperimentArmsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateExperimentArmsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/experimentArms:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmsResponse(data);
  }

  /**
   * Immediately ends an experiment, changing the experiment's scheduled end
   * date and without waiting for end of day. End date is updated to be the time
   * of the request. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ExperimentError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param experiment Required. The resource name of the campaign experiment to end.
   */
  async customersExperimentsEndExperiment(experiment: string, req: GoogleAdsSearchads360V23Services__EndExperimentRequest): Promise<GoogleProtobuf__Empty> {
    const url = new URL(`${this.#baseUrl}v23/${ experiment }:endExperiment`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleProtobuf__Empty;
  }

  /**
   * Graduates an experiment to a full campaign. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [ExperimentError]()
   * [HeaderError]() [InternalError]() [MutateError]() [QuotaError]()
   * [RequestError]()
   *
   * @param experiment Required. The experiment to be graduated.
   */
  async customersExperimentsGraduateExperiment(experiment: string, req: GoogleAdsSearchads360V23Services__GraduateExperimentRequest): Promise<GoogleProtobuf__Empty> {
    const url = new URL(`${this.#baseUrl}v23/${ experiment }:graduateExperiment`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleProtobuf__Empty;
  }

  /**
   * Returns all errors that occurred during the last Experiment update (either
   * scheduling or promotion). Supports standard list paging. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The name of the experiment from which to retrieve the async errors.
   */
  async customersExperimentsListExperimentAsyncErrors(resourceName: string, opts: CustomersExperimentsListExperimentAsyncErrorsOptions = {}): Promise<GoogleAdsSearchads360V23Services__ListExperimentAsyncErrorsResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:listExperimentAsyncErrors`);
    if (opts.pageSize !== undefined) {
      url.searchParams.append("pageSize", String(opts.pageSize));
    }
    if (opts.pageToken !== undefined) {
      url.searchParams.append("pageToken", String(opts.pageToken));
    }
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListExperimentAsyncErrorsResponse;
  }

  /**
   * Creates, updates, or removes experiments. Operation statuses are returned.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [ExperimentError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose experiments are being modified.
   */
  async customersExperimentsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateExperimentsRequest): Promise<GoogleAdsSearchads360V23Services__MutateExperimentsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateExperimentsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/experiments:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateExperimentsResponse;
  }

  /**
   * Promotes the trial campaign thus applying changes in the trial campaign to
   * the base campaign. This method returns a long running operation that tracks
   * the promotion of the experiment campaign. If it fails, a list of errors can
   * be retrieved using the ListExperimentAsyncErrors method. The operation's
   * metadata will be a string containing the resource name of the created
   * experiment. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ExperimentError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The resource name of the experiment to promote.
   */
  async customersExperimentsPromoteExperiment(resourceName: string, req: GoogleAdsSearchads360V23Services__PromoteExperimentRequest): Promise<GoogleLongrunning__Operation> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:promoteExperiment`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleLongrunning__Operation;
  }

  /**
   * Schedule an experiment. The in design campaign will be converted into a
   * real campaign (called the experiment campaign) that will begin serving ads
   * if successfully created. The experiment is scheduled immediately with
   * status INITIALIZING. This method returns a long running operation that
   * tracks the forking of the in design campaign. If the forking fails, a list
   * of errors can be retrieved using the ListExperimentAsyncErrors method. The
   * operation's metadata will be a string containing the resource name of the
   * created experiment. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [ExperimentError]() [DatabaseError]() [DateError]()
   * [DateRangeError]() [FieldError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RangeError]() [RequestError]()
   *
   * @param resourceName Required. The scheduled experiment.
   */
  async customersExperimentsScheduleExperiment(resourceName: string, req: GoogleAdsSearchads360V23Services__ScheduleExperimentRequest): Promise<GoogleLongrunning__Operation> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:scheduleExperiment`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleLongrunning__Operation;
  }

  /**
   * Returns a list of suggested AdGroups and suggested modifications (text,
   * match type) for the given keywords. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateAdGroupThemes(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateAdGroupThemesRequest): Promise<GoogleAdsSearchads360V23Services__GenerateAdGroupThemesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateAdGroupThemes`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__GenerateAdGroupThemesResponse;
  }

  /**
   * Returns a collection of attributes that are represented in an audience of
   * interest, with metrics that compare each attribute's share of the audience
   * with its share of a baseline audience. List of thrown errors:
   * [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateAudienceCompositionInsights(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateAudienceCompositionInsights`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse(data);
  }

  /**
   * Returns a collection of audience attributes using generative AI based on
   * the provided audience description. List of thrown errors:
   * [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateAudienceDefinition(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionRequest): Promise<GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateAudienceDefinition`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse(data);
  }

  /**
   * Returns a collection of audience attributes along with estimates of the
   * overlap between their potential YouTube reach and that of a given input
   * attribute. List of thrown errors: [AudienceInsightsError]()
   * [AuthenticationError]() [AuthorizationError]() [FieldError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RangeError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateAudienceOverlapInsights(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateAudienceOverlapInsights`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse(data);
  }

  /**
   * Returns YouTube advertisement metrics for the given client against
   * industry benchmarks. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [BenchmarksError]() [FieldError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer. Supply a client customer ID to generate metrics for the customer. A manager account customer ID will not return customer metrics since it does not have any associated direct ad campaigns.
   */
  async customersGenerateBenchmarksMetrics(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateBenchmarksMetrics`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsResponse;
  }

  /**
   * Creates a saved report that can be viewed in the Insights Finder tool.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateInsightsFinderReport(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateInsightsFinderReportRequest): Promise<GoogleAdsSearchads360V23Services__GenerateInsightsFinderReportResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateInsightsFinderReport`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__GenerateInsightsFinderReportResponse;
  }

  /**
   * Returns metrics (such as impressions, clicks, total cost) of a keyword
   * forecast for the given campaign. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId The ID of the customer.
   */
  async customersGenerateKeywordForecastMetrics(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateKeywordForecastMetrics`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse(data);
  }

  /**
   * Returns a list of keyword historical metrics. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId The ID of the customer with the recommendation.
   */
  async customersGenerateKeywordHistoricalMetrics(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateKeywordHistoricalMetrics`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse(data);
  }

  /**
   * Returns a list of keyword ideas. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [HeaderError]() [InternalError]() [KeywordPlanIdeaError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId The ID of the customer with the recommendation.
   */
  async customersGenerateKeywordIdeas(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest): Promise<GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateKeywordIdeas`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse(data);
  }

  /**
   * Generates a reach forecast for a given targeting / product mix. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [ReachPlanError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateReachForecast(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateReachForecastRequest): Promise<GoogleAdsSearchads360V23Services__GenerateReachForecastResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateReachForecastRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateReachForecast`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateReachForecastResponse(data);
  }

  /**
   * Returns a collection of targeting insights (e.g. targetable audiences)
   * that are relevant to the requested audience. List of thrown errors:
   * [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateSuggestedTargetingInsights(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateSuggestedTargetingInsights`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse(data);
  }

  /**
   * Returns potential reach metrics for targetable audiences. This method
   * helps answer questions like "How many Men aged 18+ interested in Camping
   * can be reached on YouTube?" List of thrown errors:
   * [AudienceInsightsError]() [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersGenerateTargetingSuggestionMetrics(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:generateTargetingSuggestionMetrics`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse(data);
  }

  /**
   * Returns Identity Verification information. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer for whom we are requesting verification information.
   */
  async customersGetIdentityVerification(customerId: string): Promise<GoogleAdsSearchads360V23Services__GetIdentityVerificationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/getIdentityVerification`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__GetIdentityVerificationResponse;
  }

  /**
   * Create or update goals. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]() [GoalError]() [GoalServicesError]()
   *
   * @param customerId Required. The ID of the customer whose goals are being modified.
   */
  async customersGoalsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateGoalsRequest): Promise<GoogleAdsSearchads360V23Services__MutateGoalsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateGoalsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/Goals:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateGoalsResponse;
  }

  /**
   * Applies the incentive for the ads customer.
   *
   * @param customerId The customer ID of the account that the incentive is being applied to.
   * @param selectedIncentiveId The incentive ID of this incentive. This is used to identify which incentive is selected by the user in the CYO flow.
   */
  async customersIncentivesApplyIncentive(customerId: string, selectedIncentiveId: bigint, req: GoogleAdsSearchads360V23Services__ApplyIncentiveRequest): Promise<GoogleAdsSearchads360V23Services__ApplyIncentiveResponse> {
    selectedIncentiveId = String(selectedIncentiveId);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/incentives/${ selectedIncentiveId }:applyIncentive`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ApplyIncentiveResponse;
  }

  /**
   * Returns all invoices associated with a billing setup, for a given month.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [InvoiceError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer to fetch invoices for.
   */
  async customersInvoicesList(customerId: string, opts: CustomersInvoicesListOptions = {}): Promise<GoogleAdsSearchads360V23Services__ListInvoicesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/invoices`);
    if (opts.billingSetup !== undefined) {
      url.searchParams.append("billingSetup", String(opts.billingSetup));
    }
    if (opts.includeGranularLevelInvoiceDetails !== undefined) {
      url.searchParams.append("includeGranularLevelInvoiceDetails", String(opts.includeGranularLevelInvoiceDetails));
    }
    if (opts.issueMonth !== undefined) {
      url.searchParams.append("issueMonth", String(opts.issueMonth));
    }
    if (opts.issueYear !== undefined) {
      url.searchParams.append("issueYear", String(opts.issueYear));
    }
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListInvoicesResponse;
  }

  /**
   * Creates, updates, or removes Keyword Plan ad group keywords. Operation
   * statuses are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [KeywordPlanAdGroupKeywordError]() [KeywordPlanError]()
   * [MutateError]() [QuotaError]() [RequestError]()
   * [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer whose Keyword Plan ad group keywords are being modified.
   */
  async customersKeywordPlanAdGroupKeywordsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest): Promise<GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/keywordPlanAdGroupKeywords:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsResponse;
  }

  /**
   * Creates, updates, or removes Keyword Plan ad groups. Operation statuses
   * are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]()
   * [HeaderError]() [InternalError]() [KeywordPlanAdGroupError]()
   * [KeywordPlanError]() [MutateError]() [NewResourceCreationError]()
   * [QuotaError]() [RequestError]() [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer whose Keyword Plan ad groups are being modified.
   */
  async customersKeywordPlanAdGroupsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest): Promise<GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/keywordPlanAdGroups:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsResponse;
  }

  /**
   * Creates, updates, or removes Keyword Plan campaign keywords. Operation
   * statuses are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [KeywordPlanAdGroupKeywordError]()
   * [KeywordPlanCampaignKeywordError]() [QuotaError]() [RequestError]()
   * [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer whose campaign keywords are being modified.
   */
  async customersKeywordPlanCampaignKeywordsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest): Promise<GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/keywordPlanCampaignKeywords:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsResponse;
  }

  /**
   * Creates, updates, or removes Keyword Plan campaigns. Operation statuses
   * are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [FieldMaskError]()
   * [HeaderError]() [InternalError]() [KeywordPlanCampaignError]()
   * [KeywordPlanError]() [ListOperationError]() [MutateError]() [QuotaError]()
   * [RangeError]() [RequestError]() [ResourceCountLimitExceededError]()
   *
   * @param customerId Required. The ID of the customer whose Keyword Plan campaigns are being modified.
   */
  async customersKeywordPlanCampaignsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest): Promise<GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/keywordPlanCampaigns:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsResponse;
  }

  /**
   * Creates, updates, or removes keyword plans. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [KeywordPlanError]() [MutateError]()
   * [NewResourceCreationError]() [QuotaError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose keyword plans are being modified.
   */
  async customersKeywordPlansMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateKeywordPlansRequest): Promise<GoogleAdsSearchads360V23Services__MutateKeywordPlansResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateKeywordPlansRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/keywordPlans:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateKeywordPlansResponse;
  }

  /**
   * Creates, updates, or removes labels. Operation statuses are returned. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [DateError]() [DistinctError]() [FieldError]()
   * [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]()
   * [LabelError]() [MutateError]() [NewResourceCreationError]()
   * [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]()
   * [RangeError]() [RequestError]() [ResourceCountLimitExceededError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. ID of the customer whose labels are being modified.
   */
  async customersLabelsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateLabelsRequest): Promise<GoogleAdsSearchads360V23Services__MutateLabelsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateLabelsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/labels:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateLabelsResponse;
  }

  /**
   * Returns resource names of customers directly accessible by the user
   * authenticating the call. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   */
  async customersListAccessibleCustomers(): Promise<GoogleAdsSearchads360V23Services__ListAccessibleCustomersResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers:listAccessibleCustomers`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListAccessibleCustomersResponse;
  }

  /**
   * RPC to append Local Services Lead Conversation resources to Local Services
   * Lead resources.
   *
   * @param customerId Required. The Id of the customer which owns the leads onto which the conversations will be appended.
   */
  async customersLocalServicesAppendLeadConversation(customerId: string, req: GoogleAdsSearchads360V23Services__AppendLeadConversationRequest): Promise<GoogleAdsSearchads360V23Services__AppendLeadConversationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/localServices:appendLeadConversation`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__AppendLeadConversationResponse;
  }

  /**
   * RPC to provide feedback on Local Services Lead resources.
   *
   * @param resourceName Required. The resource name of the local services lead that for which the feedback is being provided.
   */
  async customersLocalServicesLeadsProvideLeadFeedback(resourceName: string, req: GoogleAdsSearchads360V23Services__ProvideLeadFeedbackRequest): Promise<GoogleAdsSearchads360V23Services__ProvideLeadFeedbackResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:provideLeadFeedback`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ProvideLeadFeedbackResponse;
  }

  /**
   * Updates a customer. Operation statuses are returned. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [DatabaseError]()
   * [FieldMaskError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]() [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateCustomerRequest): Promise<GoogleAdsSearchads360V23Services__MutateCustomerResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateCustomerRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateCustomerResponse;
  }

  /**
   * Adds operations to the offline user data job. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [DatabaseError]()
   * [FieldError]() [HeaderError]() [InternalError]() [MutateError]()
   * [OfflineUserDataJobError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The resource name of the OfflineUserDataJob.
   */
  async customersOfflineUserDataJobsAddOperations(resourceName: string, req: GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest): Promise<GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:addOperations`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsResponse;
  }

  /**
   * Creates an offline user data job. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [DatabaseError]()
   * [FieldError]() [HeaderError]() [InternalError]() [NotAllowlistedError]()
   * [OfflineUserDataJobError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer for which to create an offline user data job.
   */
  async customersOfflineUserDataJobsCreate(customerId: string, req: GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest): Promise<GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobResponse> {
    req = serializeGoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/offlineUserDataJobs:create`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobResponse;
  }

  /**
   * Runs the offline user data job. When finished, the long running operation
   * will contain the processing result or failure information, if any. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [HeaderError]() [InternalError]()
   * [OfflineUserDataJobError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The resource name of the OfflineUserDataJob to run.
   */
  async customersOfflineUserDataJobsRun(resourceName: string, req: GoogleAdsSearchads360V23Services__RunOfflineUserDataJobRequest): Promise<GoogleLongrunning__Operation> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:run`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleLongrunning__Operation;
  }

  /**
   * Returns all payments accounts associated with all managers between the
   * login customer ID and specified serving customer in the hierarchy,
   * inclusive. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]()
   * [PaymentsAccountError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer to apply the PaymentsAccount list operation to.
   */
  async customersPaymentsAccountsList(customerId: string): Promise<GoogleAdsSearchads360V23Services__ListPaymentsAccountsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/paymentsAccounts`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__ListPaymentsAccountsResponse;
  }

  /**
   * Creates a product link invitation.
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersProductLinkInvitationsCreate(customerId: string, req: GoogleAdsSearchads360V23Services__CreateProductLinkInvitationRequest): Promise<GoogleAdsSearchads360V23Services__CreateProductLinkInvitationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/productLinkInvitations:create`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateProductLinkInvitationResponse;
  }

  /**
   * Remove a product link invitation.
   *
   * @param customerId Required. The ID of the product link invitation being removed.
   */
  async customersProductLinkInvitationsRemove(customerId: string, req: GoogleAdsSearchads360V23Services__RemoveProductLinkInvitationRequest): Promise<GoogleAdsSearchads360V23Services__RemoveProductLinkInvitationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/productLinkInvitations:remove`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__RemoveProductLinkInvitationResponse;
  }

  /**
   * Update a product link invitation.
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersProductLinkInvitationsUpdate(customerId: string, req: GoogleAdsSearchads360V23Services__UpdateProductLinkInvitationRequest): Promise<GoogleAdsSearchads360V23Services__UpdateProductLinkInvitationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/productLinkInvitations:update`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__UpdateProductLinkInvitationResponse;
  }

  /**
   * Creates a product link. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [DatabaseError]() [FieldError]() [HeaderError]()
   * [InternalError]() [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer for which the product link is created.
   */
  async customersProductLinksCreate(customerId: string, req: GoogleAdsSearchads360V23Services__CreateProductLinkRequest): Promise<GoogleAdsSearchads360V23Services__CreateProductLinkResponse> {
    req = serializeGoogleAdsSearchads360V23Services__CreateProductLinkRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/productLinks:create`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__CreateProductLinkResponse;
  }

  /**
   * Removes a product link. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [FieldMaskError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer being modified.
   */
  async customersProductLinksRemove(customerId: string, req: GoogleAdsSearchads360V23Services__RemoveProductLinkRequest): Promise<GoogleAdsSearchads360V23Services__RemoveProductLinkResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/productLinks:remove`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__RemoveProductLinkResponse;
  }

  /**
   * Applies given recommendations with corresponding apply parameters. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RecommendationError]() [RequestError]()
   * [UrlFieldError]()
   *
   * @param customerId Required. The ID of the customer with the recommendation.
   */
  async customersRecommendationsApply(customerId: string, req: GoogleAdsSearchads360V23Services__ApplyRecommendationRequest): Promise<GoogleAdsSearchads360V23Services__ApplyRecommendationResponse> {
    req = serializeGoogleAdsSearchads360V23Services__ApplyRecommendationRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/recommendations:apply`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ApplyRecommendationResponse;
  }

  /**
   * Dismisses given recommendations. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RecommendationError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer with the recommendation.
   */
  async customersRecommendationsDismiss(customerId: string, req: GoogleAdsSearchads360V23Services__DismissRecommendationRequest): Promise<GoogleAdsSearchads360V23Services__DismissRecommendationResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/recommendations:dismiss`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__DismissRecommendationResponse;
  }

  /**
   * Generates Recommendations based off the requested recommendation_types.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RecommendationError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer generating recommendations.
   */
  async customersRecommendationsGenerate(customerId: string, req: GoogleAdsSearchads360V23Services__GenerateRecommendationsRequest): Promise<GoogleAdsSearchads360V23Services__GenerateRecommendationsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__GenerateRecommendationsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/recommendations:generate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__GenerateRecommendationsResponse;
  }

  /**
   * Mutates given subscription with corresponding apply parameters. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [FieldError]() [HeaderError]() [InternalError]()
   * [MutateError]() [QuotaError]() [RecommendationError]()
   * [RecommendationSubscriptionError]() [RequestError]() [UrlFieldError]()
   *
   * @param customerId Required. The ID of the subscribing customer.
   */
  async customersRecommendationSubscriptionsMutateRecommendationSubscription(customerId: string, req: GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest): Promise<GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/recommendationSubscriptions:mutateRecommendationSubscription`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResponse;
  }

  /**
   * Creates or updates remarketing actions. Operation statuses are returned.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [ConversionActionError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose remarketing actions are being modified.
   */
  async customersRemarketingActionsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest): Promise<GoogleAdsSearchads360V23Services__MutateRemarketingActionsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/remarketingActions:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateRemarketingActionsResponse;
  }

  /**
   * Removes automatically created assets from a campaign. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [ContextError]()
   * [FieldError]() [InternalError]() [MutateError]() [PartialFailureError]()
   * [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose assets are being removed.
   */
  async customersRemoveCampaignAutomaticallyCreatedAsset(customerId: string, req: GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetRequest): Promise<GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:removeCampaignAutomaticallyCreatedAsset`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetResponse;
  }

  /**
   * This method is essentially a wrapper around a series of mutate methods.
   * The only features it offers over calling those methods directly are: -
   * Atomic transactions - Temp resource names (described below) - Somewhat
   * reduced latency over making a series of mutate calls Note: Only resources
   * that support atomic transactions are included, so this method can't replace
   * all calls to individual services. ## Atomic Transaction Benefits Atomicity
   * makes error handling much easier. If you're making a series of changes and
   * one fails, it can leave your account in an inconsistent state. With
   * atomicity, you either reach the chosen state directly, or the request fails
   * and you can retry. ## Temp Resource Names Temp resource names are a special
   * type of resource name used to create a resource and reference that resource
   * in the same request. For example, if a is created with `resource_name`
   * equal to ``, that resource name can be reused in the `` field in the same
   * request. That way, the two resources are created and linked atomically. To
   * create a temp resource name, put a negative number in the part of the name
   * that the server would normally allocate. Note: - Resources must be created
   * with a temp name before the name can be reused. For example, the previous
   * example would fail if the mutate order was reversed. - Temp names are not
   * remembered across requests. - There's no limit to the number of temp names
   * in a request. - Each temp name must use a unique negative number, even if
   * the resource types differ. ## Latency It's important to group mutates by
   * resource type or the request may time out and fail. Latency is roughly
   * equal to a series of calls to individual mutate methods, where each change
   * in resource type is a new call. For example, mutating is like 2 calls,
   * while mutating is like 4 calls. List of thrown errors:
   * [AdCustomizerError]() [AdError]() [AdGroupAdError]()
   * [AdGroupCriterionError]() [AdGroupError]() [AssetError]()
   * [AuthenticationError]() [AuthorizationError]() [BiddingError]()
   * [CampaignBudgetError]() [CampaignCriterionError]() [CampaignError]()
   * [CampaignExperimentError]() [CampaignSharedSetError]()
   * [CollectionSizeError]() [ContextError]() [ConversionActionError]()
   * [CriterionError]() [CustomerFeedError]() [DatabaseError]() [DateError]()
   * [DateRangeError]() [DistinctError]() [ExtensionFeedItemError]()
   * [ExtensionSettingError]() [FeedAttributeReferenceError]() [FeedError]()
   * [FeedItemError]() [FeedItemSetError]() [FieldError]() [FieldMaskError]()
   * [FunctionParsingError]() [HeaderError]() [ImageError]() [InternalError]()
   * [KeywordPlanAdGroupKeywordError]() [KeywordPlanCampaignError]()
   * [KeywordPlanError]() [LabelError]() [ListOperationError]()
   * [MediaUploadError]() [MutateError]() [NewResourceCreationError]()
   * [NullError]() [OperationAccessDeniedError]() [PolicyFindingError]()
   * [PolicyViolationError]() [QuotaError]() [RangeError]() [RequestError]()
   * [ResourceCountLimitExceededError]() [SettingError]() [SharedSetError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   * [UrlFieldError]() [UserListError]() [YoutubeVideoRegistrationError]()
   *
   * @param customerId Required. The ID of the customer whose resources are being modified.
   */
  async customersSearchAds360Mutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateSearchAds360Request): Promise<GoogleAdsSearchads360V23Services__MutateSearchAds360Response> {
    req = serializeGoogleAdsSearchads360V23Services__MutateSearchAds360Request(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/searchAds360:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateSearchAds360Response(data);
  }

  /**
   * Returns all rows that match the search query. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [ChangeEventError]()
   * [ChangeStatusError]() [ClickViewError]() [HeaderError]() [InternalError]()
   * [QueryError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer being queried.
   */
  async customersSearchAds360Search(customerId: string, req: GoogleAdsSearchads360V23Services__SearchSearchAds360Request): Promise<GoogleAdsSearchads360V23Services__SearchSearchAds360Response> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/searchAds360:search`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__SearchSearchAds360Response(data);
  }

  /**
   * Searches for audience attributes that can be used to generate insights.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersSearchAudienceInsightsAttributes(customerId: string, req: GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesRequest): Promise<GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:searchAudienceInsightsAttributes`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse(data);
  }

  /**
   * Creates or removes shared criteria. Operation statuses are returned. List
   * of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CriterionError]() [DatabaseError]() [DistinctError]() [FieldError]()
   * [HeaderError]() [IdError]() [InternalError]() [MutateError]()
   * [NotEmptyError]() [NullError]() [OperatorError]() [QuotaError]()
   * [RangeError]() [RequestError]() [ResourceCountLimitExceededError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose shared criteria are being modified.
   */
  async customersSharedCriteriaMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest): Promise<GoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/sharedCriteria:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse(data);
  }

  /**
   * Creates, updates, or removes shared sets. Operation statuses are returned.
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [DatabaseError]() [DateError]() [DistinctError]() [FieldError]()
   * [FieldMaskError]() [HeaderError]() [IdError]() [InternalError]()
   * [MutateError]() [NewResourceCreationError]() [NotEmptyError]()
   * [NullError]() [OperatorError]() [QuotaError]() [RangeError]()
   * [RequestError]() [ResourceCountLimitExceededError]() [SharedSetError]()
   * [SizeLimitError]() [StringFormatError]() [StringLengthError]()
   *
   * @param customerId Required. The ID of the customer whose shared sets are being modified.
   */
  async customersSharedSetsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateSharedSetsRequest): Promise<GoogleAdsSearchads360V23Services__MutateSharedSetsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateSharedSetsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/sharedSets:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateSharedSetsResponse;
  }

  /**
   * Returns the status of the requested Smart campaign.
   *
   * @param resourceName Required. The resource name of the Smart campaign setting belonging to the Smart campaign to fetch the status of.
   */
  async customersSmartCampaignSettingsGetSmartCampaignStatus(resourceName: string): Promise<GoogleAdsSearchads360V23Services__GetSmartCampaignStatusResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:getSmartCampaignStatus`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Services__GetSmartCampaignStatusResponse;
  }

  /**
   * Updates Smart campaign settings for campaigns.
   *
   * @param customerId Required. The ID of the customer whose Smart campaign settings are being modified.
   */
  async customersSmartCampaignSettingsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest): Promise<GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/smartCampaignSettings:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsResponse;
  }

  /**
   * Starts Identity Verification for a given verification program type.
   * Statuses are returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   * @param customerId Required. The Id of the customer for whom we are creating this verification.
   */
  async customersStartIdentityVerification(customerId: string, req: GoogleAdsSearchads360V23Services__StartIdentityVerificationRequest): Promise<GoogleProtobuf__Empty> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:startIdentityVerification`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleProtobuf__Empty;
  }

  /**
   * Suggests keyword themes to advertise on.
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersSuggestKeywordThemes(customerId: string, req: GoogleAdsSearchads360V23Services__SuggestKeywordThemesRequest): Promise<GoogleAdsSearchads360V23Services__SuggestKeywordThemesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:suggestKeywordThemes`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__SuggestKeywordThemesResponse;
  }

  /**
   * Suggests a Smart campaign ad compatible with the Ad family of resources,
   * based on data points such as targeting and the business to advertise.
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersSuggestSmartCampaignAd(customerId: string, req: GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdRequest): Promise<GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:suggestSmartCampaignAd`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse(data);
  }

  /**
   * Returns BudgetOption suggestions.
   *
   * @param customerId Required. The ID of the customer whose budget options are to be suggested.
   */
  async customersSuggestSmartCampaignBudgetOptions(customerId: string, req: GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsRequest): Promise<GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:suggestSmartCampaignBudgetOptions`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse(data);
  }

  /**
   * Returns Travel Asset suggestions. Asset suggestions are returned on a
   * best-effort basis. There are no guarantees that all possible asset types
   * will be returned for any given hotel property.
   *
   * @param customerId Required. The ID of the customer.
   */
  async customersSuggestTravelAssets(customerId: string, req: GoogleAdsSearchads360V23Services__SuggestTravelAssetsRequest): Promise<GoogleAdsSearchads360V23Services__SuggestTravelAssetsResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:suggestTravelAssets`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__SuggestTravelAssetsResponse;
  }

  /**
   * Regenerate ThirdPartyAppAnalyticsLink.shareable_link_id that should be
   * provided to the third party when setting up app analytics. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Resource name of the third party app analytics link.
   */
  async customersThirdPartyAppAnalyticsLinksRegenerateShareableLinkId(resourceName: string, req: GoogleAdsSearchads360V23Services__RegenerateShareableLinkIdRequest): Promise<GoogleAdsSearchads360V23Services__RegenerateShareableLinkIdResponse> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }:regenerateShareableLinkId`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__RegenerateShareableLinkIdResponse;
  }

  /**
   * Uploads the given user data. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [CollectionSizeError]()
   * [FieldError]() [HeaderError]() [InternalError]() [MutateError]()
   * [OfflineUserDataJobError]() [QuotaError]() [RequestError]()
   * [UserDataError]()
   *
   * @param customerId Required. The ID of the customer for which to update the user data.
   */
  async customersUploadUserData(customerId: string, req: GoogleAdsSearchads360V23Services__UploadUserDataRequest): Promise<GoogleAdsSearchads360V23Services__UploadUserDataResponse> {
    req = serializeGoogleAdsSearchads360V23Services__UploadUserDataRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }:uploadUserData`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__UploadUserDataResponse;
  }

  /**
   * Attach or remove user list customer types. Operation statuses are
   * returned. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [UserListCustomerTypeError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param customerId Required. The ID of the customer whose user list customer types are being modified.
   */
  async customersUserListCustomerTypesMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateUserListCustomerTypesRequest): Promise<GoogleAdsSearchads360V23Services__MutateUserListCustomerTypesResponse> {
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/userListCustomerTypes:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateUserListCustomerTypesResponse;
  }

  /**
   * Creates or updates user lists. Operation statuses are returned. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [CollectionSizeError]() [DatabaseError]() [DistinctError]() [FieldError]()
   * [FieldMaskError]() [HeaderError]() [InternalError]() [MutateError]()
   * [NewResourceCreationError]() [NotAllowlistedError]() [NotEmptyError]()
   * [OperationAccessDeniedError]() [QuotaError]() [RangeError]()
   * [RequestError]() [StringFormatError]() [StringLengthError]()
   * [UserListError]()
   *
   * @param customerId Required. The ID of the customer whose user lists are being modified.
   */
  async customersUserListsMutate(customerId: string, req: GoogleAdsSearchads360V23Services__MutateUserListsRequest): Promise<GoogleAdsSearchads360V23Services__MutateUserListsResponse> {
    req = serializeGoogleAdsSearchads360V23Services__MutateUserListsRequest(req);
    const url = new URL(`${this.#baseUrl}v23/customers/${ customerId }/userLists:mutate`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__MutateUserListsResponse;
  }

  /**
   * Returns GeoTargetConstant suggestions by location name or by resource
   * name. List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [GeoTargetConstantSuggestionError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RequestError]()
   *
   */
  async geoTargetConstantsSuggest(req: GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsRequest): Promise<GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse> {
    const url = new URL(`${this.#baseUrl}v23/geoTargetConstants:suggest`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse(data);
  }

  /**
   * Returns incentives for a given user.
   *
   */
  async incentivesFetchIncentive(opts: IncentivesFetchIncentiveOptions = {}): Promise<GoogleAdsSearchads360V23Services__FetchIncentiveResponse> {
    const url = new URL(`${this.#baseUrl}v23/incentives:fetchIncentive`);
    if (opts.countryCode !== undefined) {
      url.searchParams.append("countryCode", String(opts.countryCode));
    }
    if (opts.email !== undefined) {
      url.searchParams.append("email", String(opts.email));
    }
    if (opts.languageCode !== undefined) {
      url.searchParams.append("languageCode", String(opts.languageCode));
    }
    if (opts.type !== undefined) {
      url.searchParams.append("type", String(opts.type));
    }
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return deserializeGoogleAdsSearchads360V23Services__FetchIncentiveResponse(data);
  }

  /**
   * Returns KeywordThemeConstant suggestions by keyword themes. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   */
  async keywordThemeConstantsSuggest(req: GoogleAdsSearchads360V23Services__SuggestKeywordThemeConstantsRequest): Promise<GoogleAdsSearchads360V23Services__SuggestKeywordThemeConstantsResponse> {
    const url = new URL(`${this.#baseUrl}v23/keywordThemeConstants:suggest`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__SuggestKeywordThemeConstantsResponse;
  }

  /**
   * Returns just the requested field. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [HeaderError]()
   * [InternalError]() [QuotaError]() [RequestError]()
   *
   * @param resourceName Required. The resource name of the field to get.
   */
  async searchAds360FieldsGet(resourceName: string): Promise<GoogleAdsSearchads360V23Resources__SearchAds360Field> {
    const url = new URL(`${this.#baseUrl}v23/${ resourceName }`);
    const data = await request(url.href, {
      client: this.#client,
      method: "GET",
    });
    return data as GoogleAdsSearchads360V23Resources__SearchAds360Field;
  }

  /**
   * Returns all fields that match the search
   * [query](/search-ads/reporting/concepts/field-service#use_a_query_to_get_field_details).
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [HeaderError]() [InternalError]() [QueryError]() [QuotaError]()
   * [RequestError]()
   *
   */
  async searchAds360FieldsSearch(req: GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsRequest): Promise<GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse> {
    const url = new URL(`${this.#baseUrl}v23/searchAds360Fields:search`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse(data);
  }

  /**
   * Returns a collection of conversion rate suggestions for supported
   * plannable products. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   */
  async v23GenerateConversionRates(req: GoogleAdsSearchads360V23Services__GenerateConversionRatesRequest): Promise<GoogleAdsSearchads360V23Services__GenerateConversionRatesResponse> {
    const url = new URL(`${this.#baseUrl}v23:generateConversionRates`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__GenerateConversionRatesResponse;
  }

  /**
   * Returns a date range that supports benchmarks. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [FieldError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   */
  async v23ListBenchmarksAvailableDates(req: GoogleAdsSearchads360V23Services__ListBenchmarksAvailableDatesRequest): Promise<GoogleAdsSearchads360V23Services__ListBenchmarksAvailableDatesResponse> {
    const url = new URL(`${this.#baseUrl}v23:listBenchmarksAvailableDates`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListBenchmarksAvailableDatesResponse;
  }

  /**
   * Returns the list of locations that support benchmarks (for example,
   * countries). List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [FieldError]() [HeaderError]() [InternalError]()
   * [QuotaError]() [RequestError]()
   *
   */
  async v23ListBenchmarksLocations(req: GoogleAdsSearchads360V23Services__ListBenchmarksLocationsRequest): Promise<GoogleAdsSearchads360V23Services__ListBenchmarksLocationsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listBenchmarksLocations`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListBenchmarksLocationsResponse;
  }

  /**
   * Returns the list of products that supports benchmarks. List of thrown
   * errors: [AuthenticationError]() [AuthorizationError]() [FieldError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   */
  async v23ListBenchmarksProducts(req: GoogleAdsSearchads360V23Services__ListBenchmarksProductsRequest): Promise<GoogleAdsSearchads360V23Services__ListBenchmarksProductsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listBenchmarksProducts`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListBenchmarksProductsResponse;
  }

  /**
   * Returns the list of benchmarks sources (for example, Industry Verticals).
   * List of thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   */
  async v23ListBenchmarksSources(req: GoogleAdsSearchads360V23Services__ListBenchmarksSourcesRequest): Promise<GoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse> {
    const url = new URL(`${this.#baseUrl}v23:listBenchmarksSources`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse(data);
  }

  /**
   * Returns the list of plannable locations (for example, countries). List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [HeaderError]() [InternalError]() [QuotaError]() [RequestError]()
   *
   */
  async v23ListPlannableLocations(req: GoogleAdsSearchads360V23Services__ListPlannableLocationsRequest): Promise<GoogleAdsSearchads360V23Services__ListPlannableLocationsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listPlannableLocations`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__ListPlannableLocationsResponse(data);
  }

  /**
   * Returns the list of per-location plannable YouTube ad formats with allowed
   * targeting. List of thrown errors: [AuthenticationError]()
   * [AuthorizationError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RequestError]()
   *
   */
  async v23ListPlannableProducts(req: GoogleAdsSearchads360V23Services__ListPlannableProductsRequest): Promise<GoogleAdsSearchads360V23Services__ListPlannableProductsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listPlannableProducts`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return deserializeGoogleAdsSearchads360V23Services__ListPlannableProductsResponse(data);
  }

  /**
   * Returns the list of plannable user interests. A plannable user interest is
   * one that can be targeted in a reach forecast using
   * ReachPlanService.GenerateReachForecast. List of thrown errors:
   * [AuthenticationError]() [AuthorizationError]() [FieldError]()
   * [HeaderError]() [InternalError]() [ListOperationError]() [QuotaError]()
   * [RequestError]() [StringLengthError]()
   *
   */
  async v23ListPlannableUserInterests(req: GoogleAdsSearchads360V23Services__ListPlannableUserInterestsRequest): Promise<GoogleAdsSearchads360V23Services__ListPlannableUserInterestsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listPlannableUserInterests`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListPlannableUserInterestsResponse;
  }

  /**
   * Returns the list of plannable user lists with their plannable status. User
   * lists may not be plannable for a number of reasons, including: - They are
   * less than 10 days old. - They have a membership lifespan that is less than
   * 30 days - They have less than 10,000 or more than 700,000 users. List of
   * thrown errors: [AuthenticationError]() [AuthorizationError]()
   * [FieldError]() [HeaderError]() [InternalError]() [QuotaError]()
   * [RangeError]() [ReachPlanError]() [RequestError]()
   *
   */
  async v23ListPlannableUserLists(req: GoogleAdsSearchads360V23Services__ListPlannableUserListsRequest): Promise<GoogleAdsSearchads360V23Services__ListPlannableUserListsResponse> {
    const url = new URL(`${this.#baseUrl}v23:listPlannableUserLists`);
    const body = JSON.stringify(req);
    const data = await request(url.href, {
      client: this.#client,
      method: "POST",
      body,
    });
    return data as GoogleAdsSearchads360V23Services__ListPlannableUserListsResponse;
  }
}

/**
 * Additional options for SearchAds360#customersBatchJobsListResults.
 */
export interface CustomersBatchJobsListResultsOptions {
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. Use the value obtained from `next_page_token` in the
   * previous response in order to request the next page of results.
   */
  pageToken?: string;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
}

/**
 * Additional options for SearchAds360#customersCampaignDraftsListAsyncErrors.
 */
export interface CustomersCampaignDraftsListAsyncErrorsOptions {
  /**
   * Number of elements to retrieve in a single page. When a page request is
   * too large, the server may decide to further limit the number of returned
   * resources.
   */
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. Use the value obtained from `next_page_token` in the
   * previous response in order to request the next page of results.
   */
  pageToken?: string;
}

/**
 * Additional options for
 * SearchAds360#customersExperimentsListExperimentAsyncErrors.
 */
export interface CustomersExperimentsListExperimentAsyncErrorsOptions {
  /**
   * Number of elements to retrieve in a single page. When a page request is
   * too large, the server may decide to further limit the number of returned
   * resources. The maximum page size is 1000.
   */
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. Use the value obtained from `next_page_token` in the
   * previous response in order to request the next page of results.
   */
  pageToken?: string;
}

/**
 * Additional options for SearchAds360#customersInvoicesList.
 */
export interface CustomersInvoicesListOptions {
  /**
   * Required. The billing setup resource name of the requested invoices.
   * `customers/{customer_id}/billingSetups/{billing_setup_id}`
   */
  billingSetup?: string;
  /**
   * Optional. When true, the response will include more granular level invoice
   * details such as campaign level cost breakdown, itemized regulatory costs
   * and adjustments. The default value is false.
   */
  includeGranularLevelInvoiceDetails?: boolean;
  /**
   * Required. The issue month to retrieve invoices.
   */
  issueMonth?:  | "UNSPECIFIED" | "UNKNOWN" | "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER";
  /**
   * Required. The issue year to retrieve invoices, in yyyy format. Only
   * invoices issued in 2019 or later can be retrieved.
   */
  issueYear?: string;
}

/**
 * A generic data container.
 */
export interface GoogleAdsSearchads360V0Common__Value {
  /**
   * A boolean.
   */
  booleanValue?: boolean;
  /**
   * A double.
   */
  doubleValue?: number;
  /**
   * A float.
   */
  floatValue?: number;
  /**
   * An int64.
   */
  int64Value?: bigint;
  /**
   * A string.
   */
  stringValue?: string;
}

function serializeGoogleAdsSearchads360V0Common__Value(data: any): GoogleAdsSearchads360V0Common__Value {
  return {
    ...data,
    int64Value: data["int64Value"] !== undefined ? String(data["int64Value"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V0Common__Value(data: any): GoogleAdsSearchads360V0Common__Value {
  return {
    ...data,
    int64Value: data["int64Value"] !== undefined ? BigInt(data["int64Value"]) : undefined,
  };
}

/**
 * The error reason represented by type and enum.
 */
export interface GoogleAdsSearchads360V0Errors__ErrorCode {
  /**
   * Indicates failure to properly authenticate user.
   */
  authenticationError?:  | "UNSPECIFIED" | "UNKNOWN" | "AUTHENTICATION_ERROR" | "CLIENT_CUSTOMER_ID_INVALID" | "CUSTOMER_NOT_FOUND" | "GOOGLE_ACCOUNT_DELETED" | "GOOGLE_ACCOUNT_COOKIE_INVALID" | "GOOGLE_ACCOUNT_AUTHENTICATION_FAILED" | "GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH" | "LOGIN_COOKIE_REQUIRED" | "NOT_ADS_USER" | "OAUTH_TOKEN_INVALID" | "OAUTH_TOKEN_EXPIRED" | "OAUTH_TOKEN_DISABLED" | "OAUTH_TOKEN_REVOKED" | "OAUTH_TOKEN_HEADER_INVALID" | "LOGIN_COOKIE_INVALID" | "USER_ID_INVALID" | "TWO_STEP_VERIFICATION_NOT_ENROLLED" | "ADVANCED_PROTECTION_NOT_ENROLLED";
  /**
   * An error encountered when trying to authorize a user.
   */
  authorizationError?:  | "UNSPECIFIED" | "UNKNOWN" | "USER_PERMISSION_DENIED" | "PROJECT_DISABLED" | "AUTHORIZATION_ERROR" | "ACTION_NOT_PERMITTED" | "INCOMPLETE_SIGNUP" | "CUSTOMER_NOT_ENABLED" | "MISSING_TOS" | "INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION" | "SERVICE_ACCESS_DENIED" | "ACCESS_DENIED_FOR_ACCOUNT_TYPE" | "METRIC_ACCESS_DENIED";
  /**
   * The reasons for the conversion custom variable error
   */
  conversionCustomVariableError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "DUPLICATE_TAG" | "RESERVED_TAG" | "NOT_FOUND" | "NOT_AVAILABLE" | "INCOMPATIBLE_TYPE" | "INVALID_METRIC" | "EXCEEDS_CARDINALITY_LIMIT" | "INVALID_DIMENSION" | "INCOMPATIBLE_WITH_SELECTED_RESOURCE";
  /**
   * The reasons for the custom column error
   */
  customColumnError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOM_COLUMN_NOT_FOUND" | "CUSTOM_COLUMN_NOT_AVAILABLE";
  /**
   * The reasons for the date error
   */
  dateError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_FIELD_VALUES_IN_DATE" | "INVALID_FIELD_VALUES_IN_DATE_TIME" | "INVALID_STRING_DATE" | "INVALID_STRING_DATE_TIME_MICROS" | "INVALID_STRING_DATE_TIME_SECONDS" | "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET" | "EARLIER_THAN_MINIMUM_DATE" | "LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL";
  /**
   * The reasons for the date range error
   */
  dateRangeError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_DATE" | "START_DATE_AFTER_END_DATE" | "CANNOT_SET_DATE_TO_PAST" | "AFTER_MAXIMUM_ALLOWABLE_DATE" | "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED";
  /**
   * The reasons for the distinct error
   */
  distinctError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_ELEMENT" | "DUPLICATE_TYPE";
  /**
   * The reasons for the header error.
   */
  headerError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_USER_SELECTED_CUSTOMER_ID" | "INVALID_LOGIN_CUSTOMER_ID";
  /**
   * An unexpected server-side error.
   */
  internalError?:  | "UNSPECIFIED" | "UNKNOWN" | "INTERNAL_ERROR" | "ERROR_CODE_NOT_PUBLISHED" | "TRANSIENT_ERROR" | "DEADLINE_EXCEEDED";
  /**
   * The reasons for invalid parameter errors.
   */
  invalidParameterError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_CURRENCY_CODE";
  /**
   * An error with the query
   */
  queryError?:  | "UNSPECIFIED" | "UNKNOWN" | "QUERY_ERROR" | "BAD_ENUM_CONSTANT" | "BAD_ESCAPE_SEQUENCE" | "BAD_FIELD_NAME" | "BAD_LIMIT_VALUE" | "BAD_NUMBER" | "BAD_OPERATOR" | "BAD_PARAMETER_NAME" | "BAD_PARAMETER_VALUE" | "BAD_RESOURCE_TYPE_IN_FROM_CLAUSE" | "BAD_SYMBOL" | "BAD_VALUE" | "DATE_RANGE_TOO_WIDE" | "DATE_RANGE_TOO_NARROW" | "EXPECTED_AND" | "EXPECTED_BY" | "EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE" | "EXPECTED_FILTERS_ON_DATE_RANGE" | "EXPECTED_FROM" | "EXPECTED_LIST" | "EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE" | "EXPECTED_SELECT" | "EXPECTED_SINGLE_VALUE" | "EXPECTED_VALUE_WITH_BETWEEN_OPERATOR" | "INVALID_DATE_FORMAT" | "MISALIGNED_DATE_FOR_FILTER" | "INVALID_STRING_VALUE" | "INVALID_VALUE_WITH_BETWEEN_OPERATOR" | "INVALID_VALUE_WITH_DURING_OPERATOR" | "INVALID_VALUE_WITH_LIKE_OPERATOR" | "OPERATOR_FIELD_MISMATCH" | "PROHIBITED_EMPTY_LIST_IN_CONDITION" | "PROHIBITED_ENUM_CONSTANT" | "PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE" | "PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE" | "PROHIBITED_FIELD_IN_SELECT_CLAUSE" | "PROHIBITED_FIELD_IN_WHERE_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE" | "PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE" | "PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE" | "PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE" | "LIMIT_VALUE_TOO_LOW" | "PROHIBITED_NEWLINE_IN_STRING" | "PROHIBITED_VALUE_COMBINATION_IN_LIST" | "PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR" | "STRING_NOT_TERMINATED" | "TOO_MANY_SEGMENTS" | "UNEXPECTED_END_OF_QUERY" | "UNEXPECTED_FROM_CLAUSE" | "UNRECOGNIZED_FIELD" | "UNEXPECTED_INPUT" | "REQUESTED_METRICS_FOR_MANAGER" | "FILTER_HAS_TOO_MANY_VALUES" | "REQUIRED_SEGMENT_FIELD_MISSING";
  /**
   * An error with the amount of quota remaining.
   */
  quotaError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_EXHAUSTED" | "RESOURCE_TEMPORARILY_EXHAUSTED";
  /**
   * An error caused by the request
   */
  requestError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_NAME_MISSING" | "RESOURCE_NAME_MALFORMED" | "BAD_RESOURCE_ID" | "INVALID_PRODUCT_NAME" | "INVALID_CUSTOMER_ID" | "OPERATION_REQUIRED" | "RESOURCE_NOT_FOUND" | "INVALID_PAGE_TOKEN" | "EXPIRED_PAGE_TOKEN" | "INVALID_PAGE_SIZE" | "REQUIRED_FIELD_MISSING" | "IMMUTABLE_FIELD" | "TOO_MANY_MUTATE_OPERATIONS" | "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT" | "CANNOT_MODIFY_FOREIGN_FIELD" | "INVALID_ENUM_VALUE" | "LOGIN_CUSTOMER_ID_PARAMETER_MISSING" | "LOGIN_OR_LINKED_CUSTOMER_ID_PARAMETER_REQUIRED" | "VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN" | "CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS" | "CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS" | "INCONSISTENT_RETURN_SUMMARY_ROW_VALUE" | "TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED" | "RPC_DEADLINE_TOO_SHORT" | "PRODUCT_NOT_SUPPORTED";
  /**
   * The reasons for the size limit error
   */
  sizeLimitError?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUEST_SIZE_LIMIT_EXCEEDED" | "RESPONSE_SIZE_LIMIT_EXCEEDED";
}

/**
 * Additional error details.
 */
export interface GoogleAdsSearchads360V0Errors__ErrorDetails {
  /**
   * Details on the quota error, including the scope (account or developer),
   * the rate bucket name and the retry delay.
   */
  quotaErrorDetails?: GoogleAdsSearchads360V0Errors__QuotaErrorDetails;
  /**
   * The error code that should have been returned, but wasn't. This is used
   * when the error code is not published in the client specified version.
   */
  unpublishedErrorCode?: string;
}

function serializeGoogleAdsSearchads360V0Errors__ErrorDetails(data: any): GoogleAdsSearchads360V0Errors__ErrorDetails {
  return {
    ...data,
    quotaErrorDetails: data["quotaErrorDetails"] !== undefined ? serializeGoogleAdsSearchads360V0Errors__QuotaErrorDetails(data["quotaErrorDetails"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V0Errors__ErrorDetails(data: any): GoogleAdsSearchads360V0Errors__ErrorDetails {
  return {
    ...data,
    quotaErrorDetails: data["quotaErrorDetails"] !== undefined ? deserializeGoogleAdsSearchads360V0Errors__QuotaErrorDetails(data["quotaErrorDetails"]) : undefined,
  };
}

/**
 * Describes the part of the request proto that caused the error.
 */
export interface GoogleAdsSearchads360V0Errors__ErrorLocation {
  /**
   * A field path that indicates which field was invalid in the request.
   */
  fieldPathElements?: GoogleAdsSearchads360V0Errors_ErrorLocation_FieldPathElement[];
}

/**
 * Additional quota error details when there is QuotaError.
 */
export interface GoogleAdsSearchads360V0Errors__QuotaErrorDetails {
  /**
   * The high level description of the quota bucket. Examples are "Get requests
   * for standard access" or "Requests per account".
   */
  rateName?: string;
  /**
   * The rate scope of the quota limit.
   */
  rateScope?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCOUNT" | "DEVELOPER";
  /**
   * Backoff period that customers should wait before sending next request.
   */
  retryDelay?: number /* Duration */;
}

function serializeGoogleAdsSearchads360V0Errors__QuotaErrorDetails(data: any): GoogleAdsSearchads360V0Errors__QuotaErrorDetails {
  return {
    ...data,
    retryDelay: data["retryDelay"] !== undefined ? data["retryDelay"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V0Errors__QuotaErrorDetails(data: any): GoogleAdsSearchads360V0Errors__QuotaErrorDetails {
  return {
    ...data,
    retryDelay: data["retryDelay"] !== undefined ? data["retryDelay"] : undefined,
  };
}

/**
 * Search Ads 360-specific error.
 */
export interface GoogleAdsSearchads360V0Errors__SearchAds360Error {
  /**
   * Additional error details, which are returned by certain error codes. Most
   * error codes do not include details.
   */
  details?: GoogleAdsSearchads360V0Errors__ErrorDetails;
  /**
   * An enum value that indicates which error occurred.
   */
  errorCode?: GoogleAdsSearchads360V0Errors__ErrorCode;
  /**
   * Describes the part of the request proto that caused the error.
   */
  location?: GoogleAdsSearchads360V0Errors__ErrorLocation;
  /**
   * A human-readable description of the error.
   */
  message?: string;
  /**
   * The value that triggered the error.
   */
  trigger?: GoogleAdsSearchads360V0Common__Value;
}

function serializeGoogleAdsSearchads360V0Errors__SearchAds360Error(data: any): GoogleAdsSearchads360V0Errors__SearchAds360Error {
  return {
    ...data,
    details: data["details"] !== undefined ? serializeGoogleAdsSearchads360V0Errors__ErrorDetails(data["details"]) : undefined,
    trigger: data["trigger"] !== undefined ? serializeGoogleAdsSearchads360V0Common__Value(data["trigger"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V0Errors__SearchAds360Error(data: any): GoogleAdsSearchads360V0Errors__SearchAds360Error {
  return {
    ...data,
    details: data["details"] !== undefined ? deserializeGoogleAdsSearchads360V0Errors__ErrorDetails(data["details"]) : undefined,
    trigger: data["trigger"] !== undefined ? deserializeGoogleAdsSearchads360V0Common__Value(data["trigger"]) : undefined,
  };
}

/**
 * Describes how a Search Ads 360 API call failed. It's returned inside
 * google.rpc.Status.details when a call fails.
 */
export interface GoogleAdsSearchads360V0Errors__SearchAds360Failure {
  /**
   * The list of errors that occurred.
   */
  errors?: GoogleAdsSearchads360V0Errors__SearchAds360Error[];
  /**
   * The unique ID of the request that is used for debugging purposes.
   */
  requestId?: string;
}

function serializeGoogleAdsSearchads360V0Errors__SearchAds360Failure(data: any): GoogleAdsSearchads360V0Errors__SearchAds360Failure {
  return {
    ...data,
    errors: data["errors"] !== undefined ? data["errors"].map((item: any) => (serializeGoogleAdsSearchads360V0Errors__SearchAds360Error(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V0Errors__SearchAds360Failure(data: any): GoogleAdsSearchads360V0Errors__SearchAds360Failure {
  return {
    ...data,
    errors: data["errors"] !== undefined ? data["errors"].map((item: any) => (deserializeGoogleAdsSearchads360V0Errors__SearchAds360Error(item))) : undefined,
  };
}

/**
 * A part of a field path.
 */
export interface GoogleAdsSearchads360V0Errors_ErrorLocation_FieldPathElement {
  /**
   * The name of a field or a oneof
   */
  fieldName?: string;
  /**
   * If field_name is a repeated field, this is the element that failed
   */
  index?: number;
}

/**
 * The city where the travel activity is available.
 */
export interface GoogleAdsSearchads360V23Common__ActivityCityInfo {
  /**
   * String value of the activity city. The Geo Target Constant resource name.
   */
  value?: string;
}

/**
 * The country where the travel activity is available.
 */
export interface GoogleAdsSearchads360V23Common__ActivityCountryInfo {
  /**
   * String value of the activity country. The Geo Target Constant resource
   * name.
   */
  value?: string;
}

/**
 * Advertiser-specific activity ID.
 */
export interface GoogleAdsSearchads360V23Common__ActivityIdInfo {
  /**
   * String value of the activity ID.
   */
  value?: string;
}

/**
 * Rating of the activity as a number 1 to 5, where 5 is the best.
 */
export interface GoogleAdsSearchads360V23Common__ActivityRatingInfo {
  /**
   * Long value of the activity rating.
   */
  value?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ActivityRatingInfo(data: any): GoogleAdsSearchads360V23Common__ActivityRatingInfo {
  return {
    ...data,
    value: data["value"] !== undefined ? String(data["value"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ActivityRatingInfo(data: any): GoogleAdsSearchads360V23Common__ActivityRatingInfo {
  return {
    ...data,
    value: data["value"] !== undefined ? BigInt(data["value"]) : undefined,
  };
}

/**
 * The state where the travel activity is available.
 */
export interface GoogleAdsSearchads360V23Common__ActivityStateInfo {
  /**
   * String value of the activity state. The Geo Target Constant resource name.
   */
  value?: string;
}

/**
 * An app deep link used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdAppDeepLinkAsset {
  /**
   * The Asset resource name of this app deep link asset.
   */
  asset?: string;
}

/**
 * Contains policy information for an asset inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdAssetPolicySummary {
  /**
   * The overall approval status of this asset, which is calculated based on
   * the status of its individual policy topic entries.
   */
  approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "DISAPPROVED" | "APPROVED_LIMITED" | "APPROVED" | "AREA_OF_INTEREST_ONLY";
  /**
   * The list of policy findings for this asset.
   */
  policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
  /**
   * Where in the review process this asset.
   */
  reviewStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REVIEW_IN_PROGRESS" | "REVIEWED" | "UNDER_APPEAL" | "ELIGIBLE_MAY_SERVE";
}

function serializeGoogleAdsSearchads360V23Common__AdAssetPolicySummary(data: any): GoogleAdsSearchads360V23Common__AdAssetPolicySummary {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AdAssetPolicySummary(data: any): GoogleAdsSearchads360V23Common__AdAssetPolicySummary {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

/**
 * A call to action asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdCallToActionAsset {
  /**
   * The Asset resource name of this call to action asset.
   */
  asset?: string;
}

/**
 * A Demand Gen carousel card asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdDemandGenCarouselCardAsset {
  /**
   * The Asset resource name of this discovery carousel card.
   */
  asset?: string;
}

/**
 * Additional information about the application/tool issuing the request. This
 * field is only used by ContentCreatorInsightsService, AudienceInsightsService,
 * and ReachPlanService APIs.
 */
export interface GoogleAdsSearchads360V23Common__AdditionalApplicationInfo {
  /**
   * The unique identifier of the agency proprietary application. This
   * identifier is generated by Google. Reach out to your Google representative
   * to request an application_id for each new application being integrated.
   */
  applicationId?: string;
  /**
   * The instance type of the application sending the request.
   */
  applicationInstance?:  | "UNSPECIFIED" | "UNKNOWN" | "DEVELOPMENT_AND_TESTING" | "PRODUCTION";
}

/**
 * Address for proximity criterion.
 */
export interface GoogleAdsSearchads360V23Common__AddressInfo {
  /**
   * Name of the city.
   */
  cityName?: string;
  /**
   * Country code.
   */
  countryCode?: string;
  /**
   * Postal code.
   */
  postalCode?: string;
  /**
   * Province or state code.
   */
  provinceCode?: string;
  /**
   * Province or state name.
   */
  provinceName?: string;
  /**
   * Street address line 1.
   */
  streetAddress?: string;
  /**
   * Street address line 2. This field is write-only. It is only used for
   * calculating the longitude and latitude of an address when geo_point is
   * empty.
   */
  streetAddress2?: string;
}

/**
 * An image asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdImageAsset {
  /**
   * The Asset resource name of this image.
   */
  asset?: string;
}

/**
 * A media bundle asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdMediaBundleAsset {
  /**
   * The Asset resource name of this media bundle.
   */
  asset?: string;
}

/**
 * Represents an AdSchedule criterion. AdSchedule is specified as the day of
 * the week and a time interval within which ads will be shown. No more than six
 * AdSchedules can be added for the same day.
 */
export interface GoogleAdsSearchads360V23Common__AdScheduleInfo {
  /**
   * Day of the week the schedule applies to. This field is required for CREATE
   * operations and is prohibited on UPDATE operations.
   */
  dayOfWeek?:  | "UNSPECIFIED" | "UNKNOWN" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY";
  /**
   * Ending hour in 24 hour time; 24 signifies end of the day. This field must
   * be between 0 and 24, inclusive. This field is required for CREATE
   * operations and is prohibited on UPDATE operations.
   */
  endHour?: number;
  /**
   * Minutes after the end hour at which this schedule ends. The schedule is
   * exclusive of the end minute. This field is required for CREATE operations
   * and is prohibited on UPDATE operations.
   */
  endMinute?:  | "UNSPECIFIED" | "UNKNOWN" | "ZERO" | "FIFTEEN" | "THIRTY" | "FORTY_FIVE";
  /**
   * Starting hour in 24 hour time. This field must be between 0 and 23,
   * inclusive. This field is required for CREATE operations and is prohibited
   * on UPDATE operations.
   */
  startHour?: number;
  /**
   * Minutes after the start hour at which this schedule starts. This field is
   * required for CREATE operations and is prohibited on UPDATE operations.
   */
  startMinute?:  | "UNSPECIFIED" | "UNKNOWN" | "ZERO" | "FIFTEEN" | "THIRTY" | "FORTY_FIVE";
}

/**
 * A text asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdTextAsset {
  /**
   * The performance label of this text asset.
   */
  assetPerformanceLabel?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "LEARNING" | "LOW" | "GOOD" | "BEST" | "NOT_APPLICABLE";
  /**
   * The pinned field of the asset. This restricts the asset to only serve
   * within this field. Multiple assets can be pinned to the same field. An
   * asset that is unpinned or pinned to a different field will not serve in a
   * field where some other asset has been pinned.
   */
  pinnedField?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE_1" | "HEADLINE_2" | "HEADLINE_3" | "DESCRIPTION_1" | "DESCRIPTION_2" | "HEADLINE" | "HEADLINE_IN_PORTRAIT" | "LONG_HEADLINE" | "DESCRIPTION" | "DESCRIPTION_IN_PORTRAIT" | "BUSINESS_NAME_IN_PORTRAIT" | "BUSINESS_NAME" | "MARKETING_IMAGE" | "MARKETING_IMAGE_IN_PORTRAIT" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "CALL_TO_ACTION" | "YOU_TUBE_VIDEO" | "SITELINK" | "CALL" | "MOBILE_APP" | "CALLOUT" | "STRUCTURED_SNIPPET" | "PRICE" | "PROMOTION" | "AD_IMAGE" | "LEAD_FORM" | "BUSINESS_LOGO" | "DESCRIPTION_PREFIX" | "HEADLINE_AS_SITELINK_POSITION_ONE" | "HEADLINE_AS_SITELINK_POSITION_TWO" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_ONE" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_TWO";
  /**
   * The policy summary of this text asset.
   */
  policySummaryInfo?: GoogleAdsSearchads360V23Common__AdAssetPolicySummary;
  /**
   * Asset text.
   */
  text?: string;
}

function serializeGoogleAdsSearchads360V23Common__AdTextAsset(data: any): GoogleAdsSearchads360V23Common__AdTextAsset {
  return {
    ...data,
    policySummaryInfo: data["policySummaryInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdAssetPolicySummary(data["policySummaryInfo"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data: any): GoogleAdsSearchads360V23Common__AdTextAsset {
  return {
    ...data,
    policySummaryInfo: data["policySummaryInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdAssetPolicySummary(data["policySummaryInfo"]) : undefined,
  };
}

/**
 * A video asset used inside an ad.
 */
export interface GoogleAdsSearchads360V23Common__AdVideoAsset {
  /**
   * Contains info fields for this AdVideoAsset.
   */
  adVideoAssetInfo?: GoogleAdsSearchads360V23Common__AdVideoAssetInfo;
  /**
   * The Asset resource name of this video.
   */
  asset?: string;
}

/**
 * Contains info fields for AdVideoAssets.
 */
export interface GoogleAdsSearchads360V23Common__AdVideoAssetInfo {
  /**
   * Defines feature controls for this AdVideoAsset during serving time. For
   * example, whether YouTube comments should be enabled for Partnership Ads
   * served on YouTube Shorts.
   */
  adVideoAssetFeatureControl?: GoogleAdsSearchads360V23Common__AdVideoAssetLinkFeatureControl;
}

/**
 * YouTube Video Asset feature controls.
 */
export interface GoogleAdsSearchads360V23Common__AdVideoAssetLinkFeatureControl {
  /**
   * Defines if YouTube comments should be enabled for the creative using this
   * YouTube video asset served on YouTube Shorts.
   */
  allowYoutubeComments?: boolean;
}

/**
 * Dimension specifying users by their age.
 */
export interface GoogleAdsSearchads360V23Common__AgeDimension {
  /**
   * Contiguous age range to be included in the dimension.
   */
  ageRanges?: GoogleAdsSearchads360V23Common__AgeSegment[];
  /**
   * Include users whose age is not determined.
   */
  includeUndetermined?: boolean;
}

/**
 * An age range criterion.
 */
export interface GoogleAdsSearchads360V23Common__AgeRangeInfo {
  /**
   * Type of the age range.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "AGE_RANGE_18_24" | "AGE_RANGE_25_34" | "AGE_RANGE_35_44" | "AGE_RANGE_45_54" | "AGE_RANGE_55_64" | "AGE_RANGE_65_UP" | "AGE_RANGE_UNDETERMINED";
}

/**
 * Contiguous age range.
 */
export interface GoogleAdsSearchads360V23Common__AgeSegment {
  /**
   * Maximum age to include. A maximum age need not be specified. If specified,
   * max_age must be greater than min_age, and allowed values are 24, 34, 44,
   * 54, and 64.
   */
  maxAge?: number;
  /**
   * Minimum age to include. A minimum age must be specified and must be at
   * least 18. Allowed values are 18, 25, 35, 45, 55, and 65.
   */
  minAge?: number;
}

/**
 * An app ad.
 */
export interface GoogleAdsSearchads360V23Common__AppAdInfo {
  /**
   * An app deep link asset that may be used with the ad.
   */
  appDeepLink?: GoogleAdsSearchads360V23Common__AdAppDeepLinkAsset;
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of media bundle assets that may be used with the ad.
   */
  html5MediaBundles?: GoogleAdsSearchads360V23Common__AdMediaBundleAsset[];
  /**
   * List of image assets that may be displayed with the ad.
   */
  images?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Mandatory ad text.
   */
  mandatoryAdText?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * List of YouTube video assets that may be displayed with the ad.
   */
  youtubeVideos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__AppAdInfo(data: any): GoogleAdsSearchads360V23Common__AppAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    mandatoryAdText: data["mandatoryAdText"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["mandatoryAdText"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AppAdInfo(data: any): GoogleAdsSearchads360V23Common__AppAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    mandatoryAdText: data["mandatoryAdText"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["mandatoryAdText"]) : undefined,
  };
}

/**
 * An app deep link asset
 */
export interface GoogleAdsSearchads360V23Common__AppDeepLinkAsset {
  /**
   * The uri for the app deep link, The uri can be either a custom scheme uri
   * (e.g. mystore://shoes) or universal uri (e.g.
   * http://www.mystore.com/shoes).
   */
  appDeepLinkUri?: string;
}

/**
 * App engagement ads allow you to write text encouraging a specific action in
 * the app, like checking in, making a purchase, or booking a flight. They allow
 * you to send users to a specific part of your app where they can find what
 * they're looking for easier and faster.
 */
export interface GoogleAdsSearchads360V23Common__AppEngagementAdInfo {
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of image assets that may be displayed with the ad.
   */
  images?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * List of video assets that may be displayed with the ad.
   */
  videos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__AppEngagementAdInfo(data: any): GoogleAdsSearchads360V23Common__AppEngagementAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AppEngagementAdInfo(data: any): GoogleAdsSearchads360V23Common__AppEngagementAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * An app payment model criterion.
 */
export interface GoogleAdsSearchads360V23Common__AppPaymentModelInfo {
  /**
   * Type of the app payment model.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "PAID";
}

/**
 * App pre-registration ads link to your app or game listing on Google Play,
 * and can run on Google Play, on YouTube (in-stream only), and within other
 * apps and mobile websites on the Display Network. It will help capture
 * people's interest in your app or game and generate an early install base for
 * your app or game before a launch.
 */
export interface GoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo {
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of image asset IDs whose images may be displayed with the ad.
   */
  images?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * List of YouTube video asset IDs whose videos may be displayed with the ad.
   */
  youtubeVideos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo(data: any): GoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo(data: any): GoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * Details related to AssetLinkPrimaryStatusReasonPB.ASSET_DISAPPROVED
 */
export interface GoogleAdsSearchads360V23Common__AssetDisapproved {
  /**
   * Provides the quality evaluation disapproval reason of an asset.
   */
  offlineEvaluationErrorReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "PRICE_ASSET_DESCRIPTION_REPEATS_ROW_HEADER" | "PRICE_ASSET_REPETITIVE_HEADERS" | "PRICE_ASSET_HEADER_INCOMPATIBLE_WITH_PRICE_TYPE" | "PRICE_ASSET_DESCRIPTION_INCOMPATIBLE_WITH_ITEM_HEADER" | "PRICE_ASSET_DESCRIPTION_HAS_PRICE_QUALIFIER" | "PRICE_ASSET_UNSUPPORTED_LANGUAGE" | "PRICE_ASSET_OTHER_ERROR"[];
}

/**
 * An AssetInteractionTarget segment.
 */
export interface GoogleAdsSearchads360V23Common__AssetInteractionTarget {
  /**
   * The asset resource name.
   */
  asset?: string;
  /**
   * Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics.
   * Indicates whether the interaction metrics occurred on the asset itself or a
   * different asset or ad unit.
   */
  interactionOnThisAsset?: boolean;
}

/**
 * Provides the detail of a PrimaryStatus. Each asset link has a PrimaryStatus
 * value (e.g. NOT_ELIGIBLE, meaning not serving), and list of corroborating
 * PrimaryStatusReasons (e.g. [ASSET_DISAPPROVED]). Each reason may have some
 * additional details annotated with it. For instance, when the reason is
 * ASSET_DISAPPROVED, the details field will contain additional information
 * about the offline evaluation errors which led to the asset being disapproved.
 */
export interface GoogleAdsSearchads360V23Common__AssetLinkPrimaryStatusDetails {
  /**
   * Provides the details for AssetLinkPrimaryStatusReason.ASSET_DISAPPROVED
   */
  assetDisapproved?: GoogleAdsSearchads360V23Common__AssetDisapproved;
  /**
   * Provides the reason of this PrimaryStatus.
   */
  reason?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_LINK_PAUSED" | "ASSET_LINK_REMOVED" | "ASSET_DISAPPROVED" | "ASSET_UNDER_REVIEW" | "ASSET_APPROVED_LABELED";
  /**
   * Provides the PrimaryStatus of this status detail.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
}

/**
 * Contains the usage information of the asset.
 */
export interface GoogleAdsSearchads360V23Common__AssetUsage {
  /**
   * Resource name of the asset.
   */
  asset?: string;
  /**
   * The served field type of the asset.
   */
  servedAssetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE_1" | "HEADLINE_2" | "HEADLINE_3" | "DESCRIPTION_1" | "DESCRIPTION_2" | "HEADLINE" | "HEADLINE_IN_PORTRAIT" | "LONG_HEADLINE" | "DESCRIPTION" | "DESCRIPTION_IN_PORTRAIT" | "BUSINESS_NAME_IN_PORTRAIT" | "BUSINESS_NAME" | "MARKETING_IMAGE" | "MARKETING_IMAGE_IN_PORTRAIT" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "CALL_TO_ACTION" | "YOU_TUBE_VIDEO" | "SITELINK" | "CALL" | "MOBILE_APP" | "CALLOUT" | "STRUCTURED_SNIPPET" | "PRICE" | "PROMOTION" | "AD_IMAGE" | "LEAD_FORM" | "BUSINESS_LOGO" | "DESCRIPTION_PREFIX" | "HEADLINE_AS_SITELINK_POSITION_ONE" | "HEADLINE_AS_SITELINK_POSITION_TWO" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_ONE" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_TWO";
}

/**
 * Positive dimension specifying user's audience.
 */
export interface GoogleAdsSearchads360V23Common__AudienceDimension {
  /**
   * Dimension specifying users by their age.
   */
  age?: GoogleAdsSearchads360V23Common__AgeDimension;
  /**
   * Dimension specifying users by their membership in other audience segments.
   */
  audienceSegments?: GoogleAdsSearchads360V23Common__AudienceSegmentDimension;
  /**
   * Dimension specifying users by their gender.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderDimension;
  /**
   * Dimension specifying users by their household income.
   */
  householdIncome?: GoogleAdsSearchads360V23Common__HouseholdIncomeDimension;
  /**
   * Dimension specifying users by their parental status.
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusDimension;
}

/**
 * Negative dimension specifying users to exclude from the audience.
 */
export interface GoogleAdsSearchads360V23Common__AudienceExclusionDimension {
  /**
   * Audience segment to be excluded.
   */
  exclusions?: GoogleAdsSearchads360V23Common__ExclusionSegment[];
}

/**
 * An audience criterion.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInfo {
  /**
   * The Audience resource name.
   */
  audience?: string;
}

/**
 * An audience attribute that can be used to request insights about the
 * audience.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsAttribute {
  /**
   * An audience attribute defined by an age range.
   */
  ageRange?: GoogleAdsSearchads360V23Common__AgeRangeInfo;
  /**
   * An audience attribute defined by interest in a Product & Service category.
   */
  category?: GoogleAdsSearchads360V23Common__AudienceInsightsCategory;
  /**
   * A device type. (Mobile, Desktop, Tablet)
   */
  device?: GoogleAdsSearchads360V23Common__DeviceInfo;
  /**
   * An audience attribute defined by interest in a topic represented by a
   * Knowledge Graph entity.
   */
  entity?: GoogleAdsSearchads360V23Common__AudienceInsightsEntity;
  /**
   * An audience attribute defined by a gender.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderInfo;
  /**
   * A household income percentile range.
   */
  incomeRange?: GoogleAdsSearchads360V23Common__IncomeRangeInfo;
  /**
   * A YouTube Lineup.
   */
  lineup?: GoogleAdsSearchads360V23Common__AudienceInsightsLineup;
  /**
   * An audience attribute defined by a geographic location.
   */
  location?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * A Parental Status value (parent, or not a parent).
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusInfo;
  /**
   * An Affinity or In-Market audience.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestInfo;
  /**
   * A User List.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListInfo;
  /**
   * A YouTube channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * A YouTube video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Common__YouTubeVideoInfo;
}

/**
 * An audience attribute, with metadata about it, returned in response to a
 * search.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata {
  /**
   * The attribute itself.
   */
  attribute?: GoogleAdsSearchads360V23Common__AudienceInsightsAttribute;
  /**
   * The type of the attribute.
   */
  dimension?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST";
  /**
   * A string that supplements the display_name to identify the attribute. If
   * the dimension is TOPIC, this is a brief description of the Knowledge Graph
   * entity, such as "American singer-songwriter". If the dimension is CATEGORY,
   * this is the complete path to the category in The Product & Service
   * taxonomy, for example "/Apparel/Clothing/Outerwear".
   */
  displayInfo?: string;
  /**
   * The human-readable name of the attribute.
   */
  displayName?: string;
  /**
   * Special metadata for a Knowledge Graph Entity.
   */
  knowledgeGraphAttributeMetadata?: GoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata;
  /**
   * Special metadata for a YouTube Lineup.
   */
  lineupAttributeMetadata?: GoogleAdsSearchads360V23Common__LineupAttributeMetadata;
  /**
   * Special metadata for a Location.
   */
  locationAttributeMetadata?: GoogleAdsSearchads360V23Common__LocationAttributeMetadata;
  /**
   * An estimate of the number of reachable YouTube users matching this
   * attribute in the requested location, or zero if that information is not
   * available for this attribute. This field is not populated in every
   * response.
   */
  potentialYoutubeReach?: bigint;
  /**
   * The share of subscribers within this attribute, between and including 0
   * and 1. This field is not populated in every response.
   */
  subscriberShare?: number;
  /**
   * Special metadata for a User Interest.
   */
  userInterestAttributeMetadata?: GoogleAdsSearchads360V23Common__UserInterestAttributeMetadata;
  /**
   * Special metadata for a User List.
   */
  userListAttributeMetadata?: GoogleAdsSearchads360V23Common__UserListAttributeMetadata;
  /**
   * The share of viewers within this attribute, between and including 0 and 1.
   * This field is not populated in every response.
   */
  viewerShare?: number;
  /**
   * Special metadata for a YouTube channel.
   */
  youtubeChannelMetadata?: GoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata;
  /**
   * Special metadata for a YouTube video.
   */
  youtubeVideoMetadata?: GoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata;
}

function serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata {
  return {
    ...data,
    knowledgeGraphAttributeMetadata: data["knowledgeGraphAttributeMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata(data["knowledgeGraphAttributeMetadata"]) : undefined,
    lineupAttributeMetadata: data["lineupAttributeMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LineupAttributeMetadata(data["lineupAttributeMetadata"]) : undefined,
    potentialYoutubeReach: data["potentialYoutubeReach"] !== undefined ? String(data["potentialYoutubeReach"]) : undefined,
    youtubeChannelMetadata: data["youtubeChannelMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data["youtubeChannelMetadata"]) : undefined,
    youtubeVideoMetadata: data["youtubeVideoMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata(data["youtubeVideoMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata {
  return {
    ...data,
    knowledgeGraphAttributeMetadata: data["knowledgeGraphAttributeMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata(data["knowledgeGraphAttributeMetadata"]) : undefined,
    lineupAttributeMetadata: data["lineupAttributeMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LineupAttributeMetadata(data["lineupAttributeMetadata"]) : undefined,
    potentialYoutubeReach: data["potentialYoutubeReach"] !== undefined ? BigInt(data["potentialYoutubeReach"]) : undefined,
    youtubeChannelMetadata: data["youtubeChannelMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data["youtubeChannelMetadata"]) : undefined,
    youtubeVideoMetadata: data["youtubeVideoMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata(data["youtubeVideoMetadata"]) : undefined,
  };
}

/**
 * A group of audience attributes with metadata, returned in response to a
 * search.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup {
  /**
   * Attributes with metadata returned in response to a search.
   */
  attributes?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
}

function serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup(data: any): GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup(data: any): GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

/**
 * A Product and Service category.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsCategory {
  /**
   * Required. The criterion ID of the category.
   */
  categoryId?: string;
}

/**
 * A Knowledge Graph entity, represented by its machine id.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsEntity {
  /**
   * Required. The machine ID (mid) of the Knowledge Graph entity.
   */
  knowledgeGraphMachineId?: string;
}

/**
 * A YouTube Lineup.
 */
export interface GoogleAdsSearchads360V23Common__AudienceInsightsLineup {
  /**
   * Required. The numeric ID of the lineup.
   */
  lineupId?: string;
}

/**
 * Positive audience segment.
 */
export interface GoogleAdsSearchads360V23Common__AudienceSegment {
  /**
   * Custom audience segment.
   */
  customAudience?: GoogleAdsSearchads360V23Common__CustomAudienceSegment;
  /**
   * Detailed demographic segment.
   */
  detailedDemographic?: GoogleAdsSearchads360V23Common__DetailedDemographicSegment;
  /**
   * Live-event audience segment.
   */
  lifeEvent?: GoogleAdsSearchads360V23Common__LifeEventSegment;
  /**
   * Affinity or In-market segment.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestSegment;
  /**
   * User list segment.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListSegment;
}

/**
 * Dimension specifying users by their membership in other audience segments.
 */
export interface GoogleAdsSearchads360V23Common__AudienceSegmentDimension {
  /**
   * Included audience segments. Users are included if they belong to at least
   * one segment.
   */
  segments?: GoogleAdsSearchads360V23Common__AudienceSegment[];
}

export interface GoogleAdsSearchads360V23Common__BasicUserListInfo {
  /**
   * Actions associated with this user list.
   */
  actions?: GoogleAdsSearchads360V23Common__UserListActionInfo[];
}

/**
 * A Book on Google asset. Used to redirect user to book through Google. Book
 * on Google will change the redirect url to book directly through Google.
 */
export interface GoogleAdsSearchads360V23Common__BookOnGoogleAsset {
}

/**
 * Represents a Brand Criterion used for targeting based on commercial
 * knowledge graph.
 */
export interface GoogleAdsSearchads360V23Common__BrandInfo {
  /**
   * Output only. A text representation of a brand.
   */
  readonly displayName?: string;
  /**
   * The Commercial KG MID for the brand.
   */
  entityId?: string;
  /**
   * Output only. The primary url of a brand.
   */
  readonly primaryUrl?: string;
  /**
   * Output only. The rejection reason when a brand status is REJECTED.
   */
  readonly rejectionReason?:  | "UNSPECIFIED" | "UNKNOWN" | "EXISTING_BRAND" | "EXISTING_BRAND_VARIANT" | "INCORRECT_INFORMATION" | "NOT_A_BRAND";
  /**
   * Output only. The status of a brand.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "DEPRECATED" | "UNVERIFIED" | "APPROVED" | "CANCELLED" | "REJECTED";
}

/**
 * A Brand List Criterion is used to specify a list of brands. The list is
 * represented as a SharedSet id type BRAND_HINT. A criterion of this type can
 * be either targeted or excluded.
 */
export interface GoogleAdsSearchads360V23Common__BrandListInfo {
  /**
   * Shared set resource name of the brand list.
   */
  sharedSet?: string;
}

/**
 * Projected metrics for a specific budget amount.
 */
export interface GoogleAdsSearchads360V23Common__BudgetSimulationPoint {
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions.
   */
  biddableConversionsValue?: number;
  /**
   * The simulated budget upon which projected metrics are based.
   */
  budgetAmountMicros?: bigint;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected number of interactions. Only discovery advertising channel type
   * supports this field.
   */
  interactions?: bigint;
  /**
   * Projected required daily cpc bid ceiling that the advertiser must set to
   * realize this simulation, in micros of the advertiser currency. Only
   * campaigns with the Target Spend bidding strategy support this field.
   */
  requiredCpcBidCeilingMicros?: bigint;
  /**
   * Projected number of top slot impressions. Only search advertising channel
   * type supports this field.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__BudgetSimulationPoint(data: any): GoogleAdsSearchads360V23Common__BudgetSimulationPoint {
  return {
    ...data,
    budgetAmountMicros: data["budgetAmountMicros"] !== undefined ? String(data["budgetAmountMicros"]) : undefined,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? String(data["interactions"]) : undefined,
    requiredCpcBidCeilingMicros: data["requiredCpcBidCeilingMicros"] !== undefined ? String(data["requiredCpcBidCeilingMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BudgetSimulationPoint(data: any): GoogleAdsSearchads360V23Common__BudgetSimulationPoint {
  return {
    ...data,
    budgetAmountMicros: data["budgetAmountMicros"] !== undefined ? BigInt(data["budgetAmountMicros"]) : undefined,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? BigInt(data["interactions"]) : undefined,
    requiredCpcBidCeilingMicros: data["requiredCpcBidCeilingMicros"] !== undefined ? BigInt(data["requiredCpcBidCeilingMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type BUDGET.
 */
export interface GoogleAdsSearchads360V23Common__BudgetSimulationPointList {
  /**
   * Projected metrics for a series of budget amounts.
   */
  points?: GoogleAdsSearchads360V23Common__BudgetSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__BudgetSimulationPointList(data: any): GoogleAdsSearchads360V23Common__BudgetSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__BudgetSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BudgetSimulationPointList(data: any): GoogleAdsSearchads360V23Common__BudgetSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__BudgetSimulationPoint(item))) : undefined,
  };
}

/**
 * A business message asset.
 */
export interface GoogleAdsSearchads360V23Common__BusinessMessageAsset {
  /**
   * A call to action for the business message asset.
   */
  callToAction?: GoogleAdsSearchads360V23Common__BusinessMessageCallToActionInfo;
  /**
   * Facebook Messenger.
   */
  facebookMessengerInfo?: GoogleAdsSearchads360V23Common__FacebookMessengerBusinessMessageInfo;
  /**
   * Required. Message provider of the business message asset.
   */
  messageProvider?:  | "UNSPECIFIED" | "UNKNOWN" | "WHATSAPP" | "FACEBOOK_MESSENGER" | "ZALO";
  /**
   * Required. A welcome message to prompt the user to initiate a conversation.
   */
  starterMessage?: string;
  /**
   * Whatsapp.
   */
  whatsappInfo?: GoogleAdsSearchads360V23Common__WhatsappBusinessMessageInfo;
  /**
   * Zalo.
   */
  zaloInfo?: GoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo;
}

function serializeGoogleAdsSearchads360V23Common__BusinessMessageAsset(data: any): GoogleAdsSearchads360V23Common__BusinessMessageAsset {
  return {
    ...data,
    zaloInfo: data["zaloInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo(data["zaloInfo"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BusinessMessageAsset(data: any): GoogleAdsSearchads360V23Common__BusinessMessageAsset {
  return {
    ...data,
    zaloInfo: data["zaloInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo(data["zaloInfo"]) : undefined,
  };
}

/**
 * Display information that encourages the user to take action.
 */
export interface GoogleAdsSearchads360V23Common__BusinessMessageCallToActionInfo {
  /**
   * Required. Text providing a clear value proposition of what users expect
   * once they take the action. Examples: 'Message us for a quote', 'Ask our
   * expert team'.
   */
  callToActionDescription?: string;
  /**
   * Required. Pre-defined call to action text.
   */
  callToActionSelection?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLY_NOW" | "BOOK_NOW" | "CONTACT_US" | "GET_INFO" | "GET_OFFER" | "GET_QUOTE" | "GET_STARTED" | "LEARN_MORE";
}

/**
 * Business Profile location group business name filter.
 */
export interface GoogleAdsSearchads360V23Common__BusinessProfileBusinessNameFilter {
  /**
   * Business name string to use for filtering.
   */
  businessName?: string;
  /**
   * The type of string matching to use when filtering with business_name.
   */
  filterType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT";
}

/**
 * Business Profile location data synced from the linked Business Profile
 * account.
 */
export interface GoogleAdsSearchads360V23Common__BusinessProfileLocation {
  /**
   * Advertiser specified label for the location on the Business Profile
   * account. This is synced from the Business Profile account.
   */
  labels?: string[];
  /**
   * Listing ID of this Business Profile location. This is synced from the
   * linked Business Profile account.
   */
  listingId?: bigint;
  /**
   * Business Profile store code of this location. This is synced from the
   * Business Profile account.
   */
  storeCode?: string;
}

function serializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocation {
  return {
    ...data,
    listingId: data["listingId"] !== undefined ? String(data["listingId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocation {
  return {
    ...data,
    listingId: data["listingId"] !== undefined ? BigInt(data["listingId"]) : undefined,
  };
}

/**
 * Information about a Business Profile dynamic location group. Only applicable
 * if the sync level AssetSet's type is LOCATION_SYNC and sync source is
 * Business Profile.
 */
export interface GoogleAdsSearchads360V23Common__BusinessProfileLocationGroup {
  /**
   * Filter for dynamic Business Profile location sets.
   */
  dynamicBusinessProfileLocationGroupFilter?: GoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter;
}

function serializeGoogleAdsSearchads360V23Common__BusinessProfileLocationGroup(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocationGroup {
  return {
    ...data,
    dynamicBusinessProfileLocationGroupFilter: data["dynamicBusinessProfileLocationGroupFilter"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter(data["dynamicBusinessProfileLocationGroupFilter"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocationGroup(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocationGroup {
  return {
    ...data,
    dynamicBusinessProfileLocationGroupFilter: data["dynamicBusinessProfileLocationGroupFilter"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter(data["dynamicBusinessProfileLocationGroupFilter"]) : undefined,
  };
}

/**
 * Data used to configure a location set populated from Google Business Profile
 * locations. Different types of filters are AND'ed together, if they are
 * specified.
 */
export interface GoogleAdsSearchads360V23Common__BusinessProfileLocationSet {
  /**
   * Immutable. The account ID of the managed business whose locations are to
   * be used. If this field is not set, then all businesses accessible by the
   * user (specified by the emailAddress) are used.
   */
  businessAccountId?: string;
  /**
   * Used to filter Google Business Profile listings by business name. If
   * businessNameFilter is set, only listings with a matching business name are
   * candidates to be sync'd into Assets.
   */
  businessNameFilter?: string;
  /**
   * Required. Immutable. Email address of a Google Business Profile account or
   * email address of a manager of the Google Business Profile account.
   */
  emailAddress?: string;
  /**
   * Required. Immutable. The HTTP authorization token used to obtain
   * authorization.
   */
  httpAuthorizationToken?: string;
  /**
   * Used to filter Google Business Profile listings by labels. If entries
   * exist in labelFilters, only listings that have any of the labels set are
   * candidates to be synchronized into Assets. If no entries exist in
   * labelFilters, then all listings are candidates for syncing. Label filters
   * are OR'ed together.
   */
  labelFilters?: string[];
  /**
   * Used to filter Google Business Profile listings by listing id. If entries
   * exist in listingIdFilters, only listings specified by the filters are
   * candidates to be synchronized into Assets. If no entries exist in
   * listingIdFilters, then all listings are candidates for syncing. Listing ID
   * filters are OR'ed together.
   */
  listingIdFilters?: bigint[];
}

function serializeGoogleAdsSearchads360V23Common__BusinessProfileLocationSet(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocationSet {
  return {
    ...data,
    listingIdFilters: data["listingIdFilters"] !== undefined ? data["listingIdFilters"].map((item: any) => (String(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocationSet(data: any): GoogleAdsSearchads360V23Common__BusinessProfileLocationSet {
  return {
    ...data,
    listingIdFilters: data["listingIdFilters"] !== undefined ? data["listingIdFilters"].map((item: any) => (BigInt(item))) : undefined,
  };
}

/**
 * A Call asset.
 */
export interface GoogleAdsSearchads360V23Common__CallAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * The conversion action to attribute a call conversion to. If not set, the
   * default conversion action is used. This field only has effect if
   * call_conversion_reporting_state is set to
   * USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION.
   */
  callConversionAction?: string;
  /**
   * Indicates whether this CallAsset should use its own call conversion
   * setting, follow the account level setting, or disable call conversion.
   */
  callConversionReportingState?:  | "UNSPECIFIED" | "UNKNOWN" | "DISABLED" | "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION" | "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION";
  /**
   * Required. Two-letter country code of the phone number. Examples: 'US',
   * 'us'.
   */
  countryCode?: string;
  /**
   * Required. The advertiser's raw phone number. Examples: '1234567890',
   * '(123)456-7890'
   */
  phoneNumber?: string;
}

/**
 * Represents a Call extension.
 */
export interface GoogleAdsSearchads360V23Common__CallFeedItem {
  /**
   * The conversion action to attribute a call conversion to. If not set a
   * default conversion action is used. This field only has effect if
   * call_tracking_enabled is set to true. Otherwise this field is ignored.
   */
  callConversionAction?: string;
  /**
   * Enum value that indicates whether this call extension uses its own call
   * conversion setting (or just have call conversion disabled), or following
   * the account level setting.
   */
  callConversionReportingState?:  | "UNSPECIFIED" | "UNKNOWN" | "DISABLED" | "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION" | "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION";
  /**
   * If true, disable call conversion tracking. call_conversion_action should
   * not be set if this is true. Optional.
   */
  callConversionTrackingDisabled?: boolean;
  /**
   * Indicates whether call tracking is enabled. By default, call tracking is
   * not enabled.
   */
  callTrackingEnabled?: boolean;
  /**
   * Uppercase two-letter country code of the advertiser's phone number. This
   * string must not be empty.
   */
  countryCode?: string;
  /**
   * The advertiser's phone number to append to the ad. This string must not be
   * empty.
   */
  phoneNumber?: string;
}

/**
 * A Callout asset.
 */
export interface GoogleAdsSearchads360V23Common__CalloutAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * Required. The callout text. The length of this string should be between 1
   * and 25, inclusive.
   */
  calloutText?: string;
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
}

/**
 * Represents a callout extension.
 */
export interface GoogleAdsSearchads360V23Common__CalloutFeedItem {
  /**
   * The callout text. The length of this string should be between 1 and 25,
   * inclusive.
   */
  calloutText?: string;
}

/**
 * A call to action asset.
 */
export interface GoogleAdsSearchads360V23Common__CallToActionAsset {
  /**
   * Call to action.
   */
  callToAction?:  | "UNSPECIFIED" | "UNKNOWN" | "LEARN_MORE" | "GET_QUOTE" | "APPLY_NOW" | "SIGN_UP" | "CONTACT_US" | "SUBSCRIBE" | "DOWNLOAD" | "BOOK_NOW" | "SHOP_NOW" | "BUY_NOW" | "DONATE_NOW" | "ORDER_NOW" | "PLAY_NOW" | "SEE_MORE" | "START_NOW" | "VISIT_SITE" | "WATCH_NOW";
}

/**
 * Container for third party Brand Lift integration data for Campaign.
 */
export interface GoogleAdsSearchads360V23Common__CampaignThirdPartyBrandLiftIntegrationPartner {
  /**
   * Allowed third party integration partners for Brand Lift verification.
   */
  brandLiftIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "KANTAR_MILLWARD_BROWN" | "DYNATA" | "INTAGE" | "MACROMILL";
  /**
   * Third party partner data for YouTube Brand Lift verification. This is
   * optional metadata for partners to join or attach data to Ads campaigns.
   */
  brandLiftIntegrationPartnerData?: GoogleAdsSearchads360V23Common__ThirdPartyIntegrationPartnerData;
  /**
   * If true, then cost data will be shared with this vendor.
   */
  shareCost?: boolean;
}

/**
 * Container for third party brand safety integration data for Campaign.
 */
export interface GoogleAdsSearchads360V23Common__CampaignThirdPartyBrandSafetyIntegrationPartner {
  /**
   * Allowed third party integration partners for brand safety verification.
   */
  brandSafetyIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "DOUBLE_VERIFY" | "INTEGRAL_AD_SCIENCE" | "ZEFR";
  /**
   * Third party partner data for YouTube brand safety verification. This is
   * optional metadata for partners to join or attach data to Ads campaigns.
   */
  brandSafetyIntegrationPartnerData?: GoogleAdsSearchads360V23Common__ThirdPartyIntegrationPartnerData;
}

/**
 * Container for Campaign level third party integration partners.
 */
export interface GoogleAdsSearchads360V23Common__CampaignThirdPartyIntegrationPartners {
  /**
   * Third party integration partners for Brand Lift verification for this
   * Campaign.
   */
  brandLiftIntegrationPartners?: GoogleAdsSearchads360V23Common__CampaignThirdPartyBrandLiftIntegrationPartner[];
  /**
   * Third party integration partners for brand safety verification for this
   * Campaign.
   */
  brandSafetyIntegrationPartners?: GoogleAdsSearchads360V23Common__CampaignThirdPartyBrandSafetyIntegrationPartner[];
  /**
   * Third party integration partners for reach verification for this Campaign.
   */
  reachIntegrationPartners?: GoogleAdsSearchads360V23Common__CampaignThirdPartyReachIntegrationPartner[];
  /**
   * Third party integration partners for YouTube viewability verification for
   * this Campaign.
   */
  viewabilityIntegrationPartners?: GoogleAdsSearchads360V23Common__CampaignThirdPartyViewabilityIntegrationPartner[];
}

/**
 * Container for third party reach integration data for Campaign.
 */
export interface GoogleAdsSearchads360V23Common__CampaignThirdPartyReachIntegrationPartner {
  /**
   * Allowed third party integration partners for reach verification.
   */
  reachIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "NIELSEN" | "COMSCORE" | "KANTAR_MILLWARD_BROWN" | "VIDEO_RESEARCH" | "GEMIUS" | "MEDIA_SCOPE" | "AUDIENCE_PROJECT" | "VIDEO_AMP" | "ISPOT_TV";
  /**
   * Third party partner data for YouTube Reach verification. This is optional
   * metadata for partners to join or attach data to Ads campaigns.
   */
  reachIntegrationPartnerData?: GoogleAdsSearchads360V23Common__ThirdPartyIntegrationPartnerData;
  /**
   * If true, then cost data will be shared with this vendor.
   */
  shareCost?: boolean;
}

/**
 * Container for third party viewability integration data for Campaign.
 */
export interface GoogleAdsSearchads360V23Common__CampaignThirdPartyViewabilityIntegrationPartner {
  /**
   * If true, then cost data will be shared with this vendor.
   */
  shareCost?: boolean;
  /**
   * Allowed third party integration partners for YouTube viewability
   * verification.
   */
  viewabilityIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "DOUBLE_VERIFY" | "INTEGRAL_AD_SCIENCE";
  /**
   * Third party partner data for YouTube viewability verification. This is
   * optional metadata for partners to join or attach data to Ads campaigns.
   */
  viewabilityIntegrationPartnerData?: GoogleAdsSearchads360V23Common__ThirdPartyIntegrationPartnerData;
}

/**
 * Represents a Carrier Criterion.
 */
export interface GoogleAdsSearchads360V23Common__CarrierInfo {
  /**
   * The Carrier constant resource name.
   */
  carrierConstant?: string;
}

/**
 * One chain level filter on location in a feed item set. The filtering logic
 * among all the fields is AND.
 */
export interface GoogleAdsSearchads360V23Common__ChainFilter {
  /**
   * Required. Used to filter chain locations by chain id. Only chain locations
   * that belong to the specified chain will be in the asset set.
   */
  chainId?: bigint;
  /**
   * Used to filter chain locations by location attributes. Only chain
   * locations that belong to all of the specified attribute(s) will be in the
   * asset set. If this field is empty, it means no filtering on this field.
   */
  locationAttributes?: string[];
}

function serializeGoogleAdsSearchads360V23Common__ChainFilter(data: any): GoogleAdsSearchads360V23Common__ChainFilter {
  return {
    ...data,
    chainId: data["chainId"] !== undefined ? String(data["chainId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ChainFilter(data: any): GoogleAdsSearchads360V23Common__ChainFilter {
  return {
    ...data,
    chainId: data["chainId"] !== undefined ? BigInt(data["chainId"]) : undefined,
  };
}

/**
 * Represents information about a Chain dynamic location group. Only applicable
 * if the sync level AssetSet's type is LOCATION_SYNC and sync source is chain.
 */
export interface GoogleAdsSearchads360V23Common__ChainLocationGroup {
  /**
   * Used to filter chain locations by chain ids. Only Locations that belong to
   * the specified chain(s) will be in the asset set.
   */
  dynamicChainLocationGroupFilters?: GoogleAdsSearchads360V23Common__ChainFilter[];
}

function serializeGoogleAdsSearchads360V23Common__ChainLocationGroup(data: any): GoogleAdsSearchads360V23Common__ChainLocationGroup {
  return {
    ...data,
    dynamicChainLocationGroupFilters: data["dynamicChainLocationGroupFilters"] !== undefined ? data["dynamicChainLocationGroupFilters"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__ChainFilter(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ChainLocationGroup(data: any): GoogleAdsSearchads360V23Common__ChainLocationGroup {
  return {
    ...data,
    dynamicChainLocationGroupFilters: data["dynamicChainLocationGroupFilters"] !== undefined ? data["dynamicChainLocationGroupFilters"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__ChainFilter(item))) : undefined,
  };
}

/**
 * Data used to configure a location set populated with the specified chains.
 */
export interface GoogleAdsSearchads360V23Common__ChainSet {
  /**
   * Required. A list of chain level filters, all filters are OR'ed together.
   */
  chains?: GoogleAdsSearchads360V23Common__ChainFilter[];
  /**
   * Required. Immutable. Relationship type the specified chains have with this
   * advertiser.
   */
  relationshipType?:  | "UNSPECIFIED" | "UNKNOWN" | "AUTO_DEALERS" | "GENERAL_RETAILERS";
}

function serializeGoogleAdsSearchads360V23Common__ChainSet(data: any): GoogleAdsSearchads360V23Common__ChainSet {
  return {
    ...data,
    chains: data["chains"] !== undefined ? data["chains"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__ChainFilter(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ChainSet(data: any): GoogleAdsSearchads360V23Common__ChainSet {
  return {
    ...data,
    chains: data["chains"] !== undefined ? data["chains"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__ChainFilter(item))) : undefined,
  };
}

/**
 * Location criteria associated with a click.
 */
export interface GoogleAdsSearchads360V23Common__ClickLocation {
  /**
   * The city location criterion associated with the impression.
   */
  city?: string;
  /**
   * The country location criterion associated with the impression.
   */
  country?: string;
  /**
   * The metro location criterion associated with the impression.
   */
  metro?: string;
  /**
   * The most specific location criterion associated with the impression.
   */
  mostSpecific?: string;
  /**
   * The region location criterion associated with the impression.
   */
  region?: string;
}

/**
 * A combined audience criterion.
 */
export interface GoogleAdsSearchads360V23Common__CombinedAudienceInfo {
  /**
   * The CombinedAudience resource name.
   */
  combinedAudience?: string;
}

/**
 * Commission is an automatic bidding strategy in which the advertiser pays a
 * certain portion of the conversion value.
 */
export interface GoogleAdsSearchads360V23Common__Commission {
  /**
   * Commission rate defines the portion of the conversion value that the
   * advertiser will be billed. A commission rate of x should be passed into
   * this field as (x * 1,000,000). For example, 106,000 represents a commission
   * rate of 0.106 (10.6%).
   */
  commissionRateMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__Commission(data: any): GoogleAdsSearchads360V23Common__Commission {
  return {
    ...data,
    commissionRateMicros: data["commissionRateMicros"] !== undefined ? String(data["commissionRateMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__Commission(data: any): GoogleAdsSearchads360V23Common__Commission {
  return {
    ...data,
    commissionRateMicros: data["commissionRateMicros"] !== undefined ? BigInt(data["commissionRateMicros"]) : undefined,
  };
}

/**
 * The concept group for the keyword concept.
 */
export interface GoogleAdsSearchads360V23Common__ConceptGroup {
  /**
   * The concept group name.
   */
  name?: string;
  /**
   * The concept group type.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "BRAND" | "OTHER_BRANDS" | "NON_BRAND";
}

/**
 * Consent
 */
export interface GoogleAdsSearchads360V23Common__Consent {
  /**
   * This represents consent for ad personalization. This can only be set for
   * OfflineUserDataJobService and UserDataService.
   */
  adPersonalization?:  | "UNSPECIFIED" | "UNKNOWN" | "GRANTED" | "DENIED";
  /**
   * This represents consent for ad user data.
   */
  adUserData?:  | "UNSPECIFIED" | "UNKNOWN" | "GRANTED" | "DENIED";
}

/**
 * Content Label for category exclusion.
 */
export interface GoogleAdsSearchads360V23Common__ContentLabelInfo {
  /**
   * Content label type, required for CREATE operations.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "SEXUALLY_SUGGESTIVE" | "BELOW_THE_FOLD" | "PARKED_DOMAIN" | "JUVENILE" | "PROFANITY" | "TRAGEDY" | "VIDEO" | "VIDEO_RATING_DV_G" | "VIDEO_RATING_DV_PG" | "VIDEO_RATING_DV_T" | "VIDEO_RATING_DV_MA" | "VIDEO_NOT_YET_RATED" | "EMBEDDED_VIDEO" | "LIVE_STREAMING_VIDEO" | "SOCIAL_ISSUES" | "BRAND_SUITABILITY_CONTENT_FOR_FAMILIES" | "BRAND_SUITABILITY_GAMES_FIGHTING" | "BRAND_SUITABILITY_GAMES_MATURE" | "BRAND_SUITABILITY_HEALTH_SENSITIVE" | "BRAND_SUITABILITY_HEALTH_SOURCE_UNDETERMINED" | "BRAND_SUITABILITY_NEWS_RECENT" | "BRAND_SUITABILITY_NEWS_SENSITIVE" | "BRAND_SUITABILITY_NEWS_SOURCE_NOT_FEATURED" | "BRAND_SUITABILITY_POLITICS" | "BRAND_SUITABILITY_RELIGION";
}

/**
 * Projected metrics for a specific CPC bid amount.
 */
export interface GoogleAdsSearchads360V23Common__CpcBidSimulationPoint {
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions.
   */
  biddableConversionsValue?: number;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * The simulated CPC bid upon which projected metrics are based.
   */
  cpcBidMicros?: bigint;
  /**
   * The simulated scaling modifier upon which projected metrics are based. All
   * CPC bids relevant to the simulated entity are scaled by this modifier.
   */
  cpcBidScalingModifier?: number;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected required daily budget that the advertiser must set in order to
   * receive the estimated traffic, in micros of advertiser currency.
   */
  requiredBudgetAmountMicros?: bigint;
  /**
   * Projected number of top slot impressions. Only search advertising channel
   * type supports this field.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__CpcBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__CpcBidSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? String(data["requiredBudgetAmountMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__CpcBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__CpcBidSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? BigInt(data["requiredBudgetAmountMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type CPC_BID.
 */
export interface GoogleAdsSearchads360V23Common__CpcBidSimulationPointList {
  /**
   * Projected metrics for a series of CPC bid amounts.
   */
  points?: GoogleAdsSearchads360V23Common__CpcBidSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__CpcBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__CpcBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__CpcBidSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__CpcBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__CpcBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__CpcBidSimulationPoint(item))) : undefined,
  };
}

/**
 * Projected metrics for a specific CPV bid amount.
 */
export interface GoogleAdsSearchads360V23Common__CpvBidSimulationPoint {
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * The simulated CPV bid upon which projected metrics are based.
   */
  cpvBidMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected number of views.
   */
  views?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__CpvBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__CpvBidSimulationPoint {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? String(data["cpvBidMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    views: data["views"] !== undefined ? String(data["views"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__CpvBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__CpvBidSimulationPoint {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? BigInt(data["cpvBidMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    views: data["views"] !== undefined ? BigInt(data["views"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type CPV_BID.
 */
export interface GoogleAdsSearchads360V23Common__CpvBidSimulationPointList {
  /**
   * Projected metrics for a series of CPV bid amounts.
   */
  points?: GoogleAdsSearchads360V23Common__CpvBidSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__CpvBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__CpvBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__CpvBidSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__CpvBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__CpvBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__CpvBidSimulationPoint(item))) : undefined,
  };
}

/**
 * Information of category availability, per advertising channel.
 */
export interface GoogleAdsSearchads360V23Common__CriterionCategoryAvailability {
  /**
   * Channel types and subtypes that are available to the category.
   */
  channel?: GoogleAdsSearchads360V23Common__CriterionCategoryChannelAvailability;
  /**
   * Locales that are available to the category for the channel.
   */
  locale?: GoogleAdsSearchads360V23Common__CriterionCategoryLocaleAvailability[];
}

/**
 * Information of advertising channel type and subtypes a category is available
 * in.
 */
export interface GoogleAdsSearchads360V23Common__CriterionCategoryChannelAvailability {
  /**
   * Channel subtypes under the channel type the category is available to.
   */
  advertisingChannelSubType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH_MOBILE_APP" | "DISPLAY_MOBILE_APP" | "SEARCH_EXPRESS" | "DISPLAY_EXPRESS" | "SHOPPING_SMART_ADS" | "DISPLAY_GMAIL_AD" | "DISPLAY_SMART_CAMPAIGN" | "VIDEO_ACTION" | "VIDEO_NON_SKIPPABLE" | "APP_CAMPAIGN" | "APP_CAMPAIGN_FOR_ENGAGEMENT" | "LOCAL_CAMPAIGN" | "SHOPPING_COMPARISON_LISTING_ADS" | "SMART_CAMPAIGN" | "VIDEO_SEQUENCE" | "APP_CAMPAIGN_FOR_PRE_REGISTRATION" | "VIDEO_REACH_TARGET_FREQUENCY" | "TRAVEL_ACTIVITIES" | "SOCIAL_FACEBOOK_TRACKING_ONLY"[];
  /**
   * Channel type the category is available to.
   */
  advertisingChannelType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "SHOPPING" | "HOTEL" | "VIDEO" | "MULTI_CHANNEL" | "LOCAL" | "SMART" | "PERFORMANCE_MAX" | "LOCAL_SERVICES" | "TRAVEL" | "DEMAND_GEN" | "SOCIAL";
  /**
   * Format of the channel availability. Can be ALL_CHANNELS (the rest of the
   * fields will not be set), CHANNEL_TYPE (only advertising_channel_type type
   * will be set, the category is available to all sub types under it) or
   * CHANNEL_TYPE_AND_SUBTYPES (advertising_channel_type,
   * advertising_channel_sub_type, and include_default_channel_sub_type will all
   * be set).
   */
  availabilityMode?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_CHANNELS" | "CHANNEL_TYPE_AND_ALL_SUBTYPES" | "CHANNEL_TYPE_AND_SUBSET_SUBTYPES";
  /**
   * Whether default channel sub type is included. For example,
   * advertising_channel_type being DISPLAY and include_default_channel_sub_type
   * being false means that the default display campaign where channel sub type
   * is not set is not included in this availability configuration.
   */
  includeDefaultChannelSubType?: boolean;
}

/**
 * Information about which locales a category is available in.
 */
export interface GoogleAdsSearchads360V23Common__CriterionCategoryLocaleAvailability {
  /**
   * Format of the locale availability. Can be LAUNCHED_TO_ALL (both country
   * and language will be empty), COUNTRY (only country will be set), LANGUAGE
   * (only language wil be set), COUNTRY_AND_LANGUAGE (both country and language
   * will be set).
   */
  availabilityMode?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_LOCALES" | "COUNTRY_AND_ALL_LANGUAGES" | "LANGUAGE_AND_ALL_COUNTRIES" | "COUNTRY_AND_LANGUAGE";
  /**
   * The ISO-3166-1 alpha-2 country code associated with the category.
   */
  countryCode?: string;
  /**
   * ISO 639-1 code of the language associated with the category.
   */
  languageCode?: string;
}

/**
 * UserList of CRM users provided by the advertiser.
 */
export interface GoogleAdsSearchads360V23Common__CrmBasedUserListInfo {
  /**
   * A string that uniquely identifies a mobile application from which the data
   * was collected. For iOS, the ID string is the 9 digit string that appears at
   * the end of an App Store URL (for example, "476943146" for "Flood-It! 2"
   * whose App Store link is
   * http://itunes.apple.com/us/app/flood-it!-2/id476943146). For Android, the
   * ID string is the application's package name (for example,
   * "com.labpixies.colordrips" for "Color Drips" given Google Play link
   * https://play.google.com/store/apps/details?id=com.labpixies.colordrips).
   * Required when creating CrmBasedUserList for uploading mobile advertising
   * IDs.
   */
  appId?: string;
  /**
   * Data source of the list. Default value is FIRST_PARTY. Only customers on
   * the allow-list can create third-party sourced CRM lists.
   */
  dataSourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "FIRST_PARTY" | "THIRD_PARTY_CREDIT_BUREAU" | "THIRD_PARTY_VOTER_FILE" | "THIRD_PARTY_PARTNER_DATA";
  /**
   * Matching key type of the list. Mixed data types are not allowed on the
   * same list. This field is required for an ADD operation.
   */
  uploadKeyType?:  | "UNSPECIFIED" | "UNKNOWN" | "CONTACT_INFO" | "CRM_ID" | "MOBILE_ADVERTISING_ID";
}

/**
 * A custom affinity criterion. A criterion of this type is only targetable.
 */
export interface GoogleAdsSearchads360V23Common__CustomAffinityInfo {
  /**
   * The CustomInterest resource name.
   */
  customAffinity?: string;
}

/**
 * A custom audience criterion.
 */
export interface GoogleAdsSearchads360V23Common__CustomAudienceInfo {
  /**
   * The CustomAudience resource name.
   */
  customAudience?: string;
}

/**
 * Custom audience segment.
 */
export interface GoogleAdsSearchads360V23Common__CustomAudienceSegment {
  /**
   * The custom audience resource.
   */
  customAudience?: string;
}

/**
 * Lifecycle goal optimization value settings.
 */
export interface GoogleAdsSearchads360V23Common__CustomerLifecycleOptimizationValueSettings {
  /**
   * High lifetime value of the lifecycle goal. For example, for customer
   * acquisition goals, high lifetime value is the incremental conversion value
   * for lapsed customers who are of high value. High lifetime value should be
   * greater than value, if set.
   */
  additionalHighLifetimeValue?: number;
  /**
   * Value of the lifecycle goal. For example, for retention goals, value is
   * the incremental conversion value for lapsed customers who are not of high
   * value.
   */
  additionalValue?: number;
}

/**
 * Metadata for customer match user list.
 */
export interface GoogleAdsSearchads360V23Common__CustomerMatchUserListMetadata {
  /**
   * The consent setting for all the users in this job.
   */
  consent?: GoogleAdsSearchads360V23Common__Consent;
  /**
   * The resource name of remarketing list to update data. Required for job of
   * CUSTOMER_MATCH_USER_LIST type.
   */
  userList?: string;
}

/**
 * Container for third party Brand Lift integration data for Customer.
 */
export interface GoogleAdsSearchads360V23Common__CustomerThirdPartyBrandLiftIntegrationPartner {
  /**
   * If true, cost data can be shared with this vendor.
   */
  allowShareCost?: boolean;
  /**
   * Allowed Third Party integration partners for Brand Lift verification.
   */
  brandLiftIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "KANTAR_MILLWARD_BROWN" | "DYNATA" | "INTAGE" | "MACROMILL";
}

/**
 * Container for third party brand safety integration data for Customer.
 */
export interface GoogleAdsSearchads360V23Common__CustomerThirdPartyBrandSafetyIntegrationPartner {
  /**
   * Allowed third party integration partners for brand safety verification.
   */
  brandSafetyIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "DOUBLE_VERIFY" | "INTEGRAL_AD_SCIENCE" | "ZEFR";
}

/**
 * Container for Customer level third party integration partners.
 */
export interface GoogleAdsSearchads360V23Common__CustomerThirdPartyIntegrationPartners {
  /**
   * Allowed third party integration partners for Brand Lift verification.
   */
  brandLiftIntegrationPartners?: GoogleAdsSearchads360V23Common__CustomerThirdPartyBrandLiftIntegrationPartner[];
  /**
   * Allowed third party integration partners for brand safety verification.
   */
  brandSafetyIntegrationPartners?: GoogleAdsSearchads360V23Common__CustomerThirdPartyBrandSafetyIntegrationPartner[];
  /**
   * Allowed third party integration partners for reach verification.
   */
  reachIntegrationPartners?: GoogleAdsSearchads360V23Common__CustomerThirdPartyReachIntegrationPartner[];
  /**
   * Allowed third party integration partners for YouTube viewability
   * verification.
   */
  viewabilityIntegrationPartners?: GoogleAdsSearchads360V23Common__CustomerThirdPartyViewabilityIntegrationPartner[];
}

/**
 * Container for third party reach integration data for Customer.
 */
export interface GoogleAdsSearchads360V23Common__CustomerThirdPartyReachIntegrationPartner {
  /**
   * If true, cost data can be shared with this vendor.
   */
  allowShareCost?: boolean;
  /**
   * Allowed Third Party integration partners for reach verification.
   */
  reachIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "NIELSEN" | "COMSCORE" | "KANTAR_MILLWARD_BROWN" | "VIDEO_RESEARCH" | "GEMIUS" | "MEDIA_SCOPE" | "AUDIENCE_PROJECT" | "VIDEO_AMP" | "ISPOT_TV";
}

/**
 * Container for third party viewability integration data for Customer.
 */
export interface GoogleAdsSearchads360V23Common__CustomerThirdPartyViewabilityIntegrationPartner {
  /**
   * If true, cost data can be shared with this vendor.
   */
  allowShareCost?: boolean;
  /**
   * Allowed third party integration partners for YouTube viewability
   * verification.
   */
  viewabilityIntegrationPartner?:  | "UNSPECIFIED" | "UNKNOWN" | "DOUBLE_VERIFY" | "INTEGRAL_AD_SCIENCE";
}

/**
 * A custom intent criterion. A criterion of this type is only targetable.
 */
export interface GoogleAdsSearchads360V23Common__CustomIntentInfo {
  /**
   * The CustomInterest resource name.
   */
  customIntent?: string;
}

/**
 * A customizer value that is referenced in customizer linkage entities like
 * CustomerCustomizer, CampaignCustomizer, etc.
 */
export interface GoogleAdsSearchads360V23Common__CustomizerValue {
  /**
   * Required. Value to insert in creative text. Customizer values of all types
   * are stored as string to make formatting unambiguous.
   */
  stringValue?: string;
  /**
   * Required. The data type for the customizer value. It must match the
   * attribute type. The string_value content must match the constraints
   * associated with the type.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "TEXT" | "NUMBER" | "PRICE" | "PERCENT";
}

/**
 * A mapping that can be used by custom parameter tags in a
 * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
 */
export interface GoogleAdsSearchads360V23Common__CustomParameter {
  /**
   * The key matching the parameter tag name.
   */
  key?: string;
  /**
   * The value to be substituted.
   */
  value?: string;
}

/**
 * A date range.
 */
export interface GoogleAdsSearchads360V23Common__DateRange {
  /**
   * The end date, in yyyy-mm-dd format. This date is inclusive.
   */
  endDate?: string;
  /**
   * The start date, in yyyy-mm-dd format. This date is inclusive.
   */
  startDate?: string;
}

/**
 * A Demand Gen carousel ad.
 */
export interface GoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo {
  /**
   * Required. The Advertiser/brand name.
   */
  businessName?: string;
  /**
   * Call to action text.
   */
  callToActionText?: string;
  /**
   * Required. Carousel cards that will display with the ad. Min 2 max 10.
   */
  carouselCards?: GoogleAdsSearchads360V23Common__AdDemandGenCarouselCardAsset[];
  /**
   * Required. The descriptive text of the ad.
   */
  description?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Required. Headline of the ad.
   */
  headline?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Required. Logo image to be used in the ad. The minimum size is 128x128 and
   * the aspect ratio must be 1:1 (+-1%).
   */
  logoImage?: GoogleAdsSearchads360V23Common__AdImageAsset;
}

function serializeGoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo {
  return {
    ...data,
    description: data["description"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["description"]) : undefined,
    headline: data["headline"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["headline"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo {
  return {
    ...data,
    description: data["description"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["description"]) : undefined,
    headline: data["headline"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["headline"]) : undefined,
  };
}

/**
 * A Demand Gen Carousel Card asset.
 */
export interface GoogleAdsSearchads360V23Common__DemandGenCarouselCardAsset {
  /**
   * Call to action text.
   */
  callToActionText?: string;
  /**
   * Required. Headline of the carousel card.
   */
  headline?: string;
  /**
   * Asset resource name of the associated 1.91:1 marketing image. This and/or
   * square marketing image asset is required.
   */
  marketingImageAsset?: string;
  /**
   * Asset resource name of the associated 4:5 portrait marketing image.
   */
  portraitMarketingImageAsset?: string;
  /**
   * Asset resource name of the associated square marketing image. This and/or
   * a marketing image asset is required.
   */
  squareMarketingImageAsset?: string;
}

/**
 * A Demand Gen multi asset ad.
 */
export interface GoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo {
  /**
   * The Advertiser/brand name. Maximum display width is 25. Required.
   */
  businessName?: string;
  /**
   * Call to action text.
   */
  callToActionText?: string;
  /**
   * The descriptive text of the ad. Maximum display width is 90. At least 1
   * and max 5 descriptions can be specified.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Headline text asset of the ad. Maximum display width is 30. At least 1 and
   * max 5 headlines can be specified.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Logo image assets to be used in the ad. Valid image types are GIF, JPEG,
   * and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1
   * (+-1%). At least 1 and max 5 logo images can be specified.
   */
  logoImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Marketing image assets to be used in the ad. Valid image types are GIF,
   * JPEG, and PNG. The minimum size is 600x314 and the aspect ratio must be
   * 1.91:1 (+-1%). Required if square_marketing_images is not present.
   */
  marketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Portrait marketing image assets to be used in the ad. Valid image types
   * are GIF, JPEG, and PNG. The minimum size is 480x600 and the aspect ratio
   * must be 4:5 (+-1%).
   */
  portraitMarketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Square marketing image assets to be used in the ad. Valid image types are
   * GIF, JPEG, and PNG. The minimum size is 300x300 and the aspect ratio must
   * be 1:1 (+-1%). Required if marketing_images is not present.
   */
  squareMarketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Tall portrait marketing image assets to be used in the ad. Valid image
   * types are GIF, JPEG, and PNG. The minimum size is 600x1067 and the aspect
   * ratio must be 9:16 (+-1%). Combined with `marketing_images`,
   * `square_marketing_images`, and `portrait_marketing_images`, the maximum is
   * 20.
   */
  tallPortraitMarketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
}

function serializeGoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * A Demand Gen product ad.
 */
export interface GoogleAdsSearchads360V23Common__DemandGenProductAdInfo {
  /**
   * First part of text that appears in the ad with the displayed URL.
   */
  breadcrumb1?: string;
  /**
   * Second part of text that appears in the ad with the displayed URL.
   */
  breadcrumb2?: string;
  /**
   * Required. The advertiser/brand name.
   */
  businessName?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Asset of type CallToActionAsset used for the "Call To Action" button.
   */
  callToAction?: GoogleAdsSearchads360V23Common__AdCallToActionAsset;
  /**
   * Required. Text asset used for the description.
   */
  description?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Required. Text asset used for the short headline.
   */
  headline?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Required. Logo image to be used in the ad. Valid image types are GIF,
   * JPEG, and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1
   * (+-1%).
   */
  logoImage?: GoogleAdsSearchads360V23Common__AdImageAsset;
}

function serializeGoogleAdsSearchads360V23Common__DemandGenProductAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenProductAdInfo {
  return {
    ...data,
    businessName: data["businessName"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["businessName"]) : undefined,
    description: data["description"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["description"]) : undefined,
    headline: data["headline"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["headline"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DemandGenProductAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenProductAdInfo {
  return {
    ...data,
    businessName: data["businessName"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["businessName"]) : undefined,
    description: data["description"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["description"]) : undefined,
    headline: data["headline"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["headline"]) : undefined,
  };
}

/**
 * A Demand Gen video responsive ad.
 */
export interface GoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo {
  /**
   * First part of text that appears in the ad with the displayed URL.
   */
  breadcrumb1?: string;
  /**
   * Second part of text that appears in the ad with the displayed URL.
   */
  breadcrumb2?: string;
  /**
   * Required. The advertiser/brand name.
   */
  businessName?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * Assets of type CallToActionAsset used for the "Call To Action" button.
   */
  callToActions?: GoogleAdsSearchads360V23Common__AdCallToActionAsset[];
  /**
   * List of image assets used for the companion banner. Currently, only a
   * single value for the companion banner asset is supported.
   */
  companionBanners?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * List of text assets used for the description.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets used for the short headline.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Logo image to be used in the ad. Valid image types are GIF, JPEG, and PNG.
   * The minimum size is 128x128 and the aspect ratio must be 1:1 (+-1%).
   */
  logoImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * List of text assets used for the long headline.
   */
  longHeadlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of YouTube video assets used for the ad.
   */
  videos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo {
  return {
    ...data,
    businessName: data["businessName"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["businessName"]) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    longHeadlines: data["longHeadlines"] !== undefined ? data["longHeadlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo(data: any): GoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo {
  return {
    ...data,
    businessName: data["businessName"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["businessName"]) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    longHeadlines: data["longHeadlines"] !== undefined ? data["longHeadlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * Detailed demographic segment.
 */
export interface GoogleAdsSearchads360V23Common__DetailedDemographicSegment {
  /**
   * The detailed demographic resource.
   */
  detailedDemographic?: string;
}

/**
 * A device criterion.
 */
export interface GoogleAdsSearchads360V23Common__DeviceInfo {
  /**
   * Type of the device.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER";
}

/**
 * A generic type of display ad. The exact ad format is controlled by the
 * `display_upload_product_type` field, which determines what kinds of data need
 * to be included with the ad.
 */
export interface GoogleAdsSearchads360V23Common__DisplayUploadAdInfo {
  /**
   * The product type of this ad. See comments on the enum for details.
   */
  displayUploadProductType?:  | "UNSPECIFIED" | "UNKNOWN" | "HTML5_UPLOAD_AD" | "DYNAMIC_HTML5_EDUCATION_AD" | "DYNAMIC_HTML5_FLIGHT_AD" | "DYNAMIC_HTML5_HOTEL_RENTAL_AD" | "DYNAMIC_HTML5_JOB_AD" | "DYNAMIC_HTML5_LOCAL_AD" | "DYNAMIC_HTML5_REAL_ESTATE_AD" | "DYNAMIC_HTML5_CUSTOM_AD" | "DYNAMIC_HTML5_TRAVEL_AD" | "DYNAMIC_HTML5_HOTEL_AD";
  /**
   * A media bundle asset to be used in the ad. For information about the media
   * bundle for HTML5_UPLOAD_AD, see
   * https://support.google.com/google-ads/answer/1722096 Media bundles that are
   * part of dynamic product types use a special format that needs to be created
   * through the Google Web Designer. See
   * https://support.google.com/webdesigner/answer/7543898 for more information.
   */
  mediaBundle?: GoogleAdsSearchads360V23Common__AdMediaBundleAsset;
}

/**
 * Represents a filter on Business Profile locations in an asset set. If
 * multiple filters are provided, they are AND'ed together.
 */
export interface GoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter {
  /**
   * Used to filter Business Profile locations by business name.
   */
  businessNameFilter?: GoogleAdsSearchads360V23Common__BusinessProfileBusinessNameFilter;
  /**
   * Used to filter Business Profile locations by label. Only locations that
   * have any of the listed labels will be in the asset set. Label filters are
   * OR'ed together.
   */
  labelFilters?: string[];
  /**
   * Used to filter Business Profile locations by listing ids.
   */
  listingIdFilters?: bigint[];
}

function serializeGoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter(data: any): GoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter {
  return {
    ...data,
    listingIdFilters: data["listingIdFilters"] !== undefined ? data["listingIdFilters"].map((item: any) => (String(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter(data: any): GoogleAdsSearchads360V23Common__DynamicBusinessProfileLocationGroupFilter {
  return {
    ...data,
    listingIdFilters: data["listingIdFilters"] !== undefined ? data["listingIdFilters"].map((item: any) => (BigInt(item))) : undefined,
  };
}

/**
 * A dynamic custom asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicCustomAsset {
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Contextual keywords, for example, Sedans, 4 door sedans.
   */
  contextualKeywords?: string[];
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $20,000.00.
   */
  formattedPrice?: string;
  /**
   * Formatted sale price which can be any characters. If set, this attribute
   * will be used instead of 'sale price', for example, On sale for $15,000.00.
   */
  formattedSalePrice?: string;
  /**
   * Required. ID which can be any sequence of letters and digits, and must be
   * unique and match the values of remarketing tag, for example, sedan.
   * Required.
   */
  id?: string;
  /**
   * ID2 which can be any sequence of letters and digits, for example, red. ID
   * sequence (ID + ID2) must be unique.
   */
  id2?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Item address which can be specified in one of the following formats. (1)
   * City, state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403
   */
  itemAddress?: string;
  /**
   * Item category, for example, Sedans.
   */
  itemCategory?: string;
  /**
   * Item description, for example, Best selling mid-size car.
   */
  itemDescription?: string;
  /**
   * Item subtitle, for example, At your Mountain View dealership.
   */
  itemSubtitle?: string;
  /**
   * Required. Item title, for example, Mid-size sedan. Required.
   */
  itemTitle?: string;
  /**
   * Price which can be number followed by the alphabetic currency code, ISO
   * 4217 standard. Use '.' as the decimal mark, for example, 20,000.00 USD.
   */
  price?: string;
  /**
   * Sale price which can be number followed by the alphabetic currency code,
   * ISO 4217 standard. Use '.' as the decimal mark, for example, 15,000.00 USD.
   * Must be less than the 'price' field.
   */
  salePrice?: string;
  /**
   * Similar IDs.
   */
  similarIds?: string[];
}

function serializeGoogleAdsSearchads360V23Common__DynamicCustomAsset(data: any): GoogleAdsSearchads360V23Common__DynamicCustomAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicCustomAsset(data: any): GoogleAdsSearchads360V23Common__DynamicCustomAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A Dynamic Education asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicEducationAsset {
  /**
   * School address which can be specified in one of the following formats. (1)
   * City, state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403
   */
  address?: string;
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Contextual keywords, for example, Nursing certification, Health, Mountain
   * View.
   */
  contextualKeywords?: string[];
  /**
   * Image url, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Location ID which can be any sequence of letters and digits and must be
   * unique.
   */
  locationId?: string;
  /**
   * Program description, for example, Nursing Certification.
   */
  programDescription?: string;
  /**
   * Required. Program ID which can be any sequence of letters and digits, and
   * must be unique and match the values of remarketing tag. Required.
   */
  programId?: string;
  /**
   * Required. Program name, for example, Nursing. Required.
   */
  programName?: string;
  /**
   * School name, for example, Mountain View School of Nursing.
   */
  schoolName?: string;
  /**
   * Similar program IDs.
   */
  similarProgramIds?: string[];
  /**
   * Subject of study, for example, Health.
   */
  subject?: string;
  /**
   * Thumbnail image url, for example, http://www.example.com/thumbnail.png.
   * The thumbnail image will not be uploaded as image asset.
   */
  thumbnailImageUrl?: string;
}

function serializeGoogleAdsSearchads360V23Common__DynamicEducationAsset(data: any): GoogleAdsSearchads360V23Common__DynamicEducationAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicEducationAsset(data: any): GoogleAdsSearchads360V23Common__DynamicEducationAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A dynamic flights asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicFlightsAsset {
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * A custom field which can be multiple key to values mapping separated by
   * delimiters (",", "|" and ":"), in the forms of ": , , ... , | : , ... , |
   * ... | : , ... ," for example, wifi: most | aircraft: 320, 77W | flights: 42
   * | legroom: 32".
   */
  customMapping?: string;
  /**
   * Required. Destination ID which can be any sequence of letters and digits,
   * and must be unique and match the values of remarketing tag. Required.
   */
  destinationId?: string;
  /**
   * Destination name, for example, Paris.
   */
  destinationName?: string;
  /**
   * Required. Flight description, for example, Book your ticket. Required.
   */
  flightDescription?: string;
  /**
   * Flight price which can be number followed by the alphabetic currency code,
   * ISO 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.
   */
  flightPrice?: string;
  /**
   * Flight sale price which can be number followed by the alphabetic currency
   * code, ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00
   * USD. Must be less than the 'flight_price' field.
   */
  flightSalePrice?: string;
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $100.00.
   */
  formattedPrice?: string;
  /**
   * Formatted sale price which can be any characters. If set, this attribute
   * will be used instead of 'sale price', for example, On sale for $80.00.
   */
  formattedSalePrice?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Origin ID which can be any sequence of letters and digits. The ID sequence
   * (destination ID + origin ID) must be unique.
   */
  originId?: string;
  /**
   * Origin name, for example, London.
   */
  originName?: string;
  /**
   * Similar destination IDs, for example, PAR,LON.
   */
  similarDestinationIds?: string[];
}

function serializeGoogleAdsSearchads360V23Common__DynamicFlightsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicFlightsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicFlightsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicFlightsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A dynamic hotels and rentals asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset {
  /**
   * Address which can be specified in one of the following formats. (1) City,
   * state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403
   */
  address?: string;
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Category, for example, Hotel suite.
   */
  category?: string;
  /**
   * Contextual keywords, for example, Mountain View "Hotels", South Bay
   * hotels.
   */
  contextualKeywords?: string[];
  /**
   * Description, for example, Close to SJC Airport.
   */
  description?: string;
  /**
   * Destination name, for example, Downtown Mountain View.
   */
  destinationName?: string;
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $100.00.
   */
  formattedPrice?: string;
  /**
   * Formatted sale price which can be any characters. If set, this attribute
   * will be used instead of 'sale price', for example, On sale for $80.00.
   */
  formattedSalePrice?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Price which can be number followed by the alphabetic currency code, ISO
   * 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.
   */
  price?: string;
  /**
   * Required. Property ID which can be any sequence of letters and digits, and
   * must be unique and match the values of remarketing tag. Required.
   */
  propertyId?: string;
  /**
   * Required. Property name, for example, Mountain View Hotel. Required.
   */
  propertyName?: string;
  /**
   * ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD.
   * Must be less than the 'price' field.
   */
  salePrice?: string;
  /**
   * Similar property IDs.
   */
  similarPropertyIds?: string[];
  /**
   * Star rating. Must be a number between 1 to 5, inclusive.
   */
  starRating?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
    starRating: data["starRating"] !== undefined ? String(data["starRating"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
    starRating: data["starRating"] !== undefined ? BigInt(data["starRating"]) : undefined,
  };
}

/**
 * A dynamic jobs asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicJobsAsset {
  /**
   * Address which can be specified in one of the following formats. (1) City,
   * state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403.
   */
  address?: string;
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Contextual keywords, for example, Software engineering job.
   */
  contextualKeywords?: string[];
  /**
   * Description, for example, Apply your technical skills.
   */
  description?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Job category, for example, Technical.
   */
  jobCategory?: string;
  /**
   * Required. Job ID which can be any sequence of letters and digits, and must
   * be unique and match the values of remarketing tag. Required.
   */
  jobId?: string;
  /**
   * Job subtitle, for example, Level II.
   */
  jobSubtitle?: string;
  /**
   * Required. Job title, for example, Software engineer. Required.
   */
  jobTitle?: string;
  /**
   * Location ID which can be any sequence of letters and digits. The ID
   * sequence (job ID + location ID) must be unique.
   */
  locationId?: string;
  /**
   * Salary, for example, $100,000.
   */
  salary?: string;
  /**
   * Similar job IDs, for example, 1275.
   */
  similarJobIds?: string[];
}

function serializeGoogleAdsSearchads360V23Common__DynamicJobsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicJobsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicJobsAsset(data: any): GoogleAdsSearchads360V23Common__DynamicJobsAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A dynamic local asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicLocalAsset {
  /**
   * Address which can be specified in one of the following formats. (1) City,
   * state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403.
   */
  address?: string;
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Category, for example, Food.
   */
  category?: string;
  /**
   * Contextual keywords, for example, Save groceries coupons.
   */
  contextualKeywords?: string[];
  /**
   * Required. Deal ID which can be any sequence of letters and digits, and
   * must be unique and match the values of remarketing tag. Required.
   */
  dealId?: string;
  /**
   * Required. Deal name, for example, 50% off at Mountain View Grocers.
   * Required.
   */
  dealName?: string;
  /**
   * Description, for example, Save on your weekly bill.
   */
  description?: string;
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $100.00.
   */
  formattedPrice?: string;
  /**
   * Formatted sale price which can be any characters. If set, this attribute
   * will be used instead of 'sale price', for example, On sale for $80.00.
   */
  formattedSalePrice?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Price which can be a number followed by the alphabetic currency code, ISO
   * 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.
   */
  price?: string;
  /**
   * Sale price which can be number followed by the alphabetic currency code,
   * ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD.
   * Must be less than the 'price' field.
   */
  salePrice?: string;
  /**
   * Similar deal IDs, for example, 1275.
   */
  similarDealIds?: string[];
  /**
   * Subtitle, for example, Groceries.
   */
  subtitle?: string;
}

function serializeGoogleAdsSearchads360V23Common__DynamicLocalAsset(data: any): GoogleAdsSearchads360V23Common__DynamicLocalAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicLocalAsset(data: any): GoogleAdsSearchads360V23Common__DynamicLocalAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A dynamic real estate asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicRealEstateAsset {
  /**
   * Address which can be specified in one of the following formats. (1) City,
   * state, code, country, for example, Mountain View, CA, USA. (2) Full
   * address, for example, 123 Boulevard St, Mountain View, CA 94043. (3)
   * Latitude-longitude in the DDD format, for example, 41.40338, 2.17403
   */
  address?: string;
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * City name, for example, Mountain View, California.
   */
  cityName?: string;
  /**
   * Contextual keywords, for example, For sale; Houses for sale.
   */
  contextualKeywords?: string[];
  /**
   * Description, for example, 3 beds, 2 baths, 1568 sq. ft.
   */
  description?: string;
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $200,000.00.
   */
  formattedPrice?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Required. Listing ID which can be any sequence of letters and digits, and
   * must be unique and match the values of remarketing tag. Required.
   */
  listingId?: string;
  /**
   * Required. Listing name, for example, Boulevard Bungalow. Required.
   */
  listingName?: string;
  /**
   * Listing type, for example, For sale.
   */
  listingType?: string;
  /**
   * Price which can be number followed by the alphabetic currency code, ISO
   * 4217 standard. Use '.' as the decimal mark, for example, 200,000.00 USD.
   */
  price?: string;
  /**
   * Property type, for example, House.
   */
  propertyType?: string;
  /**
   * Similar listing IDs.
   */
  similarListingIds?: string[];
}

function serializeGoogleAdsSearchads360V23Common__DynamicRealEstateAsset(data: any): GoogleAdsSearchads360V23Common__DynamicRealEstateAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicRealEstateAsset(data: any): GoogleAdsSearchads360V23Common__DynamicRealEstateAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * A dynamic travel asset.
 */
export interface GoogleAdsSearchads360V23Common__DynamicTravelAsset {
  /**
   * Android deep link, for example,
   * android-app://com.example.android/http/example.com/gizmos?1234.
   */
  androidAppLink?: string;
  /**
   * Category, for example, Express.
   */
  category?: string;
  /**
   * Contextual keywords, for example, Paris trains.
   */
  contextualKeywords?: string[];
  /**
   * Destination address which can be specified in one of the following
   * formats. (1) City, state, code, country, for example, Mountain View, CA,
   * USA. (2) Full address, for example, 123 Boulevard St, Mountain View, CA
   * 94043. (3) Latitude-longitude in the DDD format, for example, 41.40338,
   * 2.17403.
   */
  destinationAddress?: string;
  /**
   * Required. Destination ID which can be any sequence of letters and digits,
   * and must be unique and match the values of remarketing tag. Required.
   */
  destinationId?: string;
  /**
   * Destination name, for example, Paris.
   */
  destinationName?: string;
  /**
   * Formatted price which can be any characters. If set, this attribute will
   * be used instead of 'price', for example, Starting at $100.00.
   */
  formattedPrice?: string;
  /**
   * Formatted sale price which can be any characters. If set, this attribute
   * will be used instead of 'sale price', for example, On sale for $80.00.
   */
  formattedSalePrice?: string;
  /**
   * Image URL, for example, http://www.example.com/image.png. The image will
   * not be uploaded as image asset.
   */
  imageUrl?: string;
  /**
   * iOS deep link, for example, exampleApp://content/page.
   */
  iosAppLink?: string;
  /**
   * iOS app store ID. This is used to check if the user has the app installed
   * on their device before deep linking. If this field is set, then the
   * ios_app_link field must also be present.
   */
  iosAppStoreId?: bigint;
  /**
   * Origin ID which can be any sequence of letters and digits. The ID sequence
   * (destination ID + origin ID) must be unique.
   */
  originId?: string;
  /**
   * Origin name, for example, London.
   */
  originName?: string;
  /**
   * Price which can be a number followed by the alphabetic currency code, ISO
   * 4217 standard. Use '.' as the decimal mark, for example, 100.00 USD.
   */
  price?: string;
  /**
   * Sale price which can be a number followed by the alphabetic currency code,
   * ISO 4217 standard. Use '.' as the decimal mark, for example, 80.00 USD.
   * Must be less than the 'price' field.
   */
  salePrice?: string;
  /**
   * Similar destination IDs, for example, NYC.
   */
  similarDestinationIds?: string[];
  /**
   * Required. Title, for example, Book your train ticket. Required.
   */
  title?: string;
}

function serializeGoogleAdsSearchads360V23Common__DynamicTravelAsset(data: any): GoogleAdsSearchads360V23Common__DynamicTravelAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? String(data["iosAppStoreId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__DynamicTravelAsset(data: any): GoogleAdsSearchads360V23Common__DynamicTravelAsset {
  return {
    ...data,
    iosAppStoreId: data["iosAppStoreId"] !== undefined ? BigInt(data["iosAppStoreId"]) : undefined,
  };
}

/**
 * An automated bidding strategy that raises bids for clicks that seem more
 * likely to lead to a conversion and lowers them for clicks where they seem
 * less likely. This bidding strategy is deprecated and cannot be created
 * anymore. Use ManualCpc with enhanced_cpc_enabled set to true for equivalent
 * functionality.
 */
export interface GoogleAdsSearchads360V23Common__EnhancedCpc {
}

/**
 * Advertiser defined events and their attributes. All the values in the nested
 * fields are required.
 */
export interface GoogleAdsSearchads360V23Common__EventAttribute {
  /**
   * Required. Advertiser defined event to be used for remarketing. The
   * accepted values are "Viewed", "Cart", "Purchased" and "Recommended".
   */
  event?: string;
  /**
   * Required. Timestamp at which the event happened. The format is YYYY-MM-DD
   * HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from
   * UTC. If the offset is absent, the API will use the account's timezone as
   * default.
   */
  eventDateTime?: string;
  /**
   * Required. Item attributes of the event.
   */
  itemAttribute?: GoogleAdsSearchads360V23Common__EventItemAttribute[];
}

/**
 * Event Item attributes of the Customer Match.
 */
export interface GoogleAdsSearchads360V23Common__EventItemAttribute {
  /**
   * Optional. A unique identifier of a product. It can be either the Merchant
   * Center Item ID or GTIN (Global Trade Item Number).
   */
  itemId?: string;
}

/**
 * An audience segment to be excluded from an audience.
 */
export interface GoogleAdsSearchads360V23Common__ExclusionSegment {
  /**
   * User list segment to be excluded.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListSegment;
}

/**
 * An expanded dynamic search ad.
 */
export interface GoogleAdsSearchads360V23Common__ExpandedDynamicSearchAdInfo {
  /**
   * The description of the ad.
   */
  description?: string;
  /**
   * The second description of the ad.
   */
  description2?: string;
}

/**
 * An expanded text ad.
 */
export interface GoogleAdsSearchads360V23Common__ExpandedTextAdInfo {
  /**
   * The description of the ad.
   */
  description?: string;
  /**
   * The second description of the ad.
   */
  description2?: string;
  /**
   * The first part of the ad's headline.
   */
  headlinePart1?: string;
  /**
   * The second part of the ad's headline.
   */
  headlinePart2?: string;
  /**
   * The third part of the ad's headline.
   */
  headlinePart3?: string;
  /**
   * The text that can appear alongside the ad's displayed URL.
   */
  path1?: string;
  /**
   * Additional text that can appear alongside the ad's displayed URL.
   */
  path2?: string;
}

/**
 * Represents an extended demographic criterion.
 */
export interface GoogleAdsSearchads360V23Common__ExtendedDemographicInfo {
  /**
   * Taxonomy id of the extended demographic group.
   */
  extendedDemographicId?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data: any): GoogleAdsSearchads360V23Common__ExtendedDemographicInfo {
  return {
    ...data,
    extendedDemographicId: data["extendedDemographicId"] !== undefined ? String(data["extendedDemographicId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data: any): GoogleAdsSearchads360V23Common__ExtendedDemographicInfo {
  return {
    ...data,
    extendedDemographicId: data["extendedDemographicId"] !== undefined ? BigInt(data["extendedDemographicId"]) : undefined,
  };
}

/**
 * Facebook Messenger information to use for messaging.
 */
export interface GoogleAdsSearchads360V23Common__FacebookMessengerBusinessMessageInfo {
  /**
   * Required. Facebook page name used for starting a chat on Facebook
   * Messenger.
   */
  pageName?: string;
}

/**
 * A URL for deep linking into an app for the given operating system.
 */
export interface GoogleAdsSearchads360V23Common__FinalAppUrl {
  /**
   * The operating system targeted by this URL. Required.
   */
  osType?:  | "UNSPECIFIED" | "UNKNOWN" | "IOS" | "ANDROID";
  /**
   * The app deep link URL. Deep links specify a location in an app that
   * corresponds to the content you'd like to show, and should be of the form
   * {scheme}://{host_path} The scheme identifies which app to open. For your
   * app, you can use a custom scheme that starts with the app's name. The host
   * and path specify the unique location in the app where your content exists.
   * Example: "exampleapp://productid_1234". Required.
   */
  url?: string;
}

/**
 * Flexible rule that wraps the common rule and a lookback window.
 */
export interface GoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo {
  /**
   * Lookback window for this rule in days. From now until X days ago.
   */
  lookbackWindowDays?: bigint;
  /**
   * List of rule item groups that defines this rule. Rule item groups are
   * grouped together.
   */
  rule?: GoogleAdsSearchads360V23Common__UserListRuleInfo;
}

function serializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(data: any): GoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo {
  return {
    ...data,
    lookbackWindowDays: data["lookbackWindowDays"] !== undefined ? String(data["lookbackWindowDays"]) : undefined,
    rule: data["rule"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserListRuleInfo(data["rule"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(data: any): GoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo {
  return {
    ...data,
    lookbackWindowDays: data["lookbackWindowDays"] !== undefined ? BigInt(data["lookbackWindowDays"]) : undefined,
    rule: data["rule"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserListRuleInfo(data["rule"]) : undefined,
  };
}

/**
 * Flexible rule representation of visitors with one or multiple actions. The
 * flexible user list is defined by two lists of operands – inclusive_operands
 * and exclusive_operands; each operand represents a set of users based on
 * actions they took in a given timeframe. These lists of operands are combined
 * with the AND_NOT operator, so that users represented by the inclusive
 * operands are included in the user list, minus the users represented by the
 * exclusive operands.
 */
export interface GoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo {
  /**
   * Rules representing users that should be excluded from the user list. These
   * are located on the right side of the AND_NOT operator, and joined together
   * by OR.
   */
  exclusiveOperands?: GoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo[];
  /**
   * Rules representing users that should be included in the user list. These
   * are located on the left side of the AND_NOT operator, and joined together
   * by either AND/OR as specified by the inclusive_rule_operator.
   */
  inclusiveOperands?: GoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo[];
  /**
   * Operator that defines how the inclusive operands are combined.
   */
  inclusiveRuleOperator?:  | "UNSPECIFIED" | "UNKNOWN" | "AND" | "OR";
}

function serializeGoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo(data: any): GoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo {
  return {
    ...data,
    exclusiveOperands: data["exclusiveOperands"] !== undefined ? data["exclusiveOperands"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(item))) : undefined,
    inclusiveOperands: data["inclusiveOperands"] !== undefined ? data["inclusiveOperands"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo(data: any): GoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo {
  return {
    ...data,
    exclusiveOperands: data["exclusiveOperands"] !== undefined ? data["exclusiveOperands"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(item))) : undefined,
    inclusiveOperands: data["inclusiveOperands"] !== undefined ? data["inclusiveOperands"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__FlexibleRuleOperandInfo(item))) : undefined,
  };
}

/**
 * A rule specifying the maximum number of times an ad (or some set of ads) can
 * be shown to a user over a particular time period.
 */
export interface GoogleAdsSearchads360V23Common__FrequencyCapEntry {
  /**
   * Maximum number of events allowed during the time range by this cap.
   */
  cap?: number;
  /**
   * The key of a particular frequency cap. There can be no more than one
   * frequency cap with the same key.
   */
  key?: GoogleAdsSearchads360V23Common__FrequencyCapKey;
}

/**
 * A group of fields used as keys for a frequency cap. There can be no more
 * than one frequency cap with the same key.
 */
export interface GoogleAdsSearchads360V23Common__FrequencyCapKey {
  /**
   * The type of event that the cap applies to (for example, impression).
   */
  eventType?:  | "UNSPECIFIED" | "UNKNOWN" | "IMPRESSION" | "VIDEO_VIEW";
  /**
   * The level on which the cap is to be applied (for example, ad group ad, ad
   * group). The cap is applied to all the entities of this level.
   */
  level?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_AD" | "AD_GROUP" | "CAMPAIGN";
  /**
   * Number of time units the cap lasts.
   */
  timeLength?: number;
  /**
   * Unit of time the cap is defined at (for example, day, week).
   */
  timeUnit?:  | "UNSPECIFIED" | "UNKNOWN" | "DAY" | "WEEK" | "MONTH";
}

/**
 * Dimension specifying users by their gender.
 */
export interface GoogleAdsSearchads360V23Common__GenderDimension {
  /**
   * Included gender demographic segments.
   */
  genders?:  | "UNSPECIFIED" | "UNKNOWN" | "MALE" | "FEMALE" | "UNDETERMINED"[];
  /**
   * Include users whose gender is not determined.
   */
  includeUndetermined?: boolean;
}

/**
 * A gender criterion.
 */
export interface GoogleAdsSearchads360V23Common__GenderInfo {
  /**
   * Type of the gender.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "MALE" | "FEMALE" | "UNDETERMINED";
}

/**
 * Geo point for proximity criterion.
 */
export interface GoogleAdsSearchads360V23Common__GeoPointInfo {
  /**
   * Micro degrees for the latitude.
   */
  latitudeInMicroDegrees?: number;
  /**
   * Micro degrees for the longitude.
   */
  longitudeInMicroDegrees?: number;
}

/**
 * Historical metrics options.
 */
export interface GoogleAdsSearchads360V23Common__HistoricalMetricsOptions {
  /**
   * Indicates whether to include average cost per click value. Average CPC is
   * provided only for legacy support.
   */
  includeAverageCpc?: boolean;
  /**
   * The year month range for historical metrics. If not specified, metrics for
   * the past 12 months are returned. Search metrics are available for the past
   * 4 years. If the search volume is not available for the entire
   * year_month_range provided, the subset of the year month range for which
   * search volume is available are returned.
   */
  yearMonthRange?: GoogleAdsSearchads360V23Common__YearMonthRange;
}

function serializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data: any): GoogleAdsSearchads360V23Common__HistoricalMetricsOptions {
  return {
    ...data,
    yearMonthRange: data["yearMonthRange"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YearMonthRange(data["yearMonthRange"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data: any): GoogleAdsSearchads360V23Common__HistoricalMetricsOptions {
  return {
    ...data,
    yearMonthRange: data["yearMonthRange"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YearMonthRange(data["yearMonthRange"]) : undefined,
  };
}

/**
 * A hotel ad.
 */
export interface GoogleAdsSearchads360V23Common__HotelAdInfo {
}

/**
 * Criterion for number of days prior to the stay the booking is being made.
 */
export interface GoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo {
  /**
   * High end of the number of days prior to the stay.
   */
  maxDays?: bigint;
  /**
   * Low end of the number of days prior to the stay.
   */
  minDays?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo(data: any): GoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo {
  return {
    ...data,
    maxDays: data["maxDays"] !== undefined ? String(data["maxDays"]) : undefined,
    minDays: data["minDays"] !== undefined ? String(data["minDays"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo(data: any): GoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo {
  return {
    ...data,
    maxDays: data["maxDays"] !== undefined ? BigInt(data["maxDays"]) : undefined,
    minDays: data["minDays"] !== undefined ? BigInt(data["minDays"]) : undefined,
  };
}

/**
 * An asset representing a hotel callout.
 */
export interface GoogleAdsSearchads360V23Common__HotelCalloutAsset {
  /**
   * Required. The language of the hotel callout. Represented as BCP 47
   * language tag.
   */
  languageCode?: string;
  /**
   * Required. The text of the hotel callout asset. The length of this string
   * should be between 1 and 25, inclusive.
   */
  text?: string;
}

/**
 * Criterion for a check-in date range.
 */
export interface GoogleAdsSearchads360V23Common__HotelCheckInDateRangeInfo {
  /**
   * End date in the YYYY-MM-DD format.
   */
  endDate?: string;
  /**
   * Start date in the YYYY-MM-DD format.
   */
  startDate?: string;
}

/**
 * Criterion for day of the week the booking is for.
 */
export interface GoogleAdsSearchads360V23Common__HotelCheckInDayInfo {
  /**
   * The day of the week.
   */
  dayOfWeek?:  | "UNSPECIFIED" | "UNKNOWN" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY";
}

/**
 * City the hotel is located in.
 */
export interface GoogleAdsSearchads360V23Common__HotelCityInfo {
  /**
   * The Geo Target Constant resource name.
   */
  cityCriterion?: string;
}

/**
 * Class of the hotel as a number of stars 1 to 5.
 */
export interface GoogleAdsSearchads360V23Common__HotelClassInfo {
  /**
   * Long value of the hotel class.
   */
  value?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__HotelClassInfo(data: any): GoogleAdsSearchads360V23Common__HotelClassInfo {
  return {
    ...data,
    value: data["value"] !== undefined ? String(data["value"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__HotelClassInfo(data: any): GoogleAdsSearchads360V23Common__HotelClassInfo {
  return {
    ...data,
    value: data["value"] !== undefined ? BigInt(data["value"]) : undefined,
  };
}

/**
 * Country or Region the hotel is located in.
 */
export interface GoogleAdsSearchads360V23Common__HotelCountryRegionInfo {
  /**
   * The Geo Target Constant resource name.
   */
  countryRegionCriterion?: string;
}

/**
 * Criterion for hotel date selection (default dates versus user selected).
 */
export interface GoogleAdsSearchads360V23Common__HotelDateSelectionTypeInfo {
  /**
   * Type of the hotel date selection
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT_SELECTION" | "USER_SELECTED";
}

/**
 * Advertiser-specific hotel ID.
 */
export interface GoogleAdsSearchads360V23Common__HotelIdInfo {
  /**
   * String value of the hotel ID.
   */
  value?: string;
}

/**
 * Criterion for length of hotel stay in nights.
 */
export interface GoogleAdsSearchads360V23Common__HotelLengthOfStayInfo {
  /**
   * High end of the number of nights in the stay.
   */
  maxNights?: bigint;
  /**
   * Low end of the number of nights in the stay.
   */
  minNights?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__HotelLengthOfStayInfo(data: any): GoogleAdsSearchads360V23Common__HotelLengthOfStayInfo {
  return {
    ...data,
    maxNights: data["maxNights"] !== undefined ? String(data["maxNights"]) : undefined,
    minNights: data["minNights"] !== undefined ? String(data["minNights"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__HotelLengthOfStayInfo(data: any): GoogleAdsSearchads360V23Common__HotelLengthOfStayInfo {
  return {
    ...data,
    maxNights: data["maxNights"] !== undefined ? BigInt(data["maxNights"]) : undefined,
    minNights: data["minNights"] !== undefined ? BigInt(data["minNights"]) : undefined,
  };
}

/**
 * A hotel property asset.
 */
export interface GoogleAdsSearchads360V23Common__HotelPropertyAsset {
  /**
   * Address of the hotel. Read-only.
   */
  hotelAddress?: string;
  /**
   * Name of the hotel. Read-only.
   */
  hotelName?: string;
  /**
   * Place IDs uniquely identify a place in the Google Places database and on
   * Google Maps. See https://developers.google.com/places/web-service/place-id
   * to learn more.
   */
  placeId?: string;
}

/**
 * State the hotel is located in.
 */
export interface GoogleAdsSearchads360V23Common__HotelStateInfo {
  /**
   * The Geo Target Constant resource name.
   */
  stateCriterion?: string;
}

/**
 * Dimension specifying users by their household income.
 */
export interface GoogleAdsSearchads360V23Common__HouseholdIncomeDimension {
  /**
   * Include users whose household income is not determined.
   */
  includeUndetermined?: boolean;
  /**
   * Included household income demographic segments.
   */
  incomeRanges?:  | "UNSPECIFIED" | "UNKNOWN" | "INCOME_RANGE_0_50" | "INCOME_RANGE_50_60" | "INCOME_RANGE_60_70" | "INCOME_RANGE_70_80" | "INCOME_RANGE_80_90" | "INCOME_RANGE_90_UP" | "INCOME_RANGE_UNDETERMINED"[];
}

/**
 * An image ad.
 */
export interface GoogleAdsSearchads360V23Common__ImageAdInfo {
  /**
   * An ad ID to copy the image from.
   */
  adIdToCopyImageFrom?: bigint;
  /**
   * Raw image data as bytes.
   */
  data?: Uint8Array;
  /**
   * The image assets used for the ad.
   */
  imageAsset?: GoogleAdsSearchads360V23Common__AdImageAsset;
  /**
   * URL of the full size image.
   */
  imageUrl?: string;
  /**
   * The mime type of the image.
   */
  mimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "IMAGE_JPEG" | "IMAGE_GIF" | "IMAGE_PNG" | "FLASH" | "TEXT_HTML" | "PDF" | "MSWORD" | "MSEXCEL" | "RTF" | "AUDIO_WAV" | "AUDIO_MP3" | "HTML5_AD_ZIP";
  /**
   * The name of the image. If the image was created from a MediaFile, this is
   * the MediaFile's name. If the image was created from bytes, this is empty.
   */
  name?: string;
  /**
   * Height in pixels of the full size image.
   */
  pixelHeight?: bigint;
  /**
   * Width in pixels of the full size image.
   */
  pixelWidth?: bigint;
  /**
   * URL of the preview size image.
   */
  previewImageUrl?: string;
  /**
   * Height in pixels of the preview size image.
   */
  previewPixelHeight?: bigint;
  /**
   * Width in pixels of the preview size image.
   */
  previewPixelWidth?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ImageAdInfo(data: any): GoogleAdsSearchads360V23Common__ImageAdInfo {
  return {
    ...data,
    adIdToCopyImageFrom: data["adIdToCopyImageFrom"] !== undefined ? String(data["adIdToCopyImageFrom"]) : undefined,
    data: data["data"] !== undefined ? encodeBase64(data["data"]) : undefined,
    pixelHeight: data["pixelHeight"] !== undefined ? String(data["pixelHeight"]) : undefined,
    pixelWidth: data["pixelWidth"] !== undefined ? String(data["pixelWidth"]) : undefined,
    previewPixelHeight: data["previewPixelHeight"] !== undefined ? String(data["previewPixelHeight"]) : undefined,
    previewPixelWidth: data["previewPixelWidth"] !== undefined ? String(data["previewPixelWidth"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ImageAdInfo(data: any): GoogleAdsSearchads360V23Common__ImageAdInfo {
  return {
    ...data,
    adIdToCopyImageFrom: data["adIdToCopyImageFrom"] !== undefined ? BigInt(data["adIdToCopyImageFrom"]) : undefined,
    data: data["data"] !== undefined ? decodeBase64(data["data"] as string) : undefined,
    pixelHeight: data["pixelHeight"] !== undefined ? BigInt(data["pixelHeight"]) : undefined,
    pixelWidth: data["pixelWidth"] !== undefined ? BigInt(data["pixelWidth"]) : undefined,
    previewPixelHeight: data["previewPixelHeight"] !== undefined ? BigInt(data["previewPixelHeight"]) : undefined,
    previewPixelWidth: data["previewPixelWidth"] !== undefined ? BigInt(data["previewPixelWidth"]) : undefined,
  };
}

/**
 * An Image asset.
 */
export interface GoogleAdsSearchads360V23Common__ImageAsset {
  /**
   * The raw bytes data of an image. This field is mutate only.
   */
  data?: Uint8Array;
  /**
   * File size of the image asset in bytes.
   */
  fileSize?: bigint;
  /**
   * Metadata for this image at its original size.
   */
  fullSize?: GoogleAdsSearchads360V23Common__ImageDimension;
  /**
   * MIME type of the image asset.
   */
  mimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "IMAGE_JPEG" | "IMAGE_GIF" | "IMAGE_PNG" | "FLASH" | "TEXT_HTML" | "PDF" | "MSWORD" | "MSEXCEL" | "RTF" | "AUDIO_WAV" | "AUDIO_MP3" | "HTML5_AD_ZIP";
}

function serializeGoogleAdsSearchads360V23Common__ImageAsset(data: any): GoogleAdsSearchads360V23Common__ImageAsset {
  return {
    ...data,
    data: data["data"] !== undefined ? encodeBase64(data["data"]) : undefined,
    fileSize: data["fileSize"] !== undefined ? String(data["fileSize"]) : undefined,
    fullSize: data["fullSize"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ImageDimension(data["fullSize"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ImageAsset(data: any): GoogleAdsSearchads360V23Common__ImageAsset {
  return {
    ...data,
    data: data["data"] !== undefined ? decodeBase64(data["data"] as string) : undefined,
    fileSize: data["fileSize"] !== undefined ? BigInt(data["fileSize"]) : undefined,
    fullSize: data["fullSize"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ImageDimension(data["fullSize"]) : undefined,
  };
}

/**
 * Metadata for an image at a certain size, either original or resized.
 */
export interface GoogleAdsSearchads360V23Common__ImageDimension {
  /**
   * Height of the image.
   */
  heightPixels?: bigint;
  /**
   * A URL that returns the image with this height and width.
   */
  url?: string;
  /**
   * Width of the image.
   */
  widthPixels?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ImageDimension(data: any): GoogleAdsSearchads360V23Common__ImageDimension {
  return {
    ...data,
    heightPixels: data["heightPixels"] !== undefined ? String(data["heightPixels"]) : undefined,
    widthPixels: data["widthPixels"] !== undefined ? String(data["widthPixels"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ImageDimension(data: any): GoogleAdsSearchads360V23Common__ImageDimension {
  return {
    ...data,
    heightPixels: data["heightPixels"] !== undefined ? BigInt(data["heightPixels"]) : undefined,
    widthPixels: data["widthPixels"] !== undefined ? BigInt(data["widthPixels"]) : undefined,
  };
}

/**
 * An income range criterion.
 */
export interface GoogleAdsSearchads360V23Common__IncomeRangeInfo {
  /**
   * Type of the income range.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "INCOME_RANGE_0_50" | "INCOME_RANGE_50_60" | "INCOME_RANGE_60_70" | "INCOME_RANGE_70_80" | "INCOME_RANGE_80_90" | "INCOME_RANGE_90_UP" | "INCOME_RANGE_UNDETERMINED";
}

/**
 * Criterion for Interaction Type.
 */
export interface GoogleAdsSearchads360V23Common__InteractionTypeInfo {
  /**
   * The interaction type.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "CALLS";
}

/**
 * An IpBlock criterion used for excluding IP addresses. We support excluding
 * individual IP addresses or CIDR blocks. Create one IpBlockInfo criterion for
 * each individual IP address or CIDR block you want to exclude. You can exclude
 * up to 500 IP addresses per campaign. For more details, see [Exclude IP
 * addresses](//support.google.com/google-ads/answer/2456098). IPv4 examples: *
 * Individual address: 192.168.0.1 * Individual address as CIDR block:
 * 192.168.0.1/32 * CIDR block: 192.168.0.0/24 IPv6 examples: * Individual
 * address: 2001:db8:a0b:12f0::1 * Individual address as CIDR block:
 * 2001:db8:a0b:12f0::1/128 * CIDR block: 2001:db8::/48
 */
export interface GoogleAdsSearchads360V23Common__IpBlockInfo {
  /**
   * The IP address or the CIDR block to be excluded.
   */
  ipAddress?: string;
}

/**
 * Item attributes of the transaction.
 */
export interface GoogleAdsSearchads360V23Common__ItemAttribute {
  /**
   * Common Locale Data Repository (CLDR) territory code of the country
   * associated with the feed where your items are uploaded. See
   * https://developers.google.com/google-ads/api/reference/data/codes-formats#country-codes
   * for more information. This information is useful to differentiate product
   * information in cases where a product (identified by item_id) is associated
   * with multiple countries.
   */
  countryCode?: string;
  /**
   * A unique identifier of a product. It must be the exact same Merchant
   * Center Item ID you use in your Google Merchant Center for this product.
   * Required.
   */
  itemId?: string;
  /**
   * ISO 639-1 code of the language associated with the feed where your items
   * are uploaded. This information is useful to differentiate product
   * information in cases where a product (identified by item_id) is associated
   * with multiple languages.
   */
  languageCode?: string;
  /**
   * ID of the Merchant Center Account. Required.
   */
  merchantId?: bigint;
  /**
   * The number of items sold. Defaults to 1 if not set.
   */
  quantity?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ItemAttribute(data: any): GoogleAdsSearchads360V23Common__ItemAttribute {
  return {
    ...data,
    merchantId: data["merchantId"] !== undefined ? String(data["merchantId"]) : undefined,
    quantity: data["quantity"] !== undefined ? String(data["quantity"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ItemAttribute(data: any): GoogleAdsSearchads360V23Common__ItemAttribute {
  return {
    ...data,
    merchantId: data["merchantId"] !== undefined ? BigInt(data["merchantId"]) : undefined,
    quantity: data["quantity"] !== undefined ? BigInt(data["quantity"]) : undefined,
  };
}

/**
 * A Keyword criterion segment.
 */
export interface GoogleAdsSearchads360V23Common__Keyword {
  /**
   * The AdGroupCriterion resource name.
   */
  adGroupCriterion?: string;
  /**
   * Keyword info.
   */
  info?: GoogleAdsSearchads360V23Common__KeywordInfo;
}

/**
 * The annotations for the keyword plan keywords.
 */
export interface GoogleAdsSearchads360V23Common__KeywordAnnotations {
  /**
   * The list of concepts for the keyword.
   */
  concepts?: GoogleAdsSearchads360V23Common__KeywordConcept[];
}

/**
 * The concept for the keyword.
 */
export interface GoogleAdsSearchads360V23Common__KeywordConcept {
  /**
   * The concept group of the concept details.
   */
  conceptGroup?: GoogleAdsSearchads360V23Common__ConceptGroup;
  /**
   * The concept name for the keyword in the concept_group.
   */
  name?: string;
}

/**
 * A keyword criterion.
 */
export interface GoogleAdsSearchads360V23Common__KeywordInfo {
  /**
   * The match type of the keyword.
   */
  matchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
  /**
   * The text of the keyword (at most 80 characters and 10 words).
   */
  text?: string;
}

/**
 * The aggregated historical metrics for keyword plan keywords.
 */
export interface GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults {
  /**
   * The aggregate searches for all the keywords segmented by device for the
   * specified time. Supports the following device types: MOBILE, TABLET,
   * DESKTOP. This is only set when KeywordPlanAggregateMetricTypeEnum.DEVICE is
   * set in the KeywordPlanAggregateMetrics field in the request.
   */
  deviceSearches?: GoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches[];
}

function serializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data: any): GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults {
  return {
    ...data,
    deviceSearches: data["deviceSearches"] !== undefined ? data["deviceSearches"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data: any): GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults {
  return {
    ...data,
    deviceSearches: data["deviceSearches"] !== undefined ? data["deviceSearches"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches(item))) : undefined,
  };
}

/**
 * The aggregate metrics specification of the request.
 */
export interface GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetrics {
  /**
   * The list of aggregate metrics to fetch data.
   */
  aggregateMetricTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "DEVICE"[];
}

/**
 * The total searches for the device type during the specified time period.
 */
export interface GoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches {
  /**
   * The device type.
   */
  device?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER";
  /**
   * The total searches for the device.
   */
  searchCount?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches(data: any): GoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches {
  return {
    ...data,
    searchCount: data["searchCount"] !== undefined ? String(data["searchCount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches(data: any): GoogleAdsSearchads360V23Common__KeywordPlanDeviceSearches {
  return {
    ...data,
    searchCount: data["searchCount"] !== undefined ? BigInt(data["searchCount"]) : undefined,
  };
}

/**
 * Historical metrics specific to the targeting options selected. Targeting
 * options include geographies, network, and so on. Refer to
 * https://support.google.com/google-ads/answer/3022575 for more details.
 */
export interface GoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics {
  /**
   * Average Cost Per Click in micros for the keyword.
   */
  averageCpcMicros?: bigint;
  /**
   * Approximate number of monthly searches on this query, averaged for the
   * past 12 months.
   */
  avgMonthlySearches?: bigint;
  /**
   * The competition level for the query.
   */
  competition?:  | "UNSPECIFIED" | "UNKNOWN" | "LOW" | "MEDIUM" | "HIGH";
  /**
   * The competition index for the query in the range [0, 100]. Shows how
   * competitive ad placement is for a keyword. The level of competition from
   * 0-100 is determined by the number of ad slots filled divided by the total
   * number of ad slots available. If not enough data is available, null is
   * returned.
   */
  competitionIndex?: bigint;
  /**
   * Top of page bid high range (80th percentile) in micros for the keyword.
   */
  highTopOfPageBidMicros?: bigint;
  /**
   * Top of page bid low range (20th percentile) in micros for the keyword.
   */
  lowTopOfPageBidMicros?: bigint;
  /**
   * Approximate number of searches on this query for the past twelve months.
   */
  monthlySearchVolumes?: GoogleAdsSearchads360V23Common__MonthlySearchVolume[];
}

function serializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data: any): GoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics {
  return {
    ...data,
    averageCpcMicros: data["averageCpcMicros"] !== undefined ? String(data["averageCpcMicros"]) : undefined,
    avgMonthlySearches: data["avgMonthlySearches"] !== undefined ? String(data["avgMonthlySearches"]) : undefined,
    competitionIndex: data["competitionIndex"] !== undefined ? String(data["competitionIndex"]) : undefined,
    highTopOfPageBidMicros: data["highTopOfPageBidMicros"] !== undefined ? String(data["highTopOfPageBidMicros"]) : undefined,
    lowTopOfPageBidMicros: data["lowTopOfPageBidMicros"] !== undefined ? String(data["lowTopOfPageBidMicros"]) : undefined,
    monthlySearchVolumes: data["monthlySearchVolumes"] !== undefined ? data["monthlySearchVolumes"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__MonthlySearchVolume(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data: any): GoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics {
  return {
    ...data,
    averageCpcMicros: data["averageCpcMicros"] !== undefined ? BigInt(data["averageCpcMicros"]) : undefined,
    avgMonthlySearches: data["avgMonthlySearches"] !== undefined ? BigInt(data["avgMonthlySearches"]) : undefined,
    competitionIndex: data["competitionIndex"] !== undefined ? BigInt(data["competitionIndex"]) : undefined,
    highTopOfPageBidMicros: data["highTopOfPageBidMicros"] !== undefined ? BigInt(data["highTopOfPageBidMicros"]) : undefined,
    lowTopOfPageBidMicros: data["lowTopOfPageBidMicros"] !== undefined ? BigInt(data["lowTopOfPageBidMicros"]) : undefined,
    monthlySearchVolumes: data["monthlySearchVolumes"] !== undefined ? data["monthlySearchVolumes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__MonthlySearchVolume(item))) : undefined,
  };
}

/**
 * A Smart Campaign keyword theme.
 */
export interface GoogleAdsSearchads360V23Common__KeywordThemeInfo {
  /**
   * Free-form text to be matched to a Smart Campaign keyword theme constant on
   * a best-effort basis.
   */
  freeFormKeywordTheme?: string;
  /**
   * The resource name of a Smart Campaign keyword theme constant.
   * `keywordThemeConstants/{keyword_theme_id}~{sub_keyword_theme_id}`
   */
  keywordThemeConstant?: string;
}

/**
 * Metadata associated with a Knowledge Graph Entity attribute.
 */
export interface GoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata {
  /**
   * The capabilities of the entity used in ContentCreatorInsightsService.
   */
  entityCapabilities?:  | "UNSPECIFIED" | "UNKNOWN" | "CONTENT_TRENDING_INSIGHTS" | "CREATOR_ATTRIBUTE"[];
  /**
   * A list of CATEGORY attributes related to this entity.
   */
  relatedCategories?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
}

function serializeGoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata {
  return {
    ...data,
    relatedCategories: data["relatedCategories"] !== undefined ? data["relatedCategories"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__KnowledgeGraphAttributeMetadata {
  return {
    ...data,
    relatedCategories: data["relatedCategories"] !== undefined ? data["relatedCategories"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

/**
 * A language criterion.
 */
export interface GoogleAdsSearchads360V23Common__LanguageInfo {
  /**
   * The language constant resource name.
   */
  languageConstant?: string;
}

/**
 * A Lead Form asset.
 */
export interface GoogleAdsSearchads360V23Common__LeadFormAsset {
  /**
   * Asset resource name of the background image. The image dimensions must be
   * exactly 1200x628.
   */
  backgroundImageAsset?: string;
  /**
   * Required. The name of the business being advertised.
   */
  businessName?: string;
  /**
   * Required. Text giving a clear value proposition of what users expect once
   * they expand the form.
   */
  callToActionDescription?: string;
  /**
   * Required. Pre-defined display text that encourages user to expand the
   * form.
   */
  callToActionType?:  | "UNSPECIFIED" | "UNKNOWN" | "LEARN_MORE" | "GET_QUOTE" | "APPLY_NOW" | "SIGN_UP" | "CONTACT_US" | "SUBSCRIBE" | "DOWNLOAD" | "BOOK_NOW" | "GET_OFFER" | "REGISTER" | "GET_INFO" | "REQUEST_DEMO" | "JOIN_NOW" | "GET_STARTED";
  /**
   * Custom disclosure shown along with Google disclaimer on the lead form.
   * Accessible to allowed customers only.
   */
  customDisclosure?: string;
  /**
   * Ordered list of custom question fields. This field is subject to a limit
   * of 5 qualifying questions per form.
   */
  customQuestionFields?: GoogleAdsSearchads360V23Common__LeadFormCustomQuestionField[];
  /**
   * Configured methods for collected lead data to be delivered to advertiser.
   * Only one method typed as WebhookDelivery can be configured.
   */
  deliveryMethods?: GoogleAdsSearchads360V23Common__LeadFormDeliveryMethod[];
  /**
   * Required. Detailed description of the expanded form to describe what the
   * form is asking for or facilitating.
   */
  description?: string;
  /**
   * Chosen intent for the lead form, for example, more volume or more
   * qualified.
   */
  desiredIntent?:  | "UNSPECIFIED" | "UNKNOWN" | "LOW_INTENT" | "HIGH_INTENT";
  /**
   * Ordered list of input fields. This field can be updated by reordering
   * questions, but not by adding or removing questions.
   */
  fields?: GoogleAdsSearchads360V23Common__LeadFormField[];
  /**
   * Required. Headline of the expanded form to describe what the form is
   * asking for or facilitating.
   */
  headline?: string;
  /**
   * Pre-defined display text that encourages user action after the form is
   * submitted.
   */
  postSubmitCallToActionType?:  | "UNSPECIFIED" | "UNKNOWN" | "VISIT_SITE" | "DOWNLOAD" | "LEARN_MORE" | "SHOP_NOW";
  /**
   * Detailed description shown after form submission that describes how the
   * advertiser will follow up with the user.
   */
  postSubmitDescription?: string;
  /**
   * Headline of text shown after form submission that describes how the
   * advertiser will follow up with the user.
   */
  postSubmitHeadline?: string;
  /**
   * Required. Link to a page describing the policy on how the collected data
   * is handled by the advertiser/business.
   */
  privacyPolicyUrl?: string;
}

function serializeGoogleAdsSearchads360V23Common__LeadFormAsset(data: any): GoogleAdsSearchads360V23Common__LeadFormAsset {
  return {
    ...data,
    deliveryMethods: data["deliveryMethods"] !== undefined ? data["deliveryMethods"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__LeadFormDeliveryMethod(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LeadFormAsset(data: any): GoogleAdsSearchads360V23Common__LeadFormAsset {
  return {
    ...data,
    deliveryMethods: data["deliveryMethods"] !== undefined ? data["deliveryMethods"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__LeadFormDeliveryMethod(item))) : undefined,
  };
}

/**
 * One custom question input field instance within a form.
 */
export interface GoogleAdsSearchads360V23Common__LeadFormCustomQuestionField {
  /**
   * The exact custom question field text (for example, "What kind of vehicle
   * do you have?").
   */
  customQuestionText?: string;
  /**
   * Answer configuration for location question. If true, campaign/account
   * level location data (state, city, business name etc) will be rendered on
   * the Lead Form. Starting V13.1, has_location_answer can only be set for
   * "What is your preferred dealership?" question, for advertisers with
   * Location Assets setup at campaign/account level.
   */
  hasLocationAnswer?: boolean;
  /**
   * Answer configuration for a single choice question. Minimum of 2 answers
   * and maximum of 12 allowed.
   */
  singleChoiceAnswers?: GoogleAdsSearchads360V23Common__LeadFormSingleChoiceAnswers;
}

/**
 * A configuration of how leads are delivered to the advertiser.
 */
export interface GoogleAdsSearchads360V23Common__LeadFormDeliveryMethod {
  /**
   * Webhook method of delivery.
   */
  webhook?: GoogleAdsSearchads360V23Common__WebhookDelivery;
}

function serializeGoogleAdsSearchads360V23Common__LeadFormDeliveryMethod(data: any): GoogleAdsSearchads360V23Common__LeadFormDeliveryMethod {
  return {
    ...data,
    webhook: data["webhook"] !== undefined ? serializeGoogleAdsSearchads360V23Common__WebhookDelivery(data["webhook"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LeadFormDeliveryMethod(data: any): GoogleAdsSearchads360V23Common__LeadFormDeliveryMethod {
  return {
    ...data,
    webhook: data["webhook"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__WebhookDelivery(data["webhook"]) : undefined,
  };
}

/**
 * One input field instance within a form.
 */
export interface GoogleAdsSearchads360V23Common__LeadFormField {
  /**
   * Answer configuration for location question. If true, campaign/account
   * level location data (state, city, business name etc) will be rendered on
   * the Lead Form. Starting V13.1, has_location_answer can only be set for
   * "What is your preferred dealership?" question, for advertisers with
   * Location Assets setup at campaign/account level.
   */
  hasLocationAnswer?: boolean;
  /**
   * Describes the input type, which may be a predefined type such as "full
   * name" or a pre-vetted question like "What kind of vehicle do you have?".
   */
  inputType?:  | "UNSPECIFIED" | "UNKNOWN" | "FULL_NAME" | "EMAIL" | "PHONE_NUMBER" | "POSTAL_CODE" | "STREET_ADDRESS" | "CITY" | "REGION" | "COUNTRY" | "WORK_EMAIL" | "COMPANY_NAME" | "WORK_PHONE" | "JOB_TITLE" | "GOVERNMENT_ISSUED_ID_CPF_BR" | "GOVERNMENT_ISSUED_ID_DNI_AR" | "GOVERNMENT_ISSUED_ID_DNI_PE" | "GOVERNMENT_ISSUED_ID_RUT_CL" | "GOVERNMENT_ISSUED_ID_CC_CO" | "GOVERNMENT_ISSUED_ID_CI_EC" | "GOVERNMENT_ISSUED_ID_RFC_MX" | "FIRST_NAME" | "LAST_NAME" | "VEHICLE_MODEL" | "VEHICLE_TYPE" | "PREFERRED_DEALERSHIP" | "VEHICLE_PURCHASE_TIMELINE" | "VEHICLE_OWNERSHIP" | "VEHICLE_PAYMENT_TYPE" | "VEHICLE_CONDITION" | "COMPANY_SIZE" | "ANNUAL_SALES" | "YEARS_IN_BUSINESS" | "JOB_DEPARTMENT" | "JOB_ROLE" | "OVER_18_AGE" | "OVER_19_AGE" | "OVER_20_AGE" | "OVER_21_AGE" | "OVER_22_AGE" | "OVER_23_AGE" | "OVER_24_AGE" | "OVER_25_AGE" | "OVER_26_AGE" | "OVER_27_AGE" | "OVER_28_AGE" | "OVER_29_AGE" | "OVER_30_AGE" | "OVER_31_AGE" | "OVER_32_AGE" | "OVER_33_AGE" | "OVER_34_AGE" | "OVER_35_AGE" | "OVER_36_AGE" | "OVER_37_AGE" | "OVER_38_AGE" | "OVER_39_AGE" | "OVER_40_AGE" | "OVER_41_AGE" | "OVER_42_AGE" | "OVER_43_AGE" | "OVER_44_AGE" | "OVER_45_AGE" | "OVER_46_AGE" | "OVER_47_AGE" | "OVER_48_AGE" | "OVER_49_AGE" | "OVER_50_AGE" | "OVER_51_AGE" | "OVER_52_AGE" | "OVER_53_AGE" | "OVER_54_AGE" | "OVER_55_AGE" | "OVER_56_AGE" | "OVER_57_AGE" | "OVER_58_AGE" | "OVER_59_AGE" | "OVER_60_AGE" | "OVER_61_AGE" | "OVER_62_AGE" | "OVER_63_AGE" | "OVER_64_AGE" | "OVER_65_AGE" | "EDUCATION_PROGRAM" | "EDUCATION_COURSE" | "PRODUCT" | "SERVICE" | "OFFER" | "CATEGORY" | "PREFERRED_CONTACT_METHOD" | "PREFERRED_LOCATION" | "PREFERRED_CONTACT_TIME" | "PURCHASE_TIMELINE" | "YEARS_OF_EXPERIENCE" | "JOB_INDUSTRY" | "LEVEL_OF_EDUCATION" | "PROPERTY_TYPE" | "REALTOR_HELP_GOAL" | "PROPERTY_COMMUNITY" | "PRICE_RANGE" | "NUMBER_OF_BEDROOMS" | "FURNISHED_PROPERTY" | "PETS_ALLOWED_PROPERTY" | "NEXT_PLANNED_PURCHASE" | "EVENT_SIGNUP_INTEREST" | "PREFERRED_SHOPPING_PLACES" | "FAVORITE_BRAND" | "TRANSPORTATION_COMMERCIAL_LICENSE_TYPE" | "EVENT_BOOKING_INTEREST" | "DESTINATION_COUNTRY" | "DESTINATION_CITY" | "DEPARTURE_COUNTRY" | "DEPARTURE_CITY" | "DEPARTURE_DATE" | "RETURN_DATE" | "NUMBER_OF_TRAVELERS" | "TRAVEL_BUDGET" | "TRAVEL_ACCOMMODATION";
  /**
   * Answer configuration for a single choice question. Can be set only for
   * pre-vetted question fields. Minimum of 2 answers required and maximum of 12
   * allowed.
   */
  singleChoiceAnswers?: GoogleAdsSearchads360V23Common__LeadFormSingleChoiceAnswers;
}

/**
 * Defines possible answers for a single choice question, usually presented as
 * a single-choice drop-down list.
 */
export interface GoogleAdsSearchads360V23Common__LeadFormSingleChoiceAnswers {
  /**
   * List of choices for a single question field. The order of entries defines
   * UI order. Minimum of 2 answers required and maximum of 12 allowed.
   */
  answers?: string[];
}

/**
 * A legacy app install ad that only can be used by a few select customers.
 */
export interface GoogleAdsSearchads360V23Common__LegacyAppInstallAdInfo {
  /**
   * The ID of the mobile app.
   */
  appId?: string;
  /**
   * The app store the mobile app is available in.
   */
  appStore?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLE_APP_STORE" | "GOOGLE_PLAY" | "WINDOWS_STORE" | "WINDOWS_PHONE_STORE" | "CN_APP_STORE";
  /**
   * The first description line of the ad.
   */
  description1?: string;
  /**
   * The second description line of the ad.
   */
  description2?: string;
  /**
   * The headline of the ad.
   */
  headline?: string;
}

/**
 * A legacy responsive display ad. Ads of this type are labeled 'Responsive
 * ads' in the Google Ads UI.
 */
export interface GoogleAdsSearchads360V23Common__LegacyResponsiveDisplayAdInfo {
  /**
   * The accent color of the ad in hexadecimal, for example, #ffffff for white.
   * If one of `main_color` and `accent_color` is set, the other is required as
   * well.
   */
  accentColor?: string;
  /**
   * Advertiser's consent to allow flexible color. When true, the ad may be
   * served with different color if necessary. When false, the ad will be served
   * with the specified colors or a neutral color. The default value is `true`.
   * Must be true if `main_color` and `accent_color` are not set.
   */
  allowFlexibleColor?: boolean;
  /**
   * The business name in the ad.
   */
  businessName?: string;
  /**
   * The call-to-action text for the ad.
   */
  callToActionText?: string;
  /**
   * The description of the ad.
   */
  description?: string;
  /**
   * Specifies which format the ad will be served in. Default is ALL_FORMATS.
   */
  formatSetting?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_FORMATS" | "NON_NATIVE" | "NATIVE";
  /**
   * The MediaFile resource name of the logo image used in the ad.
   */
  logoImage?: string;
  /**
   * The long version of the ad's headline.
   */
  longHeadline?: string;
  /**
   * The main color of the ad in hexadecimal, for example, #ffffff for white.
   * If one of `main_color` and `accent_color` is set, the other is required as
   * well.
   */
  mainColor?: string;
  /**
   * The MediaFile resource name of the marketing image used in the ad.
   */
  marketingImage?: string;
  /**
   * Prefix before price. For example, 'as low as'.
   */
  pricePrefix?: string;
  /**
   * Promotion text used for dynamic formats of responsive ads. For example
   * 'Free two-day shipping'.
   */
  promoText?: string;
  /**
   * The short version of the ad's headline.
   */
  shortHeadline?: string;
  /**
   * The MediaFile resource name of the square logo image used in the ad.
   */
  squareLogoImage?: string;
  /**
   * The MediaFile resource name of the square marketing image used in the ad.
   */
  squareMarketingImage?: string;
}

/**
 * Lifecycle goal value settings.
 */
export interface GoogleAdsSearchads360V23Common__LifecycleGoalValueSettings {
  /**
   * High lifetime value of the lifecycle goal. For example, for customer
   * acquisition goal, high lifetime value is the incremental conversion value
   * for new customers who are of high value. High lifetime value should be
   * greater than value, if set.
   */
  highLifetimeValue?: number;
  /**
   * Value of the lifecycle goal. For example, for customer acquisition goal,
   * value is the incremental conversion value for new customers who are not of
   * high value.
   */
  value?: number;
}

/**
 * Represents a life event criterion.
 */
export interface GoogleAdsSearchads360V23Common__LifeEventInfo {
  /**
   * Taxonomy id of the life event.
   */
  lifeEventId?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__LifeEventInfo(data: any): GoogleAdsSearchads360V23Common__LifeEventInfo {
  return {
    ...data,
    lifeEventId: data["lifeEventId"] !== undefined ? String(data["lifeEventId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LifeEventInfo(data: any): GoogleAdsSearchads360V23Common__LifeEventInfo {
  return {
    ...data,
    lifeEventId: data["lifeEventId"] !== undefined ? BigInt(data["lifeEventId"]) : undefined,
  };
}

/**
 * Live event segment.
 */
export interface GoogleAdsSearchads360V23Common__LifeEventSegment {
  /**
   * The life event resource.
   */
  lifeEvent?: string;
}

/**
 * Metadata associated with a Lineup attribute.
 */
export interface GoogleAdsSearchads360V23Common__LineupAttributeMetadata {
  /**
   * The lower end of a range containing the number of channels in the lineup.
   */
  channelCountLowerBound?: bigint;
  /**
   * The upper end of a range containing the number of channels in the lineup.
   */
  channelCountUpperBound?: bigint;
  /**
   * The national market associated with the lineup.
   */
  inventoryCountry?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * The median number of impressions per month on this lineup.
   */
  medianMonthlyInventory?: bigint;
  /**
   * Examples of channels that are included in the lineup.
   */
  sampleChannels?: GoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel[];
}

function serializeGoogleAdsSearchads360V23Common__LineupAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__LineupAttributeMetadata {
  return {
    ...data,
    channelCountLowerBound: data["channelCountLowerBound"] !== undefined ? String(data["channelCountLowerBound"]) : undefined,
    channelCountUpperBound: data["channelCountUpperBound"] !== undefined ? String(data["channelCountUpperBound"]) : undefined,
    medianMonthlyInventory: data["medianMonthlyInventory"] !== undefined ? String(data["medianMonthlyInventory"]) : undefined,
    sampleChannels: data["sampleChannels"] !== undefined ? data["sampleChannels"].map((item: any) => (serializeGoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LineupAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__LineupAttributeMetadata {
  return {
    ...data,
    channelCountLowerBound: data["channelCountLowerBound"] !== undefined ? BigInt(data["channelCountLowerBound"]) : undefined,
    channelCountUpperBound: data["channelCountUpperBound"] !== undefined ? BigInt(data["channelCountUpperBound"]) : undefined,
    medianMonthlyInventory: data["medianMonthlyInventory"] !== undefined ? BigInt(data["medianMonthlyInventory"]) : undefined,
    sampleChannels: data["sampleChannels"] !== undefined ? data["sampleChannels"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel(item))) : undefined,
  };
}

/**
 * Listing dimensions for listing group criterion.
 */
export interface GoogleAdsSearchads360V23Common__ListingDimensionInfo {
  /**
   * The city where the travel activity is available.
   */
  activityCity?: GoogleAdsSearchads360V23Common__ActivityCityInfo;
  /**
   * The country where the travel activity is available.
   */
  activityCountry?: GoogleAdsSearchads360V23Common__ActivityCountryInfo;
  /**
   * Advertiser-specific activity ID.
   */
  activityId?: GoogleAdsSearchads360V23Common__ActivityIdInfo;
  /**
   * Rating of the activity as a number 1 to 5, where 5 is the best.
   */
  activityRating?: GoogleAdsSearchads360V23Common__ActivityRatingInfo;
  /**
   * The state where the travel activity is available.
   */
  activityState?: GoogleAdsSearchads360V23Common__ActivityStateInfo;
  /**
   * City the hotel is located in.
   */
  hotelCity?: GoogleAdsSearchads360V23Common__HotelCityInfo;
  /**
   * Class of the hotel as a number of stars 1 to 5.
   */
  hotelClass?: GoogleAdsSearchads360V23Common__HotelClassInfo;
  /**
   * Country or Region the hotel is located in.
   */
  hotelCountryRegion?: GoogleAdsSearchads360V23Common__HotelCountryRegionInfo;
  /**
   * Advertiser-specific hotel ID.
   */
  hotelId?: GoogleAdsSearchads360V23Common__HotelIdInfo;
  /**
   * State the hotel is located in.
   */
  hotelState?: GoogleAdsSearchads360V23Common__HotelStateInfo;
  /**
   * Brand of a product offer.
   */
  productBrand?: GoogleAdsSearchads360V23Common__ProductBrandInfo;
  /**
   * Category of a product offer.
   */
  productCategory?: GoogleAdsSearchads360V23Common__ProductCategoryInfo;
  /**
   * Locality of a product offer.
   */
  productChannel?: GoogleAdsSearchads360V23Common__ProductChannelInfo;
  /**
   * Availability of a product offer.
   */
  productChannelExclusivity?: GoogleAdsSearchads360V23Common__ProductChannelExclusivityInfo;
  /**
   * Condition of a product offer.
   */
  productCondition?: GoogleAdsSearchads360V23Common__ProductConditionInfo;
  /**
   * Custom attribute of a product offer.
   */
  productCustomAttribute?: GoogleAdsSearchads360V23Common__ProductCustomAttributeInfo;
  /**
   * Grouping of a product offer. This listing dimension is deprecated and it
   * is supported only in Display campaigns.
   */
  productGrouping?: GoogleAdsSearchads360V23Common__ProductGroupingInfo;
  /**
   * Item id of a product offer.
   */
  productItemId?: GoogleAdsSearchads360V23Common__ProductItemIdInfo;
  /**
   * Labels of a product offer. This listing dimension is deprecated and it is
   * supported only in Display campaigns.
   */
  productLabels?: GoogleAdsSearchads360V23Common__ProductLabelsInfo;
  /**
   * Legacy condition of a product offer. This listing dimension is deprecated
   * and it is supported only in Display campaigns.
   */
  productLegacyCondition?: GoogleAdsSearchads360V23Common__ProductLegacyConditionInfo;
  /**
   * Type of a product offer.
   */
  productType?: GoogleAdsSearchads360V23Common__ProductTypeInfo;
  /**
   * Full type of a product offer. This listing dimension is deprecated and it
   * is supported only in Display campaigns.
   */
  productTypeFull?: GoogleAdsSearchads360V23Common__ProductTypeFullInfo;
  /**
   * Unknown dimension. Set when no other listing dimension is set.
   */
  unknownListingDimension?: GoogleAdsSearchads360V23Common__UnknownListingDimensionInfo;
}

function serializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(data: any): GoogleAdsSearchads360V23Common__ListingDimensionInfo {
  return {
    ...data,
    activityRating: data["activityRating"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ActivityRatingInfo(data["activityRating"]) : undefined,
    hotelClass: data["hotelClass"] !== undefined ? serializeGoogleAdsSearchads360V23Common__HotelClassInfo(data["hotelClass"]) : undefined,
    productCategory: data["productCategory"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ProductCategoryInfo(data["productCategory"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(data: any): GoogleAdsSearchads360V23Common__ListingDimensionInfo {
  return {
    ...data,
    activityRating: data["activityRating"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ActivityRatingInfo(data["activityRating"]) : undefined,
    hotelClass: data["hotelClass"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__HotelClassInfo(data["hotelClass"]) : undefined,
    productCategory: data["productCategory"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ProductCategoryInfo(data["productCategory"]) : undefined,
  };
}

/**
 * The path of dimensions defining a listing group.
 */
export interface GoogleAdsSearchads360V23Common__ListingDimensionPath {
  /**
   * The complete path of dimensions through the listing group hierarchy, from
   * the root (excluding the root itself) to this listing group.
   */
  dimensions?: GoogleAdsSearchads360V23Common__ListingDimensionInfo[];
}

function serializeGoogleAdsSearchads360V23Common__ListingDimensionPath(data: any): GoogleAdsSearchads360V23Common__ListingDimensionPath {
  return {
    ...data,
    dimensions: data["dimensions"] !== undefined ? data["dimensions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ListingDimensionPath(data: any): GoogleAdsSearchads360V23Common__ListingDimensionPath {
  return {
    ...data,
    dimensions: data["dimensions"] !== undefined ? data["dimensions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(item))) : undefined,
  };
}

/**
 * A listing group criterion.
 */
export interface GoogleAdsSearchads360V23Common__ListingGroupInfo {
  /**
   * Dimension value with which this listing group is refining its parent.
   * Undefined for the root group.
   */
  caseValue?: GoogleAdsSearchads360V23Common__ListingDimensionInfo;
  /**
   * Resource name of ad group criterion which is the parent listing group
   * subdivision. Null for the root group.
   */
  parentAdGroupCriterion?: string;
  /**
   * The path of dimensions defining this listing group.
   */
  path?: GoogleAdsSearchads360V23Common__ListingDimensionPath;
  /**
   * Type of the listing group.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "SUBDIVISION" | "UNIT";
}

function serializeGoogleAdsSearchads360V23Common__ListingGroupInfo(data: any): GoogleAdsSearchads360V23Common__ListingGroupInfo {
  return {
    ...data,
    caseValue: data["caseValue"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(data["caseValue"]) : undefined,
    path: data["path"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ListingDimensionPath(data["path"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ListingGroupInfo(data: any): GoogleAdsSearchads360V23Common__ListingGroupInfo {
  return {
    ...data,
    caseValue: data["caseValue"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(data["caseValue"]) : undefined,
    path: data["path"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ListingDimensionPath(data["path"]) : undefined,
  };
}

/**
 * A listing scope criterion.
 */
export interface GoogleAdsSearchads360V23Common__ListingScopeInfo {
  /**
   * Scope of the campaign criterion.
   */
  dimensions?: GoogleAdsSearchads360V23Common__ListingDimensionInfo[];
}

function serializeGoogleAdsSearchads360V23Common__ListingScopeInfo(data: any): GoogleAdsSearchads360V23Common__ListingScopeInfo {
  return {
    ...data,
    dimensions: data["dimensions"] !== undefined ? data["dimensions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ListingScopeInfo(data: any): GoogleAdsSearchads360V23Common__ListingScopeInfo {
  return {
    ...data,
    dimensions: data["dimensions"] !== undefined ? data["dimensions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__ListingDimensionInfo(item))) : undefined,
  };
}

/**
 * A local ad.
 */
export interface GoogleAdsSearchads360V23Common__LocalAdInfo {
  /**
   * List of text assets for call-to-actions. When the ad serves the
   * call-to-actions will be selected from this list. At least 1 and at most 5
   * call-to-actions must be specified.
   */
  callToActions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list. At least 1 and at most 5 descriptions must
   * be specified.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list. At least 1 and at most 5 headlines must be
   * specified.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of logo image assets that may be displayed with the ad. The images
   * must be 128x128 pixels and not larger than 120KB. At least 1 and at most 5
   * image assets must be specified.
   */
  logoImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * List of marketing image assets that may be displayed with the ad. The
   * images must be 314x600 pixels or 320x320 pixels. At least 1 and at most 20
   * image assets must be specified.
   */
  marketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * First part of optional text that can be appended to the URL in the ad.
   */
  path1?: string;
  /**
   * Second part of optional text that can be appended to the URL in the ad.
   * This field can only be set when `path1` is also set.
   */
  path2?: string;
  /**
   * List of YouTube video assets that may be displayed with the ad. At least 1
   * and at most 20 video assets must be specified.
   */
  videos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__LocalAdInfo(data: any): GoogleAdsSearchads360V23Common__LocalAdInfo {
  return {
    ...data,
    callToActions: data["callToActions"] !== undefined ? data["callToActions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LocalAdInfo(data: any): GoogleAdsSearchads360V23Common__LocalAdInfo {
  return {
    ...data,
    callToActions: data["callToActions"] !== undefined ? data["callToActions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * A Local Services Ads service ID. Represents a service type (such as
 * install_faucet) that a Local Services Campaign can target.
 */
export interface GoogleAdsSearchads360V23Common__LocalServiceIdInfo {
  /**
   * The criterion resource name.
   */
  serviceId?: string;
}

/**
 * A Local Services Document with read only accessible data.
 */
export interface GoogleAdsSearchads360V23Common__LocalServicesDocumentReadOnly {
  /**
   * URL to access an already uploaded Local Services document.
   */
  documentUrl?: string;
}

/**
 * A location asset.
 */
export interface GoogleAdsSearchads360V23Common__LocationAsset {
  /**
   * The list of business locations for the customer. This will only be
   * returned if the Location Asset is syncing from the Business Profile
   * account. It is possible to have multiple Business Profile listings under
   * the same account that point to the same Place ID.
   */
  businessProfileLocations?: GoogleAdsSearchads360V23Common__BusinessProfileLocation[];
  /**
   * The type of location ownership. If the type is BUSINESS_OWNER, it will be
   * served as a location extension. If the type is AFFILIATE, it will be served
   * as an affiliate location.
   */
  locationOwnershipType?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_OWNER" | "AFFILIATE";
  /**
   * Place IDs uniquely identify a place in the Google Places database and on
   * Google Maps. This field is unique for a given customer ID and asset type.
   * See https://developers.google.com/places/web-service/place-id to learn more
   * about Place ID.
   */
  placeId?: string;
}

function serializeGoogleAdsSearchads360V23Common__LocationAsset(data: any): GoogleAdsSearchads360V23Common__LocationAsset {
  return {
    ...data,
    businessProfileLocations: data["businessProfileLocations"] !== undefined ? data["businessProfileLocations"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LocationAsset(data: any): GoogleAdsSearchads360V23Common__LocationAsset {
  return {
    ...data,
    businessProfileLocations: data["businessProfileLocations"] !== undefined ? data["businessProfileLocations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(item))) : undefined,
  };
}

/**
 * Metadata associated with a Location attribute.
 */
export interface GoogleAdsSearchads360V23Common__LocationAttributeMetadata {
  /**
   * The country location that this attribute’s sub country location is located
   * in.
   */
  countryLocation?: GoogleAdsSearchads360V23Common__LocationInfo;
}

/**
 * A radius around a list of locations specified through a feed.
 */
export interface GoogleAdsSearchads360V23Common__LocationGroupInfo {
  /**
   * Denotes that the latest customer level asset set is used for targeting.
   * Used with radius and radius_units. Cannot be used with feed, geo target
   * constants or feed item sets. When using asset sets, either this field or
   * location_group_asset_sets should be specified. Both cannot be used at the
   * same time. This can only be set in CREATE operations.
   */
  enableCustomerLevelLocationAssetSet?: boolean;
  /**
   * FeedItemSets whose FeedItems are targeted. If multiple IDs are specified,
   * then all items that appear in at least one set are targeted. This field
   * cannot be used with geo_target_constants. This is optional and can only be
   * set in CREATE operations.
   */
  feedItemSets?: string[];
  /**
   * Geo target constant(s) restricting the scope of the geographic area within
   * the feed. Currently only one geo target constant is allowed.
   */
  geoTargetConstants?: string[];
  /**
   * AssetSets whose Assets are targeted. If multiple IDs are specified, then
   * all items that appear in at least one set are targeted. This field cannot
   * be used with feed, geo target constants or feed item sets. When using asset
   * sets, either this field or enable_customer_level_location_asset_set should
   * be specified. Both cannot be used at the same time. This can only be set in
   * CREATE operations.
   */
  locationGroupAssetSets?: string[];
  /**
   * Distance in units specifying the radius around targeted locations. This is
   * required and must be set in CREATE operations.
   */
  radius?: bigint;
  /**
   * Unit of the radius. Miles and meters are supported for geo target
   * constants. Milli miles and meters are supported for feed item sets. This is
   * required and must be set in CREATE operations.
   */
  radiusUnits?:  | "UNSPECIFIED" | "UNKNOWN" | "METERS" | "MILES" | "MILLI_MILES";
}

function serializeGoogleAdsSearchads360V23Common__LocationGroupInfo(data: any): GoogleAdsSearchads360V23Common__LocationGroupInfo {
  return {
    ...data,
    radius: data["radius"] !== undefined ? String(data["radius"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LocationGroupInfo(data: any): GoogleAdsSearchads360V23Common__LocationGroupInfo {
  return {
    ...data,
    radius: data["radius"] !== undefined ? BigInt(data["radius"]) : undefined,
  };
}

/**
 * A location criterion.
 */
export interface GoogleAdsSearchads360V23Common__LocationInfo {
  /**
   * The geo target constant resource name.
   */
  geoTargetConstant?: string;
}

/**
 * Data related to location set. One of the Google Business Profile (previously
 * known as Google My Business) data, Chain data, and map location data need to
 * be specified.
 */
export interface GoogleAdsSearchads360V23Common__LocationSet {
  /**
   * Data used to configure a location set populated from Google Business
   * Profile locations.
   */
  businessProfileLocationSet?: GoogleAdsSearchads360V23Common__BusinessProfileLocationSet;
  /**
   * Data used to configure a location on chain set populated with the
   * specified chains.
   */
  chainLocationSet?: GoogleAdsSearchads360V23Common__ChainSet;
  /**
   * Required. Immutable. Location Ownership Type (owned location or affiliate
   * location).
   */
  locationOwnershipType?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_OWNER" | "AFFILIATE";
  /**
   * Only set if locations are synced based on selected maps locations
   */
  mapsLocationSet?: GoogleAdsSearchads360V23Common__MapsLocationSet;
}

function serializeGoogleAdsSearchads360V23Common__LocationSet(data: any): GoogleAdsSearchads360V23Common__LocationSet {
  return {
    ...data,
    businessProfileLocationSet: data["businessProfileLocationSet"] !== undefined ? serializeGoogleAdsSearchads360V23Common__BusinessProfileLocationSet(data["businessProfileLocationSet"]) : undefined,
    chainLocationSet: data["chainLocationSet"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ChainSet(data["chainLocationSet"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LocationSet(data: any): GoogleAdsSearchads360V23Common__LocationSet {
  return {
    ...data,
    businessProfileLocationSet: data["businessProfileLocationSet"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocationSet(data["businessProfileLocationSet"]) : undefined,
    chainLocationSet: data["chainLocationSet"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ChainSet(data["chainLocationSet"]) : undefined,
  };
}

/**
 * Represents a user list that is a custom combination of user lists.
 */
export interface GoogleAdsSearchads360V23Common__LogicalUserListInfo {
  /**
   * Logical list rules that define this user list. The rules are defined as a
   * logical operator (ALL/ANY/NONE) and a list of user lists. All the rules are
   * ANDed when they are evaluated. Required for creating a logical user list.
   */
  rules?: GoogleAdsSearchads360V23Common__UserListLogicalRuleInfo[];
}

/**
 * Operand of logical user list that consists of a user list.
 */
export interface GoogleAdsSearchads360V23Common__LogicalUserListOperandInfo {
  /**
   * Resource name of a user list as an operand.
   */
  userList?: string;
}

/**
 * LookalikeUserlist, composed of users similar to those of a configurable seed
 * (set of UserLists)
 */
export interface GoogleAdsSearchads360V23Common__LookalikeUserListInfo {
  /**
   * Countries targeted by the Lookalike. Two-letter country code as defined by
   * ISO-3166
   */
  countryCodes?: string[];
  /**
   * Expansion level, reflecting the size of the lookalike audience
   */
  expansionLevel?:  | "UNSPECIFIED" | "UNKNOWN" | "NARROW" | "BALANCED" | "BROAD";
  /**
   * Seed UserList ID from which this list is derived, provided by user.
   */
  seedUserListIds?: bigint[];
}

function serializeGoogleAdsSearchads360V23Common__LookalikeUserListInfo(data: any): GoogleAdsSearchads360V23Common__LookalikeUserListInfo {
  return {
    ...data,
    seedUserListIds: data["seedUserListIds"] !== undefined ? data["seedUserListIds"].map((item: any) => (String(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__LookalikeUserListInfo(data: any): GoogleAdsSearchads360V23Common__LookalikeUserListInfo {
  return {
    ...data,
    seedUserListIds: data["seedUserListIds"] !== undefined ? data["seedUserListIds"].map((item: any) => (BigInt(item))) : undefined,
  };
}

/**
 * Manual bidding strategy that allows advertiser to set the bid per
 * advertiser-specified action.
 */
export interface GoogleAdsSearchads360V23Common__ManualCpa {
}

/**
 * Manual click-based bidding where user pays per click.
 */
export interface GoogleAdsSearchads360V23Common__ManualCpc {
  /**
   * Whether bids are to be enhanced based on conversion optimizer data.
   */
  enhancedCpcEnabled?: boolean;
}

/**
 * Manual impression-based bidding where user pays per thousand impressions.
 */
export interface GoogleAdsSearchads360V23Common__ManualCpm {
}

/**
 * View based bidding where user pays per video view.
 */
export interface GoogleAdsSearchads360V23Common__ManualCpv {
}

/**
 * Wrapper for place ids
 */
export interface GoogleAdsSearchads360V23Common__MapsLocationInfo {
  /**
   * Place ID of the Maps location.
   */
  placeId?: string;
}

/**
 * Wrapper for multiple maps location sync data
 */
export interface GoogleAdsSearchads360V23Common__MapsLocationSet {
  /**
   * Required. A list of maps location info that user manually synced in.
   */
  mapsLocations?: GoogleAdsSearchads360V23Common__MapsLocationInfo[];
}

/**
 * An automated bidding strategy to help get the most conversions for your
 * campaigns while spending your budget.
 */
export interface GoogleAdsSearchads360V23Common__MaximizeConversions {
  /**
   * Maximum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. Mutable for portfolio bidding
   * strategies only.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Minimum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. Mutable for portfolio bidding
   * strategies only.
   */
  cpcBidFloorMicros?: bigint;
  /**
   * The target cost-per-action (CPA) option. This is the average amount that
   * you would like to spend per conversion action specified in micro units of
   * the bidding strategy's currency. If set, the bid strategy will get as many
   * conversions as possible at or below the target cost-per-action. If the
   * target CPA is not set, the bid strategy will aim to achieve the lowest
   * possible CPA given the budget.
   */
  targetCpaMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__MaximizeConversions(data: any): GoogleAdsSearchads360V23Common__MaximizeConversions {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? String(data["cpcBidFloorMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__MaximizeConversions(data: any): GoogleAdsSearchads360V23Common__MaximizeConversions {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? BigInt(data["cpcBidFloorMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
  };
}

/**
 * An automated bidding strategy to help get the most conversion value for your
 * campaigns while spending your budget.
 */
export interface GoogleAdsSearchads360V23Common__MaximizeConversionValue {
  /**
   * Maximum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. Mutable for portfolio bidding
   * strategies only.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Minimum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. Mutable for portfolio bidding
   * strategies only.
   */
  cpcBidFloorMicros?: bigint;
  /**
   * The target return on ad spend (ROAS) option. If set, the bid strategy will
   * maximize revenue while averaging the target return on ad spend. If the
   * target ROAS is high, the bid strategy may not be able to spend the full
   * budget. If the target ROAS is not set, the bid strategy will aim to achieve
   * the highest possible ROAS for the budget.
   */
  targetRoas?: number;
  /**
   * The percent of ROAS(return on advertising spend) degradation tolerance
   * allowed to increase traffic diversity and conversion volume, specified in
   * millis (for example, 10,000 = 10%). A value of 10,000 means that the
   * advertiser can expect ROAS degradation of up to 10% of the specified target
   * ROAS.
   */
  targetRoasTolerancePercentMillis?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data: any): GoogleAdsSearchads360V23Common__MaximizeConversionValue {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? String(data["cpcBidFloorMicros"]) : undefined,
    targetRoasTolerancePercentMillis: data["targetRoasTolerancePercentMillis"] !== undefined ? String(data["targetRoasTolerancePercentMillis"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data: any): GoogleAdsSearchads360V23Common__MaximizeConversionValue {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? BigInt(data["cpcBidFloorMicros"]) : undefined,
    targetRoasTolerancePercentMillis: data["targetRoasTolerancePercentMillis"] !== undefined ? BigInt(data["targetRoasTolerancePercentMillis"]) : undefined,
  };
}

/**
 * A MediaBundle asset.
 */
export interface GoogleAdsSearchads360V23Common__MediaBundleAsset {
  /**
   * Media bundle (ZIP file) asset data. The format of the uploaded ZIP file
   * depends on the ad field where it will be used. For more information on the
   * format, see the documentation of the ad field where you plan on using the
   * MediaBundleAsset. This field is mutate only.
   */
  data?: Uint8Array;
}

function serializeGoogleAdsSearchads360V23Common__MediaBundleAsset(data: any): GoogleAdsSearchads360V23Common__MediaBundleAsset {
  return {
    ...data,
    data: data["data"] !== undefined ? encodeBase64(data["data"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__MediaBundleAsset(data: any): GoogleAdsSearchads360V23Common__MediaBundleAsset {
  return {
    ...data,
    data: data["data"] !== undefined ? decodeBase64(data["data"] as string) : undefined,
  };
}

/**
 * A metric goal for an experiment.
 */
export interface GoogleAdsSearchads360V23Common__MetricGoal {
  /**
   * The metric direction of the goal. For example, increase, decrease, no
   * change.
   */
  direction?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_CHANGE" | "INCREASE" | "DECREASE" | "NO_CHANGE_OR_INCREASE" | "NO_CHANGE_OR_DECREASE";
  /**
   * The metric of the goal. For example, clicks, impressions, cost,
   * conversions, etc.
   */
  metric?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICKS" | "IMPRESSIONS" | "COST" | "CONVERSIONS_PER_INTERACTION_RATE" | "COST_PER_CONVERSION" | "CONVERSIONS_VALUE_PER_COST" | "AVERAGE_CPC" | "CTR" | "INCREMENTAL_CONVERSIONS" | "COMPLETED_VIDEO_VIEWS" | "CUSTOM_ALGORITHMS" | "CONVERSIONS" | "CONVERSION_VALUE";
}

/**
 * Metrics data.
 */
export interface GoogleAdsSearchads360V23Common__Metrics {
  /**
   * Search absolute top impression share is the percentage of your Search ad
   * impressions that are shown in the most prominent Search position.
   */
  absoluteTopImpressionPercentage?: number;
  /**
   * The total number of conversions. This includes all conversions regardless
   * of the value of include_in_conversions_metric.
   */
  allConversions?: number;
  /**
   * The total number of conversions. This includes all conversions regardless
   * of the value of include_in_conversions_metric. When this column is selected
   * with date, the values in date column means the conversion date. Details for
   * the by_conversion_date columns are available at
   * https://support.google.com/sa360/answer/9250611.
   */
  allConversionsByConversionDate?: number;
  /**
   * The number of times people clicked the "Call" button to call a business
   * during or after clicking an ad. This number doesn't include whether or not
   * calls were connected, or the duration of any calls. This metric applies to
   * feed items only.
   */
  allConversionsFromClickToCall?: number;
  /**
   * The number of times people clicked a "Get directions" button to navigate
   * to a business after clicking an ad. This metric applies to feed items only.
   */
  allConversionsFromDirections?: number;
  /**
   * All conversions from interactions (as oppose to view through conversions)
   * divided by the number of ad interactions.
   */
  allConversionsFromInteractionsRate?: number;
  /**
   * The value of all conversions from interactions divided by the total number
   * of interactions.
   */
  allConversionsFromInteractionsValuePerInteraction?: number;
  /**
   * The number of times people clicked a link to view a business's menu after
   * clicking an ad. This metric applies to feed items only.
   */
  allConversionsFromMenu?: number;
  /**
   * The number of times people placed an order at a business after clicking an
   * ad. This metric applies to feed items only.
   */
  allConversionsFromOrder?: number;
  /**
   * The number of other conversions (for example, posting a review or saving a
   * location for a business) that occurred after people clicked an ad. This
   * metric applies to feed items only.
   */
  allConversionsFromOtherEngagement?: number;
  /**
   * Estimated number of times people visited a business after clicking an ad.
   * This metric applies to feed items only.
   */
  allConversionsFromStoreVisit?: number;
  /**
   * The number of times that people were taken to a business's URL after
   * clicking an ad. This metric applies to feed items only.
   */
  allConversionsFromStoreWebsite?: number;
  /**
   * The value of all conversions.
   */
  allConversionsValue?: number;
  /**
   * The value of all conversions. When this column is selected with date, the
   * values in date column means the conversion date. Details for the
   * by_conversion_date columns are available at
   * https://support.google.com/sa360/answer/9250611.
   */
  allConversionsValueByConversionDate?: number;
  /**
   * The value of all conversions divided by the total cost of ad interactions
   * (such as clicks for text ads or views for video ads).
   */
  allConversionsValuePerCost?: number;
  /**
   * Average cart size is the average number of products in each order
   * attributed to your ads. How it works: You report conversions with cart data
   * for completed purchases on your website. Average cart size is the total
   * number of products sold divided by the total number of orders you received.
   * Example: You received 2 orders, the first included 3 products and the
   * second included 2. The average cart size is 2.5 products = (3+2)/2. This
   * metric is only available if you report conversions with cart data.
   */
  averageCartSize?: number;
  /**
   * The average amount you pay per interaction. This amount is the total cost
   * of your ads divided by the total number of interactions.
   */
  averageCost?: number;
  /**
   * The total cost of all clicks divided by the total number of clicks
   * received. This metric is a monetary value and returned in the customer's
   * currency by default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  averageCpc?: number;
  /**
   * Average cost-per-thousand impressions (CPM). This metric is a monetary
   * value and returned in the customer's currency by default. See the
   * metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  averageCpm?: number;
  /**
   * The average number of times a unique user saw your ad during the requested
   * time period. This metric cannot be aggregated, and can only be requested
   * for date ranges of 92 days or less. This metric is available for following
   * campaign types - Display, Video, Discovery and App.
   */
  averageImpressionFrequencyPerUser?: number;
  /**
   * Average order value is the average revenue you made per order attributed
   * to your ads. How it works: You report conversions with cart data for
   * completed purchases on your website. Average order value is the total
   * revenue from your orders divided by the total number of orders. Example:
   * You received 3 orders which made $10, $15 and $20 worth of revenue. The
   * average order value is $15 = ($10 + $15 + $20)/3. This metric is only
   * available if you report conversions with cart data.
   */
  averageOrderValueMicros?: bigint;
  /**
   * The average quality score.
   */
  averageQualityScore?: number;
  /**
   * The number of clicks.
   */
  clicks?: bigint;
  /**
   * The number of client account conversions. This only includes conversion
   * actions which include_in_client_account_conversions_metric attribute is set
   * to true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   */
  clientAccountConversions?: number;
  /**
   * The value of client account conversions. This only includes conversion
   * actions which include_in_client_account_conversions_metric attribute is set
   * to true. If you use conversion-based bidding, your bid strategies will
   * optimize for these conversions.
   */
  clientAccountConversionsValue?: number;
  /**
   * Client account cross-sell cost of goods sold (COGS) is the total cost of
   * products sold as a result of advertising a different product. How it works:
   * You report conversions with cart data for completed purchases on your
   * website. If the ad that was interacted with before the purchase has an
   * associated product (see Shopping Ads) then this product is considered the
   * advertised product. Any product included in the order the customer places
   * is a sold product. If these products don't match then this is considered
   * cross-sell. Cross-sell cost of goods sold is the total cost of the products
   * sold that weren't advertised. Example: Someone clicked on a Shopping ad for
   * a hat then bought the same hat and a shirt. The hat has a cost of goods
   * sold value of $3, the shirt has a cost of goods sold value of $5. The
   * cross-sell cost of goods sold for this order is $5. This metric is only
   * available if you report conversions with cart data. This metric is a
   * monetary value and returned in the customer's currency by default. See the
   * metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountCrossSellCostOfGoodsSoldMicros?: bigint;
  /**
   * Client account cross-sell gross profit is the profit you made from
   * products sold as a result of advertising a different product, minus cost of
   * goods sold (COGS). How it works: You report conversions with cart data for
   * completed purchases on your website. If the ad that was interacted with
   * before the purchase has an associated product (see Shopping Ads) then this
   * product is considered the advertised product. Any product included in the
   * purchase is a sold product. If these products don't match then this is
   * considered cross-sell. Cross-sell gross profit is the revenue you made from
   * cross-sell attributed to your ads minus the cost of the goods sold.
   * Example: Someone clicked on a Shopping ad for a hat then bought the same
   * hat and a shirt. The shirt is priced $20 and has a cost of goods sold value
   * of $5. The cross-sell gross profit of this order is $15 = $20 - $5. This
   * metric is only available if you report conversions with cart data. This
   * metric is a monetary value and returned in the customer's currency by
   * default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountCrossSellGrossProfitMicros?: bigint;
  /**
   * Client account cross-sell revenue is the total amount you made from
   * products sold as a result of advertising a different product. How it works:
   * You report conversions with cart data for completed purchases on your
   * website. If the ad that was interacted with before the purchase has an
   * associated product (see Shopping Ads) then this product is considered the
   * advertised product. Any product included in the order the customer places
   * is a sold product. If these products don't match then this is considered
   * cross-sell. Cross-sell revenue is the total value you made from cross-sell
   * attributed to your ads. Example: Someone clicked on a Shopping ad for a hat
   * then bought the same hat and a shirt. The hat is priced $10 and the shirt
   * is priced $20. The cross-sell revenue of this order is $20. This metric is
   * only available if you report conversions with cart data. This metric is a
   * monetary value and returned in the customer's currency by default. See the
   * metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountCrossSellRevenueMicros?: bigint;
  /**
   * Client account cross-sell units sold is the total number of products sold
   * as a result of advertising a different product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with before the purchase has an associated product
   * (see Shopping Ads) then this product is considered the advertised product.
   * Any product included in the order the customer places is a sold product. If
   * these products don't match then this is considered cross-sell. Cross-sell
   * units sold is the total number of cross-sold products from all orders
   * attributed to your ads. Example: Someone clicked on a Shopping ad for a hat
   * then bought the same hat, a shirt and a jacket. The cross-sell units sold
   * in this order is 2. This metric is only available if you report conversions
   * with cart data.
   */
  clientAccountCrossSellUnitsSold?: number;
  /**
   * Client account lead cost of goods sold (COGS) is the total cost of
   * products sold as a result of advertising the same product. How it works:
   * You report conversions with cart data for completed purchases on your
   * website. If the ad that was interacted with has an associated product (see
   * Shopping Ads) then this product is considered the advertised product. Any
   * product included in the order the customer places is a sold product. If the
   * advertised and sold products match, then the cost of these goods is counted
   * under lead cost of goods sold. Example: Someone clicked on a Shopping ad
   * for a hat then bought the same hat and a shirt. The hat has a cost of goods
   * sold value of $3, the shirt has a cost of goods sold value of $5. The lead
   * cost of goods sold for this order is $3. This metric is only available if
   * you report conversions with cart data. This metric is a monetary value and
   * returned in the customer's currency by default. See the metrics_currency
   * parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountLeadCostOfGoodsSoldMicros?: bigint;
  /**
   * Client account lead gross profit is the profit you made from products sold
   * as a result of advertising the same product, minus cost of goods sold
   * (COGS). How it works: You report conversions with cart data for completed
   * purchases on your website. If the ad that was interacted with before the
   * purchase has an associated product (see Shopping Ads) then this product is
   * considered the advertised product. Any product included in the order the
   * customer places is a sold product. If the advertised and sold products
   * match, then the revenue you made from these sales minus the cost of goods
   * sold is your lead gross profit. Example: Someone clicked on a Shopping ad
   * for a hat then bought the same hat and a shirt. The hat is priced $10 and
   * has a cost of goods sold value of $3. The lead gross profit of this order
   * is $7 = $10 - $3. This metric is only available if you report conversions
   * with cart data. This metric is a monetary value and returned in the
   * customer's currency by default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountLeadGrossProfitMicros?: bigint;
  /**
   * Client account lead revenue is the total amount you made from products
   * sold as a result of advertising the same product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with before the purchase has an associated product
   * (see Shopping Ads) then this product is considered the advertised product.
   * Any product included in the order the customer places is a sold product. If
   * the advertised and sold products match, then the total value you made from
   * the sales of these products is shown under lead revenue. Example: Someone
   * clicked on a Shopping ad for a hat then bought the same hat and a shirt.
   * The hat is priced $10 and the shirt is priced $20. The lead revenue of this
   * order is $10. This metric is only available if you report conversions with
   * cart data. This metric is a monetary value and returned in the customer's
   * currency by default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  clientAccountLeadRevenueMicros?: bigint;
  /**
   * Client account lead units sold is the total number of products sold as a
   * result of advertising the same product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with before the purchase has an associated product
   * (see Shopping Ads) then this product is considered the advertised product.
   * Any product included in the order the customer places is a sold product. If
   * the advertised and sold products match, then the total number of these
   * products sold is shown under lead units sold. Example: Someone clicked on a
   * Shopping ad for a hat then bought the same hat, a shirt and a jacket. The
   * lead units sold in this order is 1. This metric is only available if you
   * report conversions with cart data.
   */
  clientAccountLeadUnitsSold?: number;
  /**
   * The total number of view-through conversions. These happen when a customer
   * sees an image or rich media ad, then later completes a conversion on your
   * site without interacting with (for example, clicking on) another ad.
   */
  clientAccountViewThroughConversions?: bigint;
  /**
   * The estimated percent of times that your ad was eligible to show on the
   * Display Network but didn't because your budget was too low. Note: Content
   * budget lost impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   */
  contentBudgetLostImpressionShare?: number;
  /**
   * The impressions you've received on the Display Network divided by the
   * estimated number of impressions you were eligible to receive. Note: Content
   * impression share is reported in the range of 0.1 to 1. Any value below 0.1
   * is reported as 0.0999.
   */
  contentImpressionShare?: number;
  /**
   * The estimated percentage of impressions on the Display Network that your
   * ads didn't receive due to poor Ad Rank. Note: Content rank lost impression
   * share is reported in the range of 0 to 0.9. Any value above 0.9 is reported
   * as 0.9001.
   */
  contentRankLostImpressionShare?: number;
  /**
   * The conversion custom metrics.
   */
  conversionCustomMetrics?: GoogleAdsSearchads360V23Common__Value[];
  /**
   * The number of conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   */
  conversions?: number;
  /**
   * The sum of conversions by conversion date for biddable conversion types.
   * Can be fractional due to attribution modeling. When this column is selected
   * with date, the values in date column means the conversion date.
   */
  conversionsByConversionDate?: number;
  /**
   * Average biddable conversions (from interaction) per conversion eligible
   * interaction. Shows how often, on average, an ad interaction leads to a
   * biddable conversion.
   */
  conversionsFromInteractionsRate?: number;
  /**
   * The value of conversions from interactions divided by the number of ad
   * interactions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   */
  conversionsFromInteractionsValuePerInteraction?: number;
  /**
   * The sum of conversion values for the conversions included in the
   * "conversions" field. This metric is useful only if you entered a value for
   * your conversion actions.
   */
  conversionsValue?: number;
  /**
   * The sum of biddable conversions value by conversion date. When this column
   * is selected with date, the values in date column means the conversion date.
   */
  conversionsValueByConversionDate?: number;
  /**
   * The value of biddable conversion divided by the total cost of conversion
   * eligible interactions.
   */
  conversionsValuePerCost?: number;
  /**
   * The sum of your cost-per-click (CPC) and cost-per-thousand impressions
   * (CPM) costs during this period. This metric is a monetary value and
   * returned in the customer's currency by default. See the metrics_currency
   * parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  costMicros?: bigint;
  /**
   * Cost of goods sold (COGS) is the total cost of the products you sold in
   * orders attributed to your ads. How it works: You can add a cost of goods
   * sold value to every product in Merchant Center. If you report conversions
   * with cart data, the products you sold are matched with their cost of goods
   * sold value and this can be used to calculate the gross profit you made on
   * each order. Example: Someone clicked on a Shopping ad for a hat then bought
   * the same hat and a shirt. The hat has a cost of goods sold value of $3, the
   * shirt has a cost of goods sold value of $5. The cost of goods sold for this
   * order is $8 = $3 + $5. This metric is only available if you report
   * conversions with cart data.
   */
  costOfGoodsSoldMicros?: bigint;
  /**
   * The cost of ad interactions divided by all conversions.
   */
  costPerAllConversions?: number;
  /**
   * Average conversion eligible cost per biddable conversion.
   */
  costPerConversion?: number;
  /**
   * The cost of ad interactions divided by current model attributed
   * conversions. This only includes conversion actions which
   * include_in_conversions_metric attribute is set to true. If you use
   * conversion-based bidding, your bid strategies will optimize for these
   * conversions.
   */
  costPerCurrentModelAttributedConversion?: number;
  /**
   * Conversions from when a customer clicks on an ad on one device, then
   * converts on a different device or browser. Cross-device conversions are
   * already included in all_conversions.
   */
  crossDeviceConversions?: number;
  /**
   * The number of cross-device conversions by conversion date. Details for the
   * by_conversion_date columns are available at
   * https://support.google.com/sa360/answer/9250611.
   */
  crossDeviceConversionsByConversionDate?: number;
  /**
   * The sum of the value of cross-device conversions.
   */
  crossDeviceConversionsValue?: number;
  /**
   * The sum of cross-device conversions value by conversion date. Details for
   * the by_conversion_date columns are available at
   * https://support.google.com/sa360/answer/9250611.
   */
  crossDeviceConversionsValueByConversionDate?: number;
  /**
   * Cross-sell cost of goods sold (COGS) is the total cost of products sold as
   * a result of advertising a different product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with before the purchase has an associated product
   * (see Shopping Ads) then this product is considered the advertised product.
   * Any product included in the order the customer places is a sold product. If
   * these products don't match then this is considered cross-sell. Cross-sell
   * cost of goods sold is the total cost of the products sold that weren't
   * advertised. Example: Someone clicked on a Shopping ad for a hat then bought
   * the same hat and a shirt. The hat has a cost of goods sold value of $3, the
   * shirt has a cost of goods sold value of $5. The cross-sell cost of goods
   * sold for this order is $5. This metric is only available if you report
   * conversions with cart data. This metric is a monetary value and returned in
   * the customer's currency by default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  crossSellCostOfGoodsSoldMicros?: bigint;
  /**
   * Cross-sell gross profit is the profit you made from products sold as a
   * result of advertising a different product, minus cost of goods sold (COGS).
   * How it works: You report conversions with cart data for completed purchases
   * on your website. If the ad that was interacted with before the purchase has
   * an associated product (see Shopping Ads) then this product is considered
   * the advertised product. Any product included in the purchase is a sold
   * product. If these products don't match then this is considered cross-sell.
   * Cross-sell gross profit is the revenue you made from cross-sell attributed
   * to your ads minus the cost of the goods sold. Example: Someone clicked on a
   * Shopping ad for a hat then bought the same hat and a shirt. The shirt is
   * priced $20 and has a cost of goods sold value of $5. The cross-sell gross
   * profit of this order is $15 = $20 - $5. This metric is only available if
   * you report conversions with cart data. This metric is a monetary value and
   * returned in the customer's currency by default. See the metrics_currency
   * parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  crossSellGrossProfitMicros?: bigint;
  /**
   * Cross-sell revenue is the total amount you made from products sold as a
   * result of advertising a different product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with before the purchase has an associated product
   * (see Shopping Ads) then this product is considered the advertised product.
   * Any product included in the order the customer places is a sold product. If
   * these products don't match then this is considered cross-sell. Cross-sell
   * revenue is the total value you made from cross-sell attributed to your ads.
   * Example: Someone clicked on a Shopping ad for a hat then bought the same
   * hat and a shirt. The hat is priced $10 and the shirt is priced $20. The
   * cross-sell revenue of this order is $20. This metric is only available if
   * you report conversions with cart data. This metric is a monetary value and
   * returned in the customer's currency by default. See the metrics_currency
   * parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  crossSellRevenueMicros?: bigint;
  /**
   * Cross-sell units sold is the total number of products sold as a result of
   * advertising a different product. How it works: You report conversions with
   * cart data for completed purchases on your website. If the ad that was
   * interacted with before the purchase has an associated product (see Shopping
   * Ads) then this product is considered the advertised product. Any product
   * included in the order the customer places is a sold product. If these
   * products don't match then this is considered cross-sell. Cross-sell units
   * sold is the total number of cross-sold products from all orders attributed
   * to your ads. Example: Someone clicked on a Shopping ad for a hat then
   * bought the same hat, a shirt and a jacket. The cross-sell units sold in
   * this order is 2. This metric is only available if you report conversions
   * with cart data.
   */
  crossSellUnitsSold?: number;
  /**
   * The number of clicks your ad receives (Clicks) divided by the number of
   * times your ad is shown (Impressions).
   */
  ctr?: number;
  /**
   * The percentage of clicks that have been filtered out of your total number
   * of clicks (filtered + non-filtered clicks) due to being general invalid
   * clicks. These are clicks Google considers illegitimate that are detected
   * through routine means of filtration (that is, known invalid data-center
   * traffic, bots and spiders or other crawlers, irregular patterns, etc).
   * You're not charged for them, and they don't affect your account statistics.
   * See the help page at
   * https://support.google.com/campaignmanager/answer/6076504 for details.
   */
  generalInvalidClickRate?: number;
  /**
   * Number of general invalid clicks. These are a subset of your invalid
   * clicks that are detected through routine means of filtration (such as known
   * invalid data-center traffic, bots and spiders or other crawlers, irregular
   * patterns, etc.). You're not charged for them, and they don't affect your
   * account statistics. See the help page at
   * https://support.google.com/campaignmanager/answer/6076504 for details.
   */
  generalInvalidClicks?: bigint;
  /**
   * Gross profit margin is the percentage gross profit you made from orders
   * attributed to your ads, after taking out the cost of goods sold (COGS). How
   * it works: You report conversions with cart data for completed purchases on
   * your website. Gross profit margin is the gross profit you made divided by
   * your total revenue and multiplied by 100%. Gross profit margin calculations
   * only include products that have a cost of goods sold value in Merchant
   * Center. Example: Someone bought a hat and a shirt in an order on your
   * website. The hat is priced $10 and has a cost of goods sold value of $3.
   * The shirt is priced $20 but has no cost of goods sold value. Gross profit
   * margin for this order will only take into account the hat because it has a
   * cost of goods sold value, so it's 70% = ($10 - $3)/$10 x 100%. This metric
   * is only available if you report conversions with cart data.
   */
  grossProfitMargin?: number;
  /**
   * Gross profit is the profit you made from orders attributed to your ads
   * minus the cost of goods sold (COGS). How it works: Gross profit is the
   * revenue you made from sales attributed to your ads minus cost of goods
   * sold. Gross profit calculations only include products that have a cost of
   * goods sold value in Merchant Center. Example: Someone clicked on a Shopping
   * ad for a hat then bought the same hat and a shirt in an order from your
   * website. The hat is priced $10 and the shirt is priced $20. The hat has a
   * cost of goods sold value of $3, but the shirt has no cost of goods sold
   * value. Gross profit for this order will only take into account the hat, so
   * it's $7 = $10 - $3. This metric is only available if you report conversions
   * with cart data.
   */
  grossProfitMicros?: bigint;
  /**
   * The creative historical quality score.
   */
  historicalCreativeQualityScore?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
  /**
   * The quality of historical landing page experience.
   */
  historicalLandingPageQualityScore?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
  /**
   * The historical quality score.
   */
  historicalQualityScore?: bigint;
  /**
   * The historical search predicted click through rate (CTR).
   */
  historicalSearchPredictedCtr?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
  /**
   * Count of how often your ad has appeared on a search results page or
   * website on the Google Network.
   */
  impressions?: bigint;
  /**
   * The types of payable and free interactions.
   */
  interactionEventTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICK" | "ENGAGEMENT" | "VIDEO_VIEW" | "NONE"[];
  /**
   * How often people interact with your ad after it is shown to them. This is
   * the number of interactions divided by the number of times your ad is shown.
   */
  interactionRate?: number;
  /**
   * The number of interactions. An interaction is the main user action
   * associated with an ad format-clicks for text and shopping ads, views for
   * video ads, and so on.
   */
  interactions?: bigint;
  /**
   * The percentage of clicks filtered out of your total number of clicks
   * (filtered + non-filtered clicks) during the reporting period.
   */
  invalidClickRate?: number;
  /**
   * Number of clicks Google considers illegitimate and doesn't charge you for.
   */
  invalidClicks?: bigint;
  /**
   * Lead cost of goods sold (COGS) is the total cost of products sold as a
   * result of advertising the same product. How it works: You report
   * conversions with cart data for completed purchases on your website. If the
   * ad that was interacted with has an associated product (see Shopping Ads)
   * then this product is considered the advertised product. Any product
   * included in the order the customer places is a sold product. If the
   * advertised and sold products match, then the cost of these goods is counted
   * under lead cost of goods sold. Example: Someone clicked on a Shopping ad
   * for a hat then bought the same hat and a shirt. The hat has a cost of goods
   * sold value of $3, the shirt has a cost of goods sold value of $5. The lead
   * cost of goods sold for this order is $3. This metric is only available if
   * you report conversions with cart data. This metric is a monetary value and
   * returned in the customer's currency by default. See the metrics_currency
   * parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  leadCostOfGoodsSoldMicros?: bigint;
  /**
   * Lead gross profit is the profit you made from products sold as a result of
   * advertising the same product, minus cost of goods sold (COGS). How it
   * works: You report conversions with cart data for completed purchases on
   * your website. If the ad that was interacted with before the purchase has an
   * associated product (see Shopping Ads) then this product is considered the
   * advertised product. Any product included in the order the customer places
   * is a sold product. If the advertised and sold products match, then the
   * revenue you made from these sales minus the cost of goods sold is your lead
   * gross profit. Example: Someone clicked on a Shopping ad for a hat then
   * bought the same hat and a shirt. The hat is priced $10 and has a cost of
   * goods sold value of $3. The lead gross profit of this order is $7 = $10 -
   * $3. This metric is only available if you report conversions with cart data.
   * This metric is a monetary value and returned in the customer's currency by
   * default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  leadGrossProfitMicros?: bigint;
  /**
   * Lead revenue is the total amount you made from products sold as a result
   * of advertising the same product. How it works: You report conversions with
   * cart data for completed purchases on your website. If the ad that was
   * interacted with before the purchase has an associated product (see Shopping
   * Ads) then this product is considered the advertised product. Any product
   * included in the order the customer places is a sold product. If the
   * advertised and sold products match, then the total value you made from the
   * sales of these products is shown under lead revenue. Example: Someone
   * clicked on a Shopping ad for a hat then bought the same hat and a shirt.
   * The hat is priced $10 and the shirt is priced $20. The lead revenue of this
   * order is $10. This metric is only available if you report conversions with
   * cart data. This metric is a monetary value and returned in the customer's
   * currency by default. See the metrics_currency parameter at
   * https://developers.google.com/search-ads/reporting/query/query-structure#parameters_clause
   */
  leadRevenueMicros?: bigint;
  /**
   * Lead units sold is the total number of products sold as a result of
   * advertising the same product. How it works: You report conversions with
   * cart data for completed purchases on your website. If the ad that was
   * interacted with before the purchase has an associated product (see Shopping
   * Ads) then this product is considered the advertised product. Any product
   * included in the order the customer places is a sold product. If the
   * advertised and sold products match, then the total number of these products
   * sold is shown under lead units sold. Example: Someone clicked on a Shopping
   * ad for a hat then bought the same hat, a shirt and a jacket. The lead units
   * sold in this order is 1. This metric is only available if you report
   * conversions with cart data.
   */
  leadUnitsSold?: number;
  /**
   * The percentage of mobile clicks that go to a mobile-friendly page.
   */
  mobileFriendlyClicksPercentage?: number;
  /**
   * Orders is the total number of purchase conversions you received attributed
   * to your ads. How it works: You report conversions with cart data for
   * completed purchases on your website. If a conversion is attributed to
   * previous interactions with your ads (clicks for text or Shopping ads, views
   * for video ads etc.) it's counted as an order. Example: Someone clicked on a
   * Shopping ad for a hat then bought the same hat and a shirt in an order on
   * your website. Even though they bought 2 products, this would count as 1
   * order. This metric is only available if you report conversions with cart
   * data.
   */
  orders?: number;
  /**
   * The raw event conversion metrics.
   */
  rawEventConversionMetrics?: GoogleAdsSearchads360V23Common__Value[];
  /**
   * Revenue is the total amount you made from orders attributed to your ads.
   * How it works: You report conversions with cart data for completed purchases
   * on your website. Revenue is the total value of all the orders you received
   * attributed to your ads, minus any discount. Example: Someone clicked on a
   * Shopping ad for a hat then bought the same hat and a shirt in an order from
   * your website. The hat is priced $10 and the shirt is priced $20. The entire
   * order has a $5 discount. The revenue from this order is $25 = ($10 + $20) -
   * $5. This metric is only available if you report conversions with cart data.
   */
  revenueMicros?: bigint;
  /**
   * The percentage of the customer's Shopping or Search ad impressions that
   * are shown in the most prominent Shopping position. See
   * https://support.google.com/sa360/answer/9566729 for details. Any value
   * below 0.1 is reported as 0.0999.
   */
  searchAbsoluteTopImpressionShare?: number;
  /**
   * The number estimating how often your ad wasn't the very first ad among the
   * top ads in the search results due to a low budget. Note: Search budget lost
   * absolute top impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   */
  searchBudgetLostAbsoluteTopImpressionShare?: number;
  /**
   * The estimated percent of times that your ad was eligible to show on the
   * Search Network but didn't because your budget was too low. Note: Search
   * budget lost impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   */
  searchBudgetLostImpressionShare?: number;
  /**
   * The number estimating how often your ad didn't show adjacent to the top
   * organic search results due to a low budget. Note: Search budget lost top
   * impression share is reported in the range of 0 to 0.9. Any value above 0.9
   * is reported as 0.9001.
   */
  searchBudgetLostTopImpressionShare?: number;
  /**
   * The number of clicks you've received on the Search Network divided by the
   * estimated number of clicks you were eligible to receive. Note: Search click
   * share is reported in the range of 0.1 to 1. Any value below 0.1 is reported
   * as 0.0999.
   */
  searchClickShare?: number;
  /**
   * The impressions you've received divided by the estimated number of
   * impressions you were eligible to receive on the Search Network for search
   * terms that matched your keywords exactly (or were close variants of your
   * keyword), regardless of your keyword match types. Note: Search exact match
   * impression share is reported in the range of 0.1 to 1. Any value below 0.1
   * is reported as 0.0999.
   */
  searchExactMatchImpressionShare?: number;
  /**
   * The impressions you've received on the Search Network divided by the
   * estimated number of impressions you were eligible to receive. Note: Search
   * impression share is reported in the range of 0.1 to 1. Any value below 0.1
   * is reported as 0.0999.
   */
  searchImpressionShare?: number;
  /**
   * The number estimating how often your ad wasn't the very first ad among the
   * top ads in the search results due to poor Ad Rank. Note: Search rank lost
   * absolute top impression share is reported in the range of 0 to 0.9. Any
   * value above 0.9 is reported as 0.9001.
   */
  searchRankLostAbsoluteTopImpressionShare?: number;
  /**
   * The estimated percentage of impressions on the Search Network that your
   * ads didn't receive due to poor Ad Rank. Note: Search rank lost impression
   * share is reported in the range of 0 to 0.9. Any value above 0.9 is reported
   * as 0.9001.
   */
  searchRankLostImpressionShare?: number;
  /**
   * The number estimating how often your ad didn't show adjacent to the top
   * organic search results due to poor Ad Rank. Note: Search rank lost top
   * impression share is reported in the range of 0 to 0.9. Any value above 0.9
   * is reported as 0.9001.
   */
  searchRankLostTopImpressionShare?: number;
  /**
   * The impressions you've received among the top ads compared to the
   * estimated number of impressions you were eligible to receive among the top
   * ads. Note: Search top impression share is reported in the range of 0.1 to
   * 1. Any value below 0.1 is reported as 0.0999. Top ads are generally above
   * the top organic results, although they may show below the top organic
   * results on certain queries.
   */
  searchTopImpressionShare?: number;
  /**
   * The percent of your ad impressions that are shown adjacent to the top
   * organic search results.
   */
  topImpressionPercentage?: number;
  /**
   * The number of unique users who saw your ad during the requested time
   * period. This metric cannot be aggregated, and can only be requested for
   * date ranges of 92 days or less. This metric is available for following
   * campaign types - Display, Video, Discovery and App.
   */
  uniqueUsers?: bigint;
  /**
   * Units sold is the total number of products sold from orders attributed to
   * your ads. How it works: You report conversions with cart data for completed
   * purchases on your website. Units sold is the total number of products sold
   * from all orders attributed to your ads. Example: Someone clicked on a
   * Shopping ad for a hat then bought the same hat, a shirt and a jacket. The
   * units sold in this order is 3. This metric is only available if you report
   * conversions with cart data.
   */
  unitsSold?: number;
  /**
   * The value of all conversions divided by the number of all conversions.
   */
  valuePerAllConversions?: number;
  /**
   * The value of all conversions divided by the number of all conversions.
   * When this column is selected with date, the values in date column means the
   * conversion date. Details for the by_conversion_date columns are available
   * at https://support.google.com/sa360/answer/9250611.
   */
  valuePerAllConversionsByConversionDate?: number;
  /**
   * The value of biddable conversion divided by the number of biddable
   * conversions. Shows how much, on average, each of the biddable conversions
   * is worth.
   */
  valuePerConversion?: number;
  /**
   * Biddable conversions value by conversion date divided by biddable
   * conversions by conversion date. Shows how much, on average, each of the
   * biddable conversions is worth (by conversion date). When this column is
   * selected with date, the values in date column means the conversion date.
   */
  valuePerConversionsByConversionDate?: number;
  /**
   * Clicks that Search Ads 360 has successfully recorded and forwarded to an
   * advertiser's landing page.
   */
  visits?: number;
}

function serializeGoogleAdsSearchads360V23Common__Metrics(data: any): GoogleAdsSearchads360V23Common__Metrics {
  return {
    ...data,
    averageOrderValueMicros: data["averageOrderValueMicros"] !== undefined ? String(data["averageOrderValueMicros"]) : undefined,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    clientAccountCrossSellCostOfGoodsSoldMicros: data["clientAccountCrossSellCostOfGoodsSoldMicros"] !== undefined ? String(data["clientAccountCrossSellCostOfGoodsSoldMicros"]) : undefined,
    clientAccountCrossSellGrossProfitMicros: data["clientAccountCrossSellGrossProfitMicros"] !== undefined ? String(data["clientAccountCrossSellGrossProfitMicros"]) : undefined,
    clientAccountCrossSellRevenueMicros: data["clientAccountCrossSellRevenueMicros"] !== undefined ? String(data["clientAccountCrossSellRevenueMicros"]) : undefined,
    clientAccountLeadCostOfGoodsSoldMicros: data["clientAccountLeadCostOfGoodsSoldMicros"] !== undefined ? String(data["clientAccountLeadCostOfGoodsSoldMicros"]) : undefined,
    clientAccountLeadGrossProfitMicros: data["clientAccountLeadGrossProfitMicros"] !== undefined ? String(data["clientAccountLeadGrossProfitMicros"]) : undefined,
    clientAccountLeadRevenueMicros: data["clientAccountLeadRevenueMicros"] !== undefined ? String(data["clientAccountLeadRevenueMicros"]) : undefined,
    clientAccountViewThroughConversions: data["clientAccountViewThroughConversions"] !== undefined ? String(data["clientAccountViewThroughConversions"]) : undefined,
    conversionCustomMetrics: data["conversionCustomMetrics"] !== undefined ? data["conversionCustomMetrics"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    costOfGoodsSoldMicros: data["costOfGoodsSoldMicros"] !== undefined ? String(data["costOfGoodsSoldMicros"]) : undefined,
    crossSellCostOfGoodsSoldMicros: data["crossSellCostOfGoodsSoldMicros"] !== undefined ? String(data["crossSellCostOfGoodsSoldMicros"]) : undefined,
    crossSellGrossProfitMicros: data["crossSellGrossProfitMicros"] !== undefined ? String(data["crossSellGrossProfitMicros"]) : undefined,
    crossSellRevenueMicros: data["crossSellRevenueMicros"] !== undefined ? String(data["crossSellRevenueMicros"]) : undefined,
    generalInvalidClicks: data["generalInvalidClicks"] !== undefined ? String(data["generalInvalidClicks"]) : undefined,
    grossProfitMicros: data["grossProfitMicros"] !== undefined ? String(data["grossProfitMicros"]) : undefined,
    historicalQualityScore: data["historicalQualityScore"] !== undefined ? String(data["historicalQualityScore"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? String(data["interactions"]) : undefined,
    invalidClicks: data["invalidClicks"] !== undefined ? String(data["invalidClicks"]) : undefined,
    leadCostOfGoodsSoldMicros: data["leadCostOfGoodsSoldMicros"] !== undefined ? String(data["leadCostOfGoodsSoldMicros"]) : undefined,
    leadGrossProfitMicros: data["leadGrossProfitMicros"] !== undefined ? String(data["leadGrossProfitMicros"]) : undefined,
    leadRevenueMicros: data["leadRevenueMicros"] !== undefined ? String(data["leadRevenueMicros"]) : undefined,
    rawEventConversionMetrics: data["rawEventConversionMetrics"] !== undefined ? data["rawEventConversionMetrics"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    revenueMicros: data["revenueMicros"] !== undefined ? String(data["revenueMicros"]) : undefined,
    uniqueUsers: data["uniqueUsers"] !== undefined ? String(data["uniqueUsers"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__Metrics(data: any): GoogleAdsSearchads360V23Common__Metrics {
  return {
    ...data,
    averageOrderValueMicros: data["averageOrderValueMicros"] !== undefined ? BigInt(data["averageOrderValueMicros"]) : undefined,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    clientAccountCrossSellCostOfGoodsSoldMicros: data["clientAccountCrossSellCostOfGoodsSoldMicros"] !== undefined ? BigInt(data["clientAccountCrossSellCostOfGoodsSoldMicros"]) : undefined,
    clientAccountCrossSellGrossProfitMicros: data["clientAccountCrossSellGrossProfitMicros"] !== undefined ? BigInt(data["clientAccountCrossSellGrossProfitMicros"]) : undefined,
    clientAccountCrossSellRevenueMicros: data["clientAccountCrossSellRevenueMicros"] !== undefined ? BigInt(data["clientAccountCrossSellRevenueMicros"]) : undefined,
    clientAccountLeadCostOfGoodsSoldMicros: data["clientAccountLeadCostOfGoodsSoldMicros"] !== undefined ? BigInt(data["clientAccountLeadCostOfGoodsSoldMicros"]) : undefined,
    clientAccountLeadGrossProfitMicros: data["clientAccountLeadGrossProfitMicros"] !== undefined ? BigInt(data["clientAccountLeadGrossProfitMicros"]) : undefined,
    clientAccountLeadRevenueMicros: data["clientAccountLeadRevenueMicros"] !== undefined ? BigInt(data["clientAccountLeadRevenueMicros"]) : undefined,
    clientAccountViewThroughConversions: data["clientAccountViewThroughConversions"] !== undefined ? BigInt(data["clientAccountViewThroughConversions"]) : undefined,
    conversionCustomMetrics: data["conversionCustomMetrics"] !== undefined ? data["conversionCustomMetrics"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    costOfGoodsSoldMicros: data["costOfGoodsSoldMicros"] !== undefined ? BigInt(data["costOfGoodsSoldMicros"]) : undefined,
    crossSellCostOfGoodsSoldMicros: data["crossSellCostOfGoodsSoldMicros"] !== undefined ? BigInt(data["crossSellCostOfGoodsSoldMicros"]) : undefined,
    crossSellGrossProfitMicros: data["crossSellGrossProfitMicros"] !== undefined ? BigInt(data["crossSellGrossProfitMicros"]) : undefined,
    crossSellRevenueMicros: data["crossSellRevenueMicros"] !== undefined ? BigInt(data["crossSellRevenueMicros"]) : undefined,
    generalInvalidClicks: data["generalInvalidClicks"] !== undefined ? BigInt(data["generalInvalidClicks"]) : undefined,
    grossProfitMicros: data["grossProfitMicros"] !== undefined ? BigInt(data["grossProfitMicros"]) : undefined,
    historicalQualityScore: data["historicalQualityScore"] !== undefined ? BigInt(data["historicalQualityScore"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? BigInt(data["interactions"]) : undefined,
    invalidClicks: data["invalidClicks"] !== undefined ? BigInt(data["invalidClicks"]) : undefined,
    leadCostOfGoodsSoldMicros: data["leadCostOfGoodsSoldMicros"] !== undefined ? BigInt(data["leadCostOfGoodsSoldMicros"]) : undefined,
    leadGrossProfitMicros: data["leadGrossProfitMicros"] !== undefined ? BigInt(data["leadGrossProfitMicros"]) : undefined,
    leadRevenueMicros: data["leadRevenueMicros"] !== undefined ? BigInt(data["leadRevenueMicros"]) : undefined,
    rawEventConversionMetrics: data["rawEventConversionMetrics"] !== undefined ? data["rawEventConversionMetrics"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    revenueMicros: data["revenueMicros"] !== undefined ? BigInt(data["revenueMicros"]) : undefined,
    uniqueUsers: data["uniqueUsers"] !== undefined ? BigInt(data["uniqueUsers"]) : undefined,
  };
}

/**
 * An asset representing a mobile app.
 */
export interface GoogleAdsSearchads360V23Common__MobileAppAsset {
  /**
   * Required. A string that uniquely identifies a mobile application. It
   * should just contain the platform native id, like "com.android.ebay" for
   * Android or "12345689" for iOS.
   */
  appId?: string;
  /**
   * Required. The application store that distributes this specific app.
   */
  appStore?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLE_APP_STORE" | "GOOGLE_APP_STORE";
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * Required. The visible text displayed when the link is rendered in an ad.
   * The length of this string should be between 1 and 25, inclusive.
   */
  linkText?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
}

/**
 * A mobile app category criterion.
 */
export interface GoogleAdsSearchads360V23Common__MobileAppCategoryInfo {
  /**
   * The mobile app category constant resource name.
   */
  mobileAppCategoryConstant?: string;
}

/**
 * A mobile application criterion.
 */
export interface GoogleAdsSearchads360V23Common__MobileApplicationInfo {
  /**
   * A string that uniquely identifies a mobile application to Google Ads API.
   * The format of this string is "{platform}-{platform_native_id}", where
   * platform is "1" for iOS apps and "2" for Android apps, and where
   * platform_native_id is the mobile application identifier native to the
   * corresponding platform. For iOS, this native identifier is the 9 digit
   * string that appears at the end of an App Store URL (for example,
   * "476943146" for "Flood-It! 2" whose App Store link is
   * "http://itunes.apple.com/us/app/flood-it!-2/id476943146"). For Android,
   * this native identifier is the application's package name (for example,
   * "com.labpixies.colordrips" for "Color Drips" given Google Play link
   * "https://play.google.com/store/apps/details?id=com.labpixies.colordrips").
   * A well formed app id for Google Ads API would thus be "1-476943146" for iOS
   * and "2-com.labpixies.colordrips" for Android. This field is required and
   * must be set in CREATE operations.
   */
  appId?: string;
  /**
   * Name of this mobile application.
   */
  name?: string;
}

/**
 * A mobile device criterion.
 */
export interface GoogleAdsSearchads360V23Common__MobileDeviceInfo {
  /**
   * The mobile device constant resource name.
   */
  mobileDeviceConstant?: string;
}

/**
 * Represents a price in a particular currency.
 */
export interface GoogleAdsSearchads360V23Common__Money {
  /**
   * Amount in micros. One million is equivalent to one unit.
   */
  amountMicros?: bigint;
  /**
   * Three-character ISO 4217 currency code.
   */
  currencyCode?: string;
}

function serializeGoogleAdsSearchads360V23Common__Money(data: any): GoogleAdsSearchads360V23Common__Money {
  return {
    ...data,
    amountMicros: data["amountMicros"] !== undefined ? String(data["amountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__Money(data: any): GoogleAdsSearchads360V23Common__Money {
  return {
    ...data,
    amountMicros: data["amountMicros"] !== undefined ? BigInt(data["amountMicros"]) : undefined,
  };
}

/**
 * Monthly search volume.
 */
export interface GoogleAdsSearchads360V23Common__MonthlySearchVolume {
  /**
   * The month of the search volume.
   */
  month?:  | "UNSPECIFIED" | "UNKNOWN" | "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER";
  /**
   * Approximate number of searches for the month. A null value indicates the
   * search volume is unavailable for that month.
   */
  monthlySearches?: bigint;
  /**
   * The year of the search volume (for example, 2020).
   */
  year?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__MonthlySearchVolume(data: any): GoogleAdsSearchads360V23Common__MonthlySearchVolume {
  return {
    ...data,
    monthlySearches: data["monthlySearches"] !== undefined ? String(data["monthlySearches"]) : undefined,
    year: data["year"] !== undefined ? String(data["year"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__MonthlySearchVolume(data: any): GoogleAdsSearchads360V23Common__MonthlySearchVolume {
  return {
    ...data,
    monthlySearches: data["monthlySearches"] !== undefined ? BigInt(data["monthlySearches"]) : undefined,
    year: data["year"] !== undefined ? BigInt(data["year"]) : undefined,
  };
}

/**
 * A Negative Keyword List criterion. Represents a shared set of negative
 * keywords that can be excluded at the account-level. Only one negative keyword
 * list criterion can be attached per account.
 */
export interface GoogleAdsSearchads360V23Common__NegativeKeywordListInfo {
  /**
   * The NegativeKeywordListInfo shared set resource name.
   */
  sharedSet?: string;
}

/**
 * Address identifier of offline data.
 */
export interface GoogleAdsSearchads360V23Common__OfflineUserAddressInfo {
  /**
   * City of the address. Only accepted for Store Sales.
   */
  city?: string;
  /**
   * 2-letter country code in ISO-3166-1 alpha-2 of the user's address.
   */
  countryCode?: string;
  /**
   * First name of the user, which is hashed as SHA-256 after normalized
   * (Lowercase all characters; Remove any extra spaces before, after, and in
   * between).
   */
  hashedFirstName?: string;
  /**
   * Last name of the user, which is hashed as SHA-256 after normalized (lower
   * case only and no punctuation).
   */
  hashedLastName?: string;
  /**
   * The street address of the user hashed using SHA-256 hash function after
   * normalization (lower case only). Only accepted for
   * ConversionAdjustmentUploadService.
   */
  hashedStreetAddress?: string;
  /**
   * Postal code of the user's address.
   */
  postalCode?: string;
  /**
   * State code of the address. Only accepted for Store Sales.
   */
  state?: string;
}

/**
 * Represents an operating system version to be targeted.
 */
export interface GoogleAdsSearchads360V23Common__OperatingSystemVersionInfo {
  /**
   * The operating system version constant resource name.
   */
  operatingSystemVersionConstant?: string;
}

/**
 * A Page Feed asset.
 */
export interface GoogleAdsSearchads360V23Common__PageFeedAsset {
  /**
   * Labels used to group the page urls.
   */
  labels?: string[];
  /**
   * Required. The webpage that advertisers want to target.
   */
  pageUrl?: string;
}

/**
 * Dimension specifying users by their parental status.
 */
export interface GoogleAdsSearchads360V23Common__ParentalStatusDimension {
  /**
   * Include users whose parental status is undetermined.
   */
  includeUndetermined?: boolean;
  /**
   * Included parental status demographic segments.
   */
  parentalStatuses?:  | "UNSPECIFIED" | "UNKNOWN" | "PARENT" | "NOT_A_PARENT" | "UNDETERMINED"[];
}

/**
 * A parental status criterion.
 */
export interface GoogleAdsSearchads360V23Common__ParentalStatusInfo {
  /**
   * Type of the parental status.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "PARENT" | "NOT_A_PARENT" | "UNDETERMINED";
}

/**
 * A bidding strategy where bids are a fraction of the advertised price for
 * some good or service.
 */
export interface GoogleAdsSearchads360V23Common__PercentCpc {
  /**
   * Maximum bid limit that can be set by the bid strategy. This is an optional
   * field entered by the advertiser and specified in local micros. Note: A zero
   * value is interpreted in the same way as having bid_ceiling undefined.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Adjusts the bid for each auction upward or downward, depending on the
   * likelihood of a conversion. Individual bids may exceed
   * cpc_bid_ceiling_micros, but the average bid amount for a campaign should
   * not.
   */
  enhancedCpcEnabled?: boolean;
}

function serializeGoogleAdsSearchads360V23Common__PercentCpc(data: any): GoogleAdsSearchads360V23Common__PercentCpc {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PercentCpc(data: any): GoogleAdsSearchads360V23Common__PercentCpc {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
  };
}

/**
 * Projected metrics for a specific percent CPC amount. Only Hotel advertising
 * channel type supports this field.
 */
export interface GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint {
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions in local currency.
   */
  biddableConversionsValue?: number;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * The simulated percent CPC upon which projected metrics are based. Percent
   * CPC expressed as fraction of the advertised price for some good or service.
   * The value stored here is 1,000,000 * [fraction].
   */
  percentCpcBidMicros?: bigint;
  /**
   * Projected number of top slot impressions.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? String(data["percentCpcBidMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint(data: any): GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? BigInt(data["percentCpcBidMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type PERCENT_CPC_BID.
 */
export interface GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList {
  /**
   * Projected metrics for a series of percent CPC bid amounts.
   */
  points?: GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList(data: any): GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PercentCpcBidSimulationPoint(item))) : undefined,
  };
}

/**
 * A placement criterion. This can be used to modify bids for sites when
 * targeting the content network.
 */
export interface GoogleAdsSearchads360V23Common__PlacementInfo {
  /**
   * URL of the placement. For example, "http://www.domain.com".
   */
  url?: string;
}

/**
 * A Placement List criterion. Represents a shared set of placements that can
 * be excluded at the account-level.
 */
export interface GoogleAdsSearchads360V23Common__PlacementListInfo {
  /**
   * The PlacementListInfo shared set resource name.
   */
  sharedSet?: string;
}

/**
 * Contains policy summary information.
 */
export interface GoogleAdsSearchads360V23Common__PolicySummary {
  /**
   * The overall approval status, which is calculated based on the status of
   * its individual policy topic entries.
   */
  approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "DISAPPROVED" | "APPROVED_LIMITED" | "APPROVED" | "AREA_OF_INTEREST_ONLY";
  /**
   * The list of policy findings.
   */
  policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
  /**
   * Where in the review process the resource is.
   */
  reviewStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REVIEW_IN_PROGRESS" | "REVIEWED" | "UNDER_APPEAL" | "ELIGIBLE_MAY_SERVE";
}

function serializeGoogleAdsSearchads360V23Common__PolicySummary(data: any): GoogleAdsSearchads360V23Common__PolicySummary {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PolicySummary(data: any): GoogleAdsSearchads360V23Common__PolicySummary {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

/**
 * Describes the effect on serving that a policy topic entry will have.
 */
export interface GoogleAdsSearchads360V23Common__PolicyTopicConstraint {
  /**
   * Countries where the resource's domain is not covered by the certificates
   * associated with it.
   */
  certificateDomainMismatchInCountryList?: GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraintList;
  /**
   * Countries where a certificate is required for serving.
   */
  certificateMissingInCountryList?: GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraintList;
  /**
   * Countries where the resource cannot serve.
   */
  countryConstraintList?: GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraintList;
  /**
   * Reseller constraint.
   */
  resellerConstraint?: GoogleAdsSearchads360V23Common_PolicyTopicConstraint_ResellerConstraint;
}

/**
 * Policy finding attached to a resource (for example, alcohol policy
 * associated with a site that sells alcohol). Each PolicyTopicEntry has a topic
 * that indicates the specific ads policy the entry is about and a type to
 * indicate the effect that the entry will have on serving. It may optionally
 * have one or more evidences that indicate the reason for the finding. It may
 * also optionally have one or more constraints that provide details about how
 * serving may be restricted.
 */
export interface GoogleAdsSearchads360V23Common__PolicyTopicEntry {
  /**
   * Indicates how serving of this resource may be affected (for example, not
   * serving in a country).
   */
  constraints?: GoogleAdsSearchads360V23Common__PolicyTopicConstraint[];
  /**
   * Additional information that explains policy finding (for example, the
   * brand name for a trademark finding).
   */
  evidences?: GoogleAdsSearchads360V23Common__PolicyTopicEvidence[];
  /**
   * Policy topic this finding refers to. For example, "ALCOHOL",
   * "TRADEMARKS_IN_AD_TEXT", or "DESTINATION_NOT_WORKING". The set of possible
   * policy topics is not fixed for a particular API version and may change at
   * any time.
   */
  topic?: string;
  /**
   * Describes the negative or positive effect this policy will have on
   * serving.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "PROHIBITED" | "LIMITED" | "FULLY_LIMITED" | "DESCRIPTIVE" | "BROADENING" | "AREA_OF_INTEREST_ONLY";
}

function serializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(data: any): GoogleAdsSearchads360V23Common__PolicyTopicEntry {
  return {
    ...data,
    evidences: data["evidences"] !== undefined ? data["evidences"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PolicyTopicEvidence(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(data: any): GoogleAdsSearchads360V23Common__PolicyTopicEntry {
  return {
    ...data,
    evidences: data["evidences"] !== undefined ? data["evidences"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PolicyTopicEvidence(item))) : undefined,
  };
}

/**
 * Additional information that explains a policy finding.
 */
export interface GoogleAdsSearchads360V23Common__PolicyTopicEvidence {
  /**
   * Mismatch between the destinations of a resource's URLs.
   */
  destinationMismatch?: GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationMismatch;
  /**
   * Details when the destination is returning an HTTP error code or isn't
   * functional in all locations for commonly used devices.
   */
  destinationNotWorking?: GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking;
  /**
   * The text in the destination of the resource that is causing a policy
   * finding.
   */
  destinationTextList?: GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationTextList;
  /**
   * The language the resource was detected to be written in. This is an IETF
   * language tag such as "en-US".
   */
  languageCode?: string;
  /**
   * List of evidence found in the text of a resource.
   */
  textList?: GoogleAdsSearchads360V23Common_PolicyTopicEvidence_TextList;
  /**
   * List of websites linked with this resource.
   */
  websiteList?: GoogleAdsSearchads360V23Common_PolicyTopicEvidence_WebsiteList;
}

function serializeGoogleAdsSearchads360V23Common__PolicyTopicEvidence(data: any): GoogleAdsSearchads360V23Common__PolicyTopicEvidence {
  return {
    ...data,
    destinationNotWorking: data["destinationNotWorking"] !== undefined ? serializeGoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking(data["destinationNotWorking"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PolicyTopicEvidence(data: any): GoogleAdsSearchads360V23Common__PolicyTopicEvidence {
  return {
    ...data,
    destinationNotWorking: data["destinationNotWorking"] !== undefined ? deserializeGoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking(data["destinationNotWorking"]) : undefined,
  };
}

/**
 * Parameter for controlling how policy exemption is done.
 */
export interface GoogleAdsSearchads360V23Common__PolicyValidationParameter {
  /**
   * The list of policy violation keys that should not cause a
   * `PolicyViolationError` to be reported. Not all policy violations are
   * exemptable. Refer to the `is_exemptible` field in the returned
   * `PolicyViolationError`. This field is used for keyword policy exemptions.
   * If this field is populated, then `ignorable_policy_topics` must be empty.
   * Resources that violate these policies will be saved, but will not be
   * eligible to serve. They may begin serving at a later time due to a change
   * in policies, re-review of the resource, or a change in advertiser
   * certificates.
   */
  exemptPolicyViolationKeys?: GoogleAdsSearchads360V23Common__PolicyViolationKey[];
  /**
   * The list of policy topics that should not cause a `PolicyFindingError` to
   * be reported. This field is used for ad policy exemptions. It corresponds to
   * the `PolicyTopicEntry.topic` field. If this field is populated, then
   * `exempt_policy_violation_keys` must be empty. Resources that violate these
   * policies will be saved, but will not be eligible to serve. They may begin
   * serving at a later time due to a change in policies, re-review of the
   * resource, or a change in advertiser certificates.
   */
  ignorablePolicyTopics?: string[];
}

/**
 * Key of the violation. The key is used for referring to a violation when
 * filing an exemption request.
 */
export interface GoogleAdsSearchads360V23Common__PolicyViolationKey {
  /**
   * Unique ID of the violated policy.
   */
  policyName?: string;
  /**
   * The text that violates the policy if specified. Otherwise, refers to the
   * policy in general (for example, when requesting to be exempt from the whole
   * policy). If not specified for criterion exemptions, the whole policy is
   * implied. Must be specified for ad exemptions.
   */
  violatingText?: string;
}

/**
 * An asset representing a list of price offers.
 */
export interface GoogleAdsSearchads360V23Common__PriceAsset {
  /**
   * Required. The language of the price asset. Represented as BCP 47 language
   * tag.
   */
  languageCode?: string;
  /**
   * The price offerings of the price asset. The size of this collection should
   * be between 3 and 8, inclusive.
   */
  priceOfferings?: GoogleAdsSearchads360V23Common__PriceOffering[];
  /**
   * The price qualifier of the price asset.
   */
  priceQualifier?:  | "UNSPECIFIED" | "UNKNOWN" | "FROM" | "UP_TO" | "AVERAGE";
  /**
   * Required. The type of the price asset.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "BRANDS" | "EVENTS" | "LOCATIONS" | "NEIGHBORHOODS" | "PRODUCT_CATEGORIES" | "PRODUCT_TIERS" | "SERVICES" | "SERVICE_CATEGORIES" | "SERVICE_TIERS";
}

function serializeGoogleAdsSearchads360V23Common__PriceAsset(data: any): GoogleAdsSearchads360V23Common__PriceAsset {
  return {
    ...data,
    priceOfferings: data["priceOfferings"] !== undefined ? data["priceOfferings"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PriceOffering(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PriceAsset(data: any): GoogleAdsSearchads360V23Common__PriceAsset {
  return {
    ...data,
    priceOfferings: data["priceOfferings"] !== undefined ? data["priceOfferings"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PriceOffering(item))) : undefined,
  };
}

/**
 * A single price offering within a PriceAsset.
 */
export interface GoogleAdsSearchads360V23Common__PriceOffering {
  /**
   * Required. The description of the price offering. The length of this string
   * should be between 1 and 25, inclusive.
   */
  description?: string;
  /**
   * The final mobile URL after all cross domain redirects.
   */
  finalMobileUrl?: string;
  /**
   * Required. The final URL after all cross domain redirects.
   */
  finalUrl?: string;
  /**
   * Required. The header of the price offering. The length of this string
   * should be between 1 and 25, inclusive.
   */
  header?: string;
  /**
   * Required. The price value of the price offering.
   */
  price?: GoogleAdsSearchads360V23Common__Money;
  /**
   * The price unit of the price offering.
   */
  unit?:  | "UNSPECIFIED" | "UNKNOWN" | "PER_HOUR" | "PER_DAY" | "PER_WEEK" | "PER_MONTH" | "PER_YEAR" | "PER_NIGHT";
}

function serializeGoogleAdsSearchads360V23Common__PriceOffering(data: any): GoogleAdsSearchads360V23Common__PriceOffering {
  return {
    ...data,
    price: data["price"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Money(data["price"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PriceOffering(data: any): GoogleAdsSearchads360V23Common__PriceOffering {
  return {
    ...data,
    price: data["price"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Money(data["price"]) : undefined,
  };
}

/**
 * Brand of the product.
 */
export interface GoogleAdsSearchads360V23Common__ProductBrandInfo {
  /**
   * String value of the product brand.
   */
  value?: string;
}

/**
 * Category of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductCategoryInfo {
  /**
   * ID of the product category. This ID is equivalent to the
   * google_product_category ID as described in this article:
   * https://support.google.com/merchants/answer/6324436
   */
  categoryId?: bigint;
  /**
   * Level of the product category.
   */
  level?:  | "UNSPECIFIED" | "UNKNOWN" | "LEVEL1" | "LEVEL2" | "LEVEL3" | "LEVEL4" | "LEVEL5";
}

function serializeGoogleAdsSearchads360V23Common__ProductCategoryInfo(data: any): GoogleAdsSearchads360V23Common__ProductCategoryInfo {
  return {
    ...data,
    categoryId: data["categoryId"] !== undefined ? String(data["categoryId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ProductCategoryInfo(data: any): GoogleAdsSearchads360V23Common__ProductCategoryInfo {
  return {
    ...data,
    categoryId: data["categoryId"] !== undefined ? BigInt(data["categoryId"]) : undefined,
  };
}

/**
 * Availability of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductChannelExclusivityInfo {
  /**
   * Value of the availability.
   */
  channelExclusivity?:  | "UNSPECIFIED" | "UNKNOWN" | "SINGLE_CHANNEL" | "MULTI_CHANNEL";
}

/**
 * Locality of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductChannelInfo {
  /**
   * Value of the locality.
   */
  channel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
}

/**
 * Condition of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductConditionInfo {
  /**
   * Value of the condition.
   */
  condition?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "REFURBISHED" | "USED";
}

/**
 * Custom attribute of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductCustomAttributeInfo {
  /**
   * Indicates the index of the custom attribute.
   */
  index?:  | "UNSPECIFIED" | "UNKNOWN" | "INDEX0" | "INDEX1" | "INDEX2" | "INDEX3" | "INDEX4";
  /**
   * String value of the product custom attribute.
   */
  value?: string;
}

/**
 * Grouping of a product offer. This listing dimension is deprecated and it is
 * supported only in Display campaigns.
 */
export interface GoogleAdsSearchads360V23Common__ProductGroupingInfo {
  /**
   * String value of the product grouping.
   */
  value?: string;
}

/**
 * Item id of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductItemIdInfo {
  /**
   * Value of the id.
   */
  value?: string;
}

/**
 * Labels of a product offer. This listing dimension is deprecated and it is
 * supported only in Display campaigns.
 */
export interface GoogleAdsSearchads360V23Common__ProductLabelsInfo {
  /**
   * String value of the product labels.
   */
  value?: string;
}

/**
 * Legacy condition of a product offer. This listing dimension is deprecated
 * and it is supported only in Display campaigns.
 */
export interface GoogleAdsSearchads360V23Common__ProductLegacyConditionInfo {
  /**
   * String value of the product legacy condition.
   */
  value?: string;
}

/**
 * Full type of a product offer. This listing dimension is deprecated and it is
 * supported only in Display campaigns.
 */
export interface GoogleAdsSearchads360V23Common__ProductTypeFullInfo {
  /**
   * String value of the product full type.
   */
  value?: string;
}

/**
 * Type of a product offer.
 */
export interface GoogleAdsSearchads360V23Common__ProductTypeInfo {
  /**
   * Level of the type.
   */
  level?:  | "UNSPECIFIED" | "UNKNOWN" | "LEVEL1" | "LEVEL2" | "LEVEL3" | "LEVEL4" | "LEVEL5";
  /**
   * Value of the type.
   */
  value?: string;
}

/**
 * A Promotion asset.
 */
export interface GoogleAdsSearchads360V23Common__PromotionAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * A modifier for qualification of the discount.
   */
  discountModifier?:  | "UNSPECIFIED" | "UNKNOWN" | "UP_TO";
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * The language of the promotion. Represented as BCP 47 language tag.
   */
  languageCode?: string;
  /**
   * Money amount off for discount in the promotion. Either this or percent_off
   * is required.
   */
  moneyAmountOff?: GoogleAdsSearchads360V23Common__Money;
  /**
   * The occasion the promotion was intended for. If an occasion is set, the
   * redemption window will need to fall within the date range associated with
   * the occasion.
   */
  occasion?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW_YEARS" | "CHINESE_NEW_YEAR" | "VALENTINES_DAY" | "EASTER" | "MOTHERS_DAY" | "FATHERS_DAY" | "LABOR_DAY" | "BACK_TO_SCHOOL" | "HALLOWEEN" | "BLACK_FRIDAY" | "CYBER_MONDAY" | "CHRISTMAS" | "BOXING_DAY" | "INDEPENDENCE_DAY" | "NATIONAL_DAY" | "END_OF_SEASON" | "WINTER_SALE" | "SUMMER_SALE" | "FALL_SALE" | "SPRING_SALE" | "RAMADAN" | "EID_AL_FITR" | "EID_AL_ADHA" | "SINGLES_DAY" | "WOMENS_DAY" | "HOLI" | "PARENTS_DAY" | "ST_NICHOLAS_DAY" | "CARNIVAL" | "EPIPHANY" | "ROSH_HASHANAH" | "PASSOVER" | "HANUKKAH" | "DIWALI" | "NAVRATRI" | "SONGKRAN" | "YEAR_END_GIFT";
  /**
   * The amount the total order needs to be for the user to be eligible for the
   * promotion.
   */
  ordersOverAmount?: GoogleAdsSearchads360V23Common__Money;
  /**
   * Percentage off discount in the promotion. 1,000,000 = 100%. Either this or
   * money_amount_off is required.
   */
  percentOff?: bigint;
  /**
   * Barcode info used to generate promotion barcode for user to be eligible
   * for the promotion.
   */
  promotionBarcodeInfo?: GoogleAdsSearchads360V23Common__PromotionBarcodeInfo;
  /**
   * A code the user should use in order to be eligible for the promotion.
   */
  promotionCode?: string;
  /**
   * QR code info used to generate promotion QR code for user to be eligible
   * for the promotion.
   */
  promotionQrCodeInfo?: GoogleAdsSearchads360V23Common__PromotionQrCodeInfo;
  /**
   * Required. A freeform description of what the promotion is targeting.
   */
  promotionTarget?: string;
  /**
   * Last date of when the promotion is eligible to be redeemed, in yyyy-MM-dd
   * format.
   */
  redemptionEndDate?: string;
  /**
   * Start date of when the promotion is eligible to be redeemed, in yyyy-MM-dd
   * format.
   */
  redemptionStartDate?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
  /**
   * Terms and conditions of the promotion.
   */
  termsAndConditionsText?: string;
  /**
   * URI to the terms and conditions of the promotion.
   */
  termsAndConditionsUri?: string;
}

function serializeGoogleAdsSearchads360V23Common__PromotionAsset(data: any): GoogleAdsSearchads360V23Common__PromotionAsset {
  return {
    ...data,
    moneyAmountOff: data["moneyAmountOff"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Money(data["moneyAmountOff"]) : undefined,
    ordersOverAmount: data["ordersOverAmount"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Money(data["ordersOverAmount"]) : undefined,
    percentOff: data["percentOff"] !== undefined ? String(data["percentOff"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__PromotionAsset(data: any): GoogleAdsSearchads360V23Common__PromotionAsset {
  return {
    ...data,
    moneyAmountOff: data["moneyAmountOff"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Money(data["moneyAmountOff"]) : undefined,
    ordersOverAmount: data["ordersOverAmount"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Money(data["ordersOverAmount"]) : undefined,
    percentOff: data["percentOff"] !== undefined ? BigInt(data["percentOff"]) : undefined,
  };
}

/**
 * Barcode info to generate promotion barcode.
 */
export interface GoogleAdsSearchads360V23Common__PromotionBarcodeInfo {
  /**
   * Promotion message to be encoded in the barcode.
   */
  barcodeContent?: string;
  /**
   * Barcode type used to generate barcode with the correct format.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "AZTEC" | "CODABAR" | "CODE39" | "CODE128" | "DATA_MATRIX" | "EAN8" | "EAN13" | "ITF" | "PDF417" | "UPC_A";
}

/**
 * QR code info to generate promotion QR code.
 */
export interface GoogleAdsSearchads360V23Common__PromotionQrCodeInfo {
  /**
   * Promotion message to be encoded in the QR code.
   */
  qrCodeContent?: string;
}

/**
 * A Proximity criterion. The geo point and radius determine what geographical
 * area is included. The address is a description of the geo point that does not
 * affect ad serving. There are two ways to create a proximity. First, by
 * setting an address and radius. The geo point will be automatically computed.
 * Second, by setting a geo point and radius. The address is an optional label
 * that won't be validated.
 */
export interface GoogleAdsSearchads360V23Common__ProximityInfo {
  /**
   * Full address.
   */
  address?: GoogleAdsSearchads360V23Common__AddressInfo;
  /**
   * Latitude and longitude.
   */
  geoPoint?: GoogleAdsSearchads360V23Common__GeoPointInfo;
  /**
   * The radius of the proximity.
   */
  radius?: number;
  /**
   * The unit of measurement of the radius. Default is KILOMETERS.
   */
  radiusUnits?:  | "UNSPECIFIED" | "UNKNOWN" | "MILES" | "KILOMETERS";
}

/**
 * Settings for Real-Time Bidding, a feature only available for campaigns
 * targeting the Ad Exchange network.
 */
export interface GoogleAdsSearchads360V23Common__RealTimeBiddingSetting {
  /**
   * Whether the campaign is opted in to real-time bidding.
   */
  optIn?: boolean;
}

/**
 * Specification for various creative controls for a responsive display ad.
 */
export interface GoogleAdsSearchads360V23Common__ResponsiveDisplayAdControlSpec {
  /**
   * Whether the advertiser has opted into the asset enhancements feature.
   */
  enableAssetEnhancements?: boolean;
  /**
   * Whether the advertiser has opted into auto-gen video feature.
   */
  enableAutogenVideo?: boolean;
}

/**
 * A responsive display ad.
 */
export interface GoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo {
  /**
   * The accent color of the ad in hexadecimal, for example, #ffffff for white.
   * If one of `main_color` and `accent_color` is set, the other is required as
   * well.
   */
  accentColor?: string;
  /**
   * Advertiser's consent to allow flexible color. When true, the ad may be
   * served with different color if necessary. When false, the ad will be served
   * with the specified colors or a neutral color. The default value is `true`.
   * Must be true if `main_color` and `accent_color` are not set.
   */
  allowFlexibleColor?: boolean;
  /**
   * The advertiser/brand name. Maximum display width is 25.
   */
  businessName?: string;
  /**
   * The call-to-action text for the ad. Maximum display width is 30.
   */
  callToActionText?: string;
  /**
   * Specification for various creative controls.
   */
  controlSpec?: GoogleAdsSearchads360V23Common__ResponsiveDisplayAdControlSpec;
  /**
   * Descriptive texts for the ad. The maximum length is 90 characters. At
   * least 1 and max 5 headlines can be specified.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Specifies which format the ad will be served in. Default is ALL_FORMATS.
   */
  formatSetting?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_FORMATS" | "NON_NATIVE" | "NATIVE";
  /**
   * Short format headlines for the ad. The maximum length is 30 characters. At
   * least 1 and max 5 headlines can be specified.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Logo images to be used in the ad. Valid image types are GIF, JPEG, and
   * PNG. The minimum size is 512x128 and the aspect ratio must be 4:1 (+-1%).
   * Combined with `square_logo_images`, the maximum is 5.
   */
  logoImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * A required long format headline. The maximum length is 90 characters.
   */
  longHeadline?: GoogleAdsSearchads360V23Common__AdTextAsset;
  /**
   * The main color of the ad in hexadecimal, for example, #ffffff for white.
   * If one of `main_color` and `accent_color` is set, the other is required as
   * well.
   */
  mainColor?: string;
  /**
   * Marketing images to be used in the ad. Valid image types are GIF, JPEG,
   * and PNG. The minimum size is 600x314 and the aspect ratio must be 1.91:1
   * (+-1%). At least one `marketing_image` is required. Combined with
   * `square_marketing_images`, the maximum is 15.
   */
  marketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Prefix before price. For example, 'as low as'.
   */
  pricePrefix?: string;
  /**
   * Promotion text used for dynamic formats of responsive ads. For example
   * 'Free two-day shipping'.
   */
  promoText?: string;
  /**
   * Square logo images to be used in the ad. Valid image types are GIF, JPEG,
   * and PNG. The minimum size is 128x128 and the aspect ratio must be 1:1
   * (+-1%). Combined with `logo_images`, the maximum is 5.
   */
  squareLogoImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Square marketing images to be used in the ad. Valid image types are GIF,
   * JPEG, and PNG. The minimum size is 300x300 and the aspect ratio must be 1:1
   * (+-1%). At least one square `marketing_image` is required. Combined with
   * `marketing_images`, the maximum is 15.
   */
  squareMarketingImages?: GoogleAdsSearchads360V23Common__AdImageAsset[];
  /**
   * Optional YouTube videos for the ad. A maximum of 5 videos can be
   * specified.
   */
  youtubeVideos?: GoogleAdsSearchads360V23Common__AdVideoAsset[];
}

function serializeGoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo(data: any): GoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    longHeadline: data["longHeadline"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AdTextAsset(data["longHeadline"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo(data: any): GoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    longHeadline: data["longHeadline"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AdTextAsset(data["longHeadline"]) : undefined,
  };
}

/**
 * A responsive search ad. Responsive search ads let you create an ad that
 * adapts to show more text, and more relevant messages, to your customers.
 * Enter multiple headlines and descriptions when creating a responsive search
 * ad, and over time, Google Ads will automatically test different combinations
 * and learn which combinations perform best. By adapting your ad's content to
 * more closely match potential customers' search terms, responsive search ads
 * may improve your campaign's performance. More information at
 * https://support.google.com/google-ads/answer/7684791
 */
export interface GoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo {
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * First part of text that can be appended to the URL in the ad.
   */
  path1?: string;
  /**
   * Second part of text that can be appended to the URL in the ad. This field
   * can only be set when `path1` is also set.
   */
  path2?: string;
}

function serializeGoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * Representation of a userlist that is generated by a rule.
 */
export interface GoogleAdsSearchads360V23Common__RuleBasedUserListInfo {
  /**
   * Flexible rule representation of visitors with one or multiple actions. The
   * flexible user list is defined by two lists of operands – inclusive_operands
   * and exclusive_operands; each operand represents a set of users based on
   * actions they took in a given timeframe. These lists of operands are
   * combined with the AND_NOT operator, so that users represented by the
   * inclusive operands are included in the user list, minus the users
   * represented by the exclusive operands.
   */
  flexibleRuleUserList?: GoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo;
  /**
   * The status of pre-population. The field is default to NONE if not set
   * which means the previous users will not be considered. If set to REQUESTED,
   * past site visitors or app users who match the list definition will be
   * included in the list (works on the Display Network only). This will only
   * add past users from within the last 30 days, depending on the list's
   * membership duration and the date when the remarketing tag is added. The
   * status will be updated to FINISHED once request is processed, or FAILED if
   * the request fails.
   */
  prepopulationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUESTED" | "FINISHED" | "FAILED";
}

function serializeGoogleAdsSearchads360V23Common__RuleBasedUserListInfo(data: any): GoogleAdsSearchads360V23Common__RuleBasedUserListInfo {
  return {
    ...data,
    flexibleRuleUserList: data["flexibleRuleUserList"] !== undefined ? serializeGoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo(data["flexibleRuleUserList"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__RuleBasedUserListInfo(data: any): GoogleAdsSearchads360V23Common__RuleBasedUserListInfo {
  return {
    ...data,
    flexibleRuleUserList: data["flexibleRuleUserList"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__FlexibleRuleUserListInfo(data["flexibleRuleUserList"]) : undefined,
  };
}

/**
 * An expanded dynamic search ad.
 */
export interface GoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo {
  /**
   * The tracking id of the ad.
   */
  adTrackingId?: bigint;
  /**
   * The first line of the ad's description.
   */
  description1?: string;
  /**
   * The second line of the ad's description.
   */
  description2?: string;
}

function serializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? String(data["adTrackingId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? BigInt(data["adTrackingId"]) : undefined,
  };
}

/**
 * A Search Ads 360 expanded text ad.
 */
export interface GoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo {
  /**
   * The tracking id of the ad.
   */
  adTrackingId?: bigint;
  /**
   * The first line of the ad's description.
   */
  description1?: string;
  /**
   * The second line of the ad's description.
   */
  description2?: string;
  /**
   * The headline of the ad.
   */
  headline?: string;
  /**
   * The second headline of the ad.
   */
  headline2?: string;
  /**
   * The third headline of the ad.
   */
  headline3?: string;
  /**
   * Text appended to the auto-generated visible URL with a delimiter.
   */
  path1?: string;
  /**
   * Text appended to path1 with a delimiter.
   */
  path2?: string;
}

function serializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? String(data["adTrackingId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? BigInt(data["adTrackingId"]) : undefined,
  };
}

/**
 * A Search Ads 360 product ad.
 */
export interface GoogleAdsSearchads360V23Common__SearchAds360ProductAdInfo {
}

/**
 * A Search Ads 360 responsive search ad.
 */
export interface GoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo {
  /**
   * The tracking id of the ad.
   */
  adTrackingId?: bigint;
  /**
   * List of text assets for descriptions. When the ad serves the descriptions
   * will be selected from this list.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets for headlines. When the ad serves the headlines will
   * be selected from this list.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * Text appended to the auto-generated visible URL with a delimiter.
   */
  path1?: string;
  /**
   * Text appended to path1 with a delimiter.
   */
  path2?: string;
}

function serializeGoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? String(data["adTrackingId"]) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? BigInt(data["adTrackingId"]) : undefined,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * A Search Ads 360 text ad.
 */
export interface GoogleAdsSearchads360V23Common__SearchAds360TextAdInfo {
  /**
   * The tracking id of the ad.
   */
  adTrackingId?: bigint;
  /**
   * The first line of the ad's description.
   */
  description1?: string;
  /**
   * The second line of the ad's description.
   */
  description2?: string;
  /**
   * The displayed mobile URL of the ad.
   */
  displayMobileUrl?: string;
  /**
   * The displayed URL of the ad.
   */
  displayUrl?: string;
  /**
   * The headline of the ad.
   */
  headline?: string;
}

function serializeGoogleAdsSearchads360V23Common__SearchAds360TextAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360TextAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? String(data["adTrackingId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__SearchAds360TextAdInfo(data: any): GoogleAdsSearchads360V23Common__SearchAds360TextAdInfo {
  return {
    ...data,
    adTrackingId: data["adTrackingId"] !== undefined ? BigInt(data["adTrackingId"]) : undefined,
  };
}

/**
 * A Search Theme criterion only on Performance Max campaign. Represents a
 * keyword-like advertiser input.
 */
export interface GoogleAdsSearchads360V23Common__SearchThemeInfo {
  /**
   * Each Search Theme has a value of a simple string, like keywords. There are
   * limits on overall length, allowed characters, and number of words.
   */
  text?: string;
}

/**
 * Segment only fields.
 */
export interface GoogleAdsSearchads360V23Common__Segments {
  /**
   * Ad Format type.
   */
  adFormatType?:  | "UNSPECIFIED" | "UNKNOWN" | "OTHER" | "UNSEGMENTED" | "INSTREAM_SKIPPABLE" | "INSTREAM_NON_SKIPPABLE" | "INFEED" | "BUMPER" | "OUTSTREAM" | "MASTHEAD" | "AUDIO" | "SHORTS" | "PAUSE" | "VERTICAL_ADS_PROMOTION" | "VERTICAL_ADS_BOOKING_LINK" | "TEXT";
  /**
   * Ad network type.
   */
  adNetworkType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "SEARCH_PARTNERS" | "CONTENT" | "MIXED" | "YOUTUBE" | "GOOGLE_TV" | "GOOGLE_OWNED_CHANNELS" | "GMAIL" | "DISCOVER" | "MAPS";
  /**
   * Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics.
   * Indicates whether the interaction metrics occurred on the asset itself or a
   * different asset or ad unit. Interactions (for example, clicks) are counted
   * across all the parts of the served ad (for example, Ad itself and other
   * components like Sitelinks) when they are served together. When
   * interaction_on_this_asset is true, it means the interactions are on this
   * specific asset and when interaction_on_this_asset is false, it means the
   * interactions is not on this specific asset but on other parts of the served
   * ad this asset is served with.
   */
  assetInteractionTarget?: GoogleAdsSearchads360V23Common__AssetInteractionTarget;
  /**
   * Resource name of the conversion action.
   */
  conversionAction?: string;
  /**
   * Conversion action category.
   */
  conversionActionCategory?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT" | "PAGE_VIEW" | "PURCHASE" | "SIGNUP" | "DOWNLOAD" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "SUBSCRIBE_PAID" | "PHONE_CALL_LEAD" | "IMPORTED_LEAD" | "SUBMIT_LEAD_FORM" | "BOOK_APPOINTMENT" | "REQUEST_QUOTE" | "GET_DIRECTIONS" | "OUTBOUND_CLICK" | "CONTACT" | "ENGAGEMENT" | "STORE_VISIT" | "STORE_SALE" | "QUALIFIED_LEAD" | "CONVERTED_LEAD";
  /**
   * Conversion action name.
   */
  conversionActionName?: string;
  /**
   * The conversion custom dimensions.
   */
  conversionCustomDimensions?: GoogleAdsSearchads360V23Common__Value[];
  /**
   * Date to which metrics apply. yyyy-MM-dd format, for example, 2018-04-17.
   */
  date?: string;
  /**
   * Day of the week, for example, MONDAY.
   */
  dayOfWeek?:  | "UNSPECIFIED" | "UNKNOWN" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY";
  /**
   * Device to which metrics apply.
   */
  device?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER";
  /**
   * Resource name of the geo target constant that represents a city.
   */
  geoTargetCity?: string;
  /**
   * Resource name of the geo target constant that represents a country.
   */
  geoTargetCountry?: string;
  /**
   * Resource name of the geo target constant that represents a metro.
   */
  geoTargetMetro?: string;
  /**
   * Resource name of the geo target constant that represents a postal code.
   */
  geoTargetPostalCode?: string;
  /**
   * Resource name of the geo target constant that represents a region.
   */
  geoTargetRegion?: string;
  /**
   * Hour of day as a number between 0 and 23, inclusive.
   */
  hour?: number;
  /**
   * Keyword criterion.
   */
  keyword?: GoogleAdsSearchads360V23Common__Keyword;
  /**
   * Month as represented by the date of the first day of a month. Formatted as
   * yyyy-MM-dd.
   */
  month?: string;
  /**
   * Bidding category (level 1) of the product.
   */
  productBiddingCategoryLevel1?: string;
  /**
   * Bidding category (level 2) of the product.
   */
  productBiddingCategoryLevel2?: string;
  /**
   * Bidding category (level 3) of the product.
   */
  productBiddingCategoryLevel3?: string;
  /**
   * Bidding category (level 4) of the product.
   */
  productBiddingCategoryLevel4?: string;
  /**
   * Bidding category (level 5) of the product.
   */
  productBiddingCategoryLevel5?: string;
  /**
   * Brand of the product.
   */
  productBrand?: string;
  /**
   * Channel of the product.
   */
  productChannel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
  /**
   * Channel exclusivity of the product.
   */
  productChannelExclusivity?:  | "UNSPECIFIED" | "UNKNOWN" | "SINGLE_CHANNEL" | "MULTI_CHANNEL";
  /**
   * Condition of the product.
   */
  productCondition?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "REFURBISHED" | "USED";
  /**
   * Resource name of the geo target constant for the country of sale of the
   * product.
   */
  productCountry?: string;
  /**
   * Custom attribute 0 of the product.
   */
  productCustomAttribute0?: string;
  /**
   * Custom attribute 1 of the product.
   */
  productCustomAttribute1?: string;
  /**
   * Custom attribute 2 of the product.
   */
  productCustomAttribute2?: string;
  /**
   * Custom attribute 3 of the product.
   */
  productCustomAttribute3?: string;
  /**
   * Custom attribute 4 of the product.
   */
  productCustomAttribute4?: string;
  /**
   * Item ID of the product.
   */
  productItemId?: string;
  /**
   * Resource name of the language constant for the language of the product.
   */
  productLanguage?: string;
  /**
   * Bidding category (level 1) of the product sold.
   */
  productSoldBiddingCategoryLevel1?: string;
  /**
   * Bidding category (level 2) of the product sold.
   */
  productSoldBiddingCategoryLevel2?: string;
  /**
   * Bidding category (level 3) of the product sold.
   */
  productSoldBiddingCategoryLevel3?: string;
  /**
   * Bidding category (level 4) of the product sold.
   */
  productSoldBiddingCategoryLevel4?: string;
  /**
   * Bidding category (level 5) of the product sold.
   */
  productSoldBiddingCategoryLevel5?: string;
  /**
   * Brand of the product sold.
   */
  productSoldBrand?: string;
  /**
   * Condition of the product sold.
   */
  productSoldCondition?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "REFURBISHED" | "USED";
  /**
   * Custom attribute 0 of the product sold.
   */
  productSoldCustomAttribute0?: string;
  /**
   * Custom attribute 1 of the product sold.
   */
  productSoldCustomAttribute1?: string;
  /**
   * Custom attribute 2 of the product sold.
   */
  productSoldCustomAttribute2?: string;
  /**
   * Custom attribute 3 of the product sold.
   */
  productSoldCustomAttribute3?: string;
  /**
   * Custom attribute 4 of the product sold.
   */
  productSoldCustomAttribute4?: string;
  /**
   * Item ID of the product sold.
   */
  productSoldItemId?: string;
  /**
   * Title of the product sold.
   */
  productSoldTitle?: string;
  /**
   * Type (level 1) of the product sold.
   */
  productSoldTypeL1?: string;
  /**
   * Type (level 2) of the product sold.
   */
  productSoldTypeL2?: string;
  /**
   * Type (level 3) of the product sold.
   */
  productSoldTypeL3?: string;
  /**
   * Type (level 4) of the product sold.
   */
  productSoldTypeL4?: string;
  /**
   * Type (level 5) of the product sold.
   */
  productSoldTypeL5?: string;
  /**
   * Store ID of the product.
   */
  productStoreId?: string;
  /**
   * Title of the product.
   */
  productTitle?: string;
  /**
   * Type (level 1) of the product.
   */
  productTypeL1?: string;
  /**
   * Type (level 2) of the product.
   */
  productTypeL2?: string;
  /**
   * Type (level 3) of the product.
   */
  productTypeL3?: string;
  /**
   * Type (level 4) of the product.
   */
  productTypeL4?: string;
  /**
   * Type (level 5) of the product.
   */
  productTypeL5?: string;
  /**
   * Quarter as represented by the date of the first day of a quarter. Uses the
   * calendar year for quarters, for example, the second quarter of 2018 starts
   * on 2018-04-01. Formatted as yyyy-MM-dd.
   */
  quarter?: string;
  /**
   * The raw event conversion dimensions.
   */
  rawEventConversionDimensions?: GoogleAdsSearchads360V23Common__Value[];
  /**
   * The display names of participants in an event listing, like performers,
   * speakers, or teams.
   */
  verticalAdsEventParticipantDisplayNames?: string;
  /**
   * The class of the hotel. Generally in the range of 1 to 5 stars, but fully
   * customizable in the hotel feed.
   */
  verticalAdsHotelClass?: bigint;
  /**
   * The listing associated with a listing impression, click or conversion.
   */
  verticalAdsListing?: string;
  /**
   * The brand associated with a specific listing within a Vertical Ads
   * context, for example, the brand of a car rental, a vacation home, or an
   * event.
   */
  verticalAdsListingBrand?: string;
  /**
   * The city where the vertical ads listing is located.
   */
  verticalAdsListingCity?: string;
  /**
   * The country where the vertical ads listing is located.
   */
  verticalAdsListingCountry?: string;
  /**
   * The region where the vertical ads listing is located.
   */
  verticalAdsListingRegion?: string;
  /**
   * A specific partner account within a Partner Center (for example, Hotel
   * Center) that supplies inventory feed data for Vertical Ads.
   */
  verticalAdsPartnerAccount?: bigint;
  /**
   * Type of vertical ad, such as Vacation Rentals, Car Rentals, or Events,
   * used to categorize and segment data in the context of Vertical Ads.
   */
  verticalAdsVertical?:  | "UNSPECIFIED" | "UNKNOWN" | "HOTELS" | "VACATION_RENTALS" | "RENTAL_CARS" | "EVENTS" | "THINGS_TO_DO" | "FLIGHTS";
  /**
   * Week as defined as Monday through Sunday, and represented by the date of
   * Monday. Formatted as yyyy-MM-dd.
   */
  week?: string;
  /**
   * Year, formatted as yyyy.
   */
  year?: number;
}

function serializeGoogleAdsSearchads360V23Common__Segments(data: any): GoogleAdsSearchads360V23Common__Segments {
  return {
    ...data,
    conversionCustomDimensions: data["conversionCustomDimensions"] !== undefined ? data["conversionCustomDimensions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    rawEventConversionDimensions: data["rawEventConversionDimensions"] !== undefined ? data["rawEventConversionDimensions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    verticalAdsHotelClass: data["verticalAdsHotelClass"] !== undefined ? String(data["verticalAdsHotelClass"]) : undefined,
    verticalAdsPartnerAccount: data["verticalAdsPartnerAccount"] !== undefined ? String(data["verticalAdsPartnerAccount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__Segments(data: any): GoogleAdsSearchads360V23Common__Segments {
  return {
    ...data,
    conversionCustomDimensions: data["conversionCustomDimensions"] !== undefined ? data["conversionCustomDimensions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    rawEventConversionDimensions: data["rawEventConversionDimensions"] !== undefined ? data["rawEventConversionDimensions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    verticalAdsHotelClass: data["verticalAdsHotelClass"] !== undefined ? BigInt(data["verticalAdsHotelClass"]) : undefined,
    verticalAdsPartnerAccount: data["verticalAdsPartnerAccount"] !== undefined ? BigInt(data["verticalAdsPartnerAccount"]) : undefined,
  };
}

/**
 * A Shopping Comparison Listing ad.
 */
export interface GoogleAdsSearchads360V23Common__ShoppingComparisonListingAdInfo {
  /**
   * Headline of the ad. This field is required. Allowed length is between 25
   * and 45 characters.
   */
  headline?: string;
}

/**
 * The shopping loyalty related data. Shopping utilizes this data to provide
 * users with a better experience. Accessible only to merchants on the
 * allow-list.
 */
export interface GoogleAdsSearchads360V23Common__ShoppingLoyalty {
  /**
   * The membership tier. It is a free-form string as each merchant may have
   * their own loyalty system. For example, it could be a number from 1 to 10,
   * or a string such as "Golden" or "Silver", or even empty string "".
   */
  loyaltyTier?: string;
}

/**
 * A standard Shopping ad.
 */
export interface GoogleAdsSearchads360V23Common__ShoppingProductAdInfo {
}

/**
 * A Smart Shopping ad.
 */
export interface GoogleAdsSearchads360V23Common__ShoppingSmartAdInfo {
}

/**
 * SimilarUserList is a list of users which are similar to users from another
 * UserList. These lists are read-only and automatically created by Google.
 */
export interface GoogleAdsSearchads360V23Common__SimilarUserListInfo {
  /**
   * Seed UserList from which this list is derived.
   */
  seedUserList?: string;
}

/**
 * A Sitelink asset.
 */
export interface GoogleAdsSearchads360V23Common__SitelinkAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * First line of the description for the sitelink. If set, the length should
   * be between 1 and 35, inclusive, and description2 must also be set.
   */
  description1?: string;
  /**
   * Second line of the description for the sitelink. If set, the length should
   * be between 1 and 35, inclusive, and description1 must also be set.
   */
  description2?: string;
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * Required. URL display text for the sitelink. The length of this string
   * should be between 1 and 25, inclusive.
   */
  linkText?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
}

/**
 * Represents a sitelink.
 */
export interface GoogleAdsSearchads360V23Common__SitelinkFeedItem {
  /**
   * A list of possible final mobile URLs after all cross domain redirects.
   */
  finalMobileUrls?: string[];
  /**
   * A list of possible final URLs after all cross domain redirects.
   */
  finalUrls?: string[];
  /**
   * Final URL suffix to be appended to landing page URLs served with parallel
   * tracking.
   */
  finalUrlSuffix?: string;
  /**
   * First line of the description for the sitelink. If this value is set,
   * line2 must also be set. The length of this string should be between 0 and
   * 35, inclusive.
   */
  line1?: string;
  /**
   * Second line of the description for the sitelink. If this value is set,
   * line1 must also be set. The length of this string should be between 0 and
   * 35, inclusive.
   */
  line2?: string;
  /**
   * URL display text for the sitelink. The length of this string should be
   * between 1 and 25, inclusive.
   */
  linkText?: string;
  /**
   * URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * A list of mappings to be used for substituting URL custom parameter tags
   * in the tracking_url_template, final_urls, and/or final_mobile_urls.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
}

/**
 * A Smart campaign ad.
 */
export interface GoogleAdsSearchads360V23Common__SmartCampaignAdInfo {
  /**
   * List of text assets, each of which corresponds to a description when the
   * ad serves. This list consists of a minimum of 2 and up to 4 text assets.
   */
  descriptions?: GoogleAdsSearchads360V23Common__AdTextAsset[];
  /**
   * List of text assets, each of which corresponds to a headline when the ad
   * serves. This list consists of a minimum of 3 and up to 15 text assets.
   */
  headlines?: GoogleAdsSearchads360V23Common__AdTextAsset[];
}

function serializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data: any): GoogleAdsSearchads360V23Common__SmartCampaignAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data: any): GoogleAdsSearchads360V23Common__SmartCampaignAdInfo {
  return {
    ...data,
    descriptions: data["descriptions"] !== undefined ? data["descriptions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
    headlines: data["headlines"] !== undefined ? data["headlines"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AdTextAsset(item))) : undefined,
  };
}

/**
 * Store attributes of the transaction.
 */
export interface GoogleAdsSearchads360V23Common__StoreAttribute {
  /**
   * Store code from
   * https://support.google.com/business/answer/3370250#storecode
   */
  storeCode?: string;
}

/**
 * Metadata for Store Sales Direct.
 */
export interface GoogleAdsSearchads360V23Common__StoreSalesMetadata {
  /**
   * Name of the store sales custom variable key. A predefined key that can be
   * applied to the transaction and then later used for custom segmentation in
   * reporting. Accessible only to customers on the allow-list.
   */
  customKey?: string;
  /**
   * This is the fraction of all transactions that are identifiable (for
   * example, associated with any form of customer information). Required. The
   * fraction needs to be between 0 and 1 (excluding 0).
   */
  loyaltyFraction?: number;
  /**
   * Metadata for a third party Store Sales upload.
   */
  thirdPartyMetadata?: GoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata;
  /**
   * This is the ratio of sales being uploaded compared to the overall sales
   * that can be associated with a customer. Required. The fraction needs to be
   * between 0 and 1 (excluding 0). For example, if you upload half the sales
   * that you are able to associate with a customer, this would be 0.5.
   */
  transactionUploadFraction?: number;
}

function serializeGoogleAdsSearchads360V23Common__StoreSalesMetadata(data: any): GoogleAdsSearchads360V23Common__StoreSalesMetadata {
  return {
    ...data,
    thirdPartyMetadata: data["thirdPartyMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata(data["thirdPartyMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__StoreSalesMetadata(data: any): GoogleAdsSearchads360V23Common__StoreSalesMetadata {
  return {
    ...data,
    thirdPartyMetadata: data["thirdPartyMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata(data["thirdPartyMetadata"]) : undefined,
  };
}

/**
 * Metadata for a third party Store Sales. This product is only for customers
 * on the allow-list. Contact your Google business development representative
 * for details on the upload configuration.
 */
export interface GoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata {
  /**
   * Time the advertiser uploaded the data to the partner. Required. The format
   * is "YYYY-MM-DD HH:MM:SS". Examples: "2018-03-05 09:15:00" or "2018-02-01
   * 14:34:30"
   */
  advertiserUploadDateTime?: string;
  /**
   * Version of partner IDs to be used for uploads. Required.
   */
  bridgeMapVersionId?: string;
  /**
   * ID of the third party partner updating the transaction feed.
   */
  partnerId?: bigint;
  /**
   * The fraction of valid transactions that are matched to a third party
   * assigned user ID on the partner side. Required. The fraction needs to be
   * between 0 and 1 (excluding 0).
   */
  partnerMatchFraction?: number;
  /**
   * The fraction of valid transactions that are uploaded by the partner to
   * Google. Required. The fraction needs to be between 0 and 1 (excluding 0).
   */
  partnerUploadFraction?: number;
  /**
   * The fraction of transactions that are valid. Invalid transactions may
   * include invalid formats or values. Required. The fraction needs to be
   * between 0 and 1 (excluding 0).
   */
  validTransactionFraction?: number;
}

function serializeGoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata(data: any): GoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata {
  return {
    ...data,
    partnerId: data["partnerId"] !== undefined ? String(data["partnerId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata(data: any): GoogleAdsSearchads360V23Common__StoreSalesThirdPartyMetadata {
  return {
    ...data,
    partnerId: data["partnerId"] !== undefined ? BigInt(data["partnerId"]) : undefined,
  };
}

/**
 * A Structured Snippet asset.
 */
export interface GoogleAdsSearchads360V23Common__StructuredSnippetAsset {
  /**
   * Required. The header of the snippet. This string should be one of the
   * predefined values at
   * https://developers.google.com/google-ads/api/reference/data/structured-snippet-headers
   */
  header?: string;
  /**
   * Required. The values in the snippet. The size of this collection should be
   * between 3 and 10, inclusive. The length of each value should be between 1
   * and 25 characters, inclusive.
   */
  values?: string[];
}

/**
 * The site tag and event snippet pair for a TrackingCodeType.
 */
export interface GoogleAdsSearchads360V23Common__TagSnippet {
  /**
   * The event snippet that works with the site tag to track actions that
   * should be counted as conversions.
   */
  eventSnippet?: string;
  /**
   * The site tag that adds visitors to your basic remarketing lists and sets
   * new cookies on your domain.
   */
  globalSiteTag?: string;
  /**
   * The format of the web page where the tracking tag and snippet will be
   * installed, for example, HTML.
   */
  pageFormat?:  | "UNSPECIFIED" | "UNKNOWN" | "HTML" | "AMP";
  /**
   * The type of the generated tag snippets for tracking conversions.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBPAGE" | "WEBPAGE_ONCLICK" | "CLICK_TO_CALL" | "WEBSITE_CALL";
}

/**
 * An automated bid strategy that sets bids to help get as many conversions as
 * possible at the target cost-per-acquisition (CPA) you set.
 */
export interface GoogleAdsSearchads360V23Common__TargetCpa {
  /**
   * Maximum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. This should only be set for
   * portfolio bid strategies.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Minimum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. This should only be set for
   * portfolio bid strategies.
   */
  cpcBidFloorMicros?: bigint;
  /**
   * Average CPA target. This target should be greater than or equal to minimum
   * billable unit based on the currency for the account.
   */
  targetCpaMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetCpa(data: any): GoogleAdsSearchads360V23Common__TargetCpa {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? String(data["cpcBidFloorMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetCpa(data: any): GoogleAdsSearchads360V23Common__TargetCpa {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? BigInt(data["cpcBidFloorMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
  };
}

/**
 * Projected metrics for a specific target CPA amount.
 */
export interface GoogleAdsSearchads360V23Common__TargetCpaSimulationPoint {
  /**
   * Projected number of app installs.
   */
  appInstalls?: number;
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions.
   */
  biddableConversionsValue?: number;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected number of in-app actions.
   */
  inAppActions?: number;
  /**
   * Projected number of interactions. Only discovery advertising channel type
   * supports this field.
   */
  interactions?: bigint;
  /**
   * Projected required daily budget that the advertiser must set in order to
   * receive the estimated traffic, in micros of advertiser currency.
   */
  requiredBudgetAmountMicros?: bigint;
  /**
   * The simulated target CPA upon which projected metrics are based.
   */
  targetCpaMicros?: bigint;
  /**
   * The simulated scaling modifier upon which projected metrics are based. All
   * CPA targets relevant to the simulated entity are scaled by this modifier.
   */
  targetCpaScalingModifier?: number;
  /**
   * Projected number of top slot impressions. Only search advertising channel
   * type supports this field.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetCpaSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? String(data["interactions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? String(data["requiredBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetCpaSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    interactions: data["interactions"] !== undefined ? BigInt(data["interactions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? BigInt(data["requiredBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type TARGET_CPA.
 */
export interface GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList {
  /**
   * Projected metrics for a series of target CPA amounts.
   */
  points?: GoogleAdsSearchads360V23Common__TargetCpaSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__TargetCpaSimulationPoint(item))) : undefined,
  };
}

/**
 * An automated bidding strategy that sets bids to help get as many clicks as
 * possible at the target cost-per-click (CPC) you set.
 */
export interface GoogleAdsSearchads360V23Common__TargetCpc {
  /**
   * Average CPC target. This target should be greater than or equal to minimum
   * billable unit based on the currency for the account.
   */
  targetCpcMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetCpc(data: any): GoogleAdsSearchads360V23Common__TargetCpc {
  return {
    ...data,
    targetCpcMicros: data["targetCpcMicros"] !== undefined ? String(data["targetCpcMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetCpc(data: any): GoogleAdsSearchads360V23Common__TargetCpc {
  return {
    ...data,
    targetCpcMicros: data["targetCpcMicros"] !== undefined ? BigInt(data["targetCpcMicros"]) : undefined,
  };
}

/**
 * Target CPM (cost per thousand impressions) is an automated bidding strategy
 * that sets bids to optimize performance given the target CPM you set.
 */
export interface GoogleAdsSearchads360V23Common__TargetCpm {
}

/**
 * An automated bidding strategy that sets bids so that a certain percentage of
 * search ads are shown at the top of the first page (or other targeted
 * location).
 */
export interface GoogleAdsSearchads360V23Common__TargetImpressionShare {
  /**
   * The highest CPC bid the automated bidding system is permitted to specify.
   * This is a required field entered by the advertiser that sets the ceiling
   * and specified in local micros.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * The targeted location on the search results page.
   */
  location?:  | "UNSPECIFIED" | "UNKNOWN" | "ANYWHERE_ON_PAGE" | "TOP_OF_PAGE" | "ABSOLUTE_TOP_OF_PAGE";
  /**
   * The chosen fraction of ads to be shown in the targeted location in micros.
   * For example, 1% equals 10,000.
   */
  locationFractionMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShare {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    locationFractionMicros: data["locationFractionMicros"] !== undefined ? String(data["locationFractionMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShare {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    locationFractionMicros: data["locationFractionMicros"] !== undefined ? BigInt(data["locationFractionMicros"]) : undefined,
  };
}

/**
 * Projected metrics for a specific target impression share value.
 */
export interface GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint {
  /**
   * Projected number of absolute top impressions. Only search advertising
   * channel type supports this field.
   */
  absoluteTopImpressions?: bigint;
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions.
   */
  biddableConversionsValue?: number;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected required daily budget that the advertiser must set in order to
   * receive the estimated traffic, in micros of advertiser currency.
   */
  requiredBudgetAmountMicros?: bigint;
  /**
   * Projected required daily cpc bid ceiling that the advertiser must set to
   * realize this simulation, in micros of the advertiser currency.
   */
  requiredCpcBidCeilingMicros?: bigint;
  /**
   * The simulated target impression share value (in micros) upon which
   * projected metrics are based. For example, 10% impression share, which is
   * equal to 0.1, is stored as 100_000. This value is validated and will not
   * exceed 1M (100%).
   */
  targetImpressionShareMicros?: bigint;
  /**
   * Projected number of top slot impressions. Only search advertising channel
   * type supports this field.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint {
  return {
    ...data,
    absoluteTopImpressions: data["absoluteTopImpressions"] !== undefined ? String(data["absoluteTopImpressions"]) : undefined,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? String(data["requiredBudgetAmountMicros"]) : undefined,
    requiredCpcBidCeilingMicros: data["requiredCpcBidCeilingMicros"] !== undefined ? String(data["requiredCpcBidCeilingMicros"]) : undefined,
    targetImpressionShareMicros: data["targetImpressionShareMicros"] !== undefined ? String(data["targetImpressionShareMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint {
  return {
    ...data,
    absoluteTopImpressions: data["absoluteTopImpressions"] !== undefined ? BigInt(data["absoluteTopImpressions"]) : undefined,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? BigInt(data["requiredBudgetAmountMicros"]) : undefined,
    requiredCpcBidCeilingMicros: data["requiredCpcBidCeilingMicros"] !== undefined ? BigInt(data["requiredCpcBidCeilingMicros"]) : undefined,
    targetImpressionShareMicros: data["targetImpressionShareMicros"] !== undefined ? BigInt(data["targetImpressionShareMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type
 * TARGET_IMPRESSION_SHARE.
 */
export interface GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList {
  /**
   * Projected metrics for a specific target impression share value.
   */
  points?: GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPoint(item))) : undefined,
  };
}

/**
 * Settings for the targeting-related features, at the campaign and ad group
 * levels. For more details about the targeting setting, visit
 * https://support.google.com/google-ads/answer/7365594
 */
export interface GoogleAdsSearchads360V23Common__TargetingSetting {
  /**
   * The list of operations changing the target restrictions. Adding a target
   * restriction with a targeting dimension that already exists causes the
   * existing target restriction to be replaced with the new value.
   */
  targetRestrictionOperations?: GoogleAdsSearchads360V23Common__TargetRestrictionOperation[];
  /**
   * The per-targeting-dimension setting to restrict the reach of your campaign
   * or ad group.
   */
  targetRestrictions?: GoogleAdsSearchads360V23Common__TargetRestriction[];
}

/**
 * The list of per-targeting-dimension targeting settings.
 */
export interface GoogleAdsSearchads360V23Common__TargetRestriction {
  /**
   * Indicates whether to restrict your ads to show only for the criteria you
   * have selected for this targeting_dimension, or to target all values for
   * this targeting_dimension and show ads based on your targeting in other
   * TargetingDimensions. A value of `true` means that these criteria will only
   * apply bid modifiers, and not affect targeting. A value of `false` means
   * that these criteria will restrict targeting as well as applying bid
   * modifiers.
   */
  bidOnly?: boolean;
  /**
   * The targeting dimension that these settings apply to.
   */
  targetingDimension?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "AUDIENCE" | "TOPIC" | "GENDER" | "AGE_RANGE" | "PLACEMENT" | "PARENTAL_STATUS" | "INCOME_RANGE";
}

/**
 * Operation to be performed on a target restriction list in a mutate.
 */
export interface GoogleAdsSearchads360V23Common__TargetRestrictionOperation {
  /**
   * Type of list operation to perform.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "ADD" | "REMOVE";
  /**
   * The target restriction being added to or removed from the list.
   */
  value?: GoogleAdsSearchads360V23Common__TargetRestriction;
}

/**
 * An automated bidding strategy that helps you maximize revenue while
 * averaging a specific target return on ad spend (ROAS).
 */
export interface GoogleAdsSearchads360V23Common__TargetRoas {
  /**
   * Maximum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. This should only be set for
   * portfolio bid strategies.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Minimum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy. This should only be set for
   * portfolio bid strategies.
   */
  cpcBidFloorMicros?: bigint;
  /**
   * Required. The chosen revenue (based on conversion data) per unit of spend.
   * Value must be between 0.01 and 1000.0, inclusive.
   */
  targetRoas?: number;
  /**
   * The percent of ROAS(return on advertising spend) degradation tolerance
   * allowed to increase traffic diversity and conversion volume, specified in
   * millis (for example, 10,000 = 10%). A value of 10,000 means that the
   * advertiser can expect ROAS degradation of up to 10% of the specified target
   * ROAS. This field is only mutable for portfolio bidding strategies.
   */
  targetRoasTolerancePercentMillis?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetRoas(data: any): GoogleAdsSearchads360V23Common__TargetRoas {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? String(data["cpcBidFloorMicros"]) : undefined,
    targetRoasTolerancePercentMillis: data["targetRoasTolerancePercentMillis"] !== undefined ? String(data["targetRoasTolerancePercentMillis"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetRoas(data: any): GoogleAdsSearchads360V23Common__TargetRoas {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    cpcBidFloorMicros: data["cpcBidFloorMicros"] !== undefined ? BigInt(data["cpcBidFloorMicros"]) : undefined,
    targetRoasTolerancePercentMillis: data["targetRoasTolerancePercentMillis"] !== undefined ? BigInt(data["targetRoasTolerancePercentMillis"]) : undefined,
  };
}

/**
 * Projected metrics for a specific target ROAS amount.
 */
export interface GoogleAdsSearchads360V23Common__TargetRoasSimulationPoint {
  /**
   * Projected number of biddable conversions.
   */
  biddableConversions?: number;
  /**
   * Projected total value of biddable conversions.
   */
  biddableConversionsValue?: number;
  /**
   * Projected number of clicks.
   */
  clicks?: bigint;
  /**
   * Projected cost in micros.
   */
  costMicros?: bigint;
  /**
   * Projected number of impressions.
   */
  impressions?: bigint;
  /**
   * Projected required daily budget that the advertiser must set in order to
   * receive the estimated traffic, in micros of advertiser currency.
   */
  requiredBudgetAmountMicros?: bigint;
  /**
   * The simulated target ROAS upon which projected metrics are based.
   */
  targetRoas?: number;
  /**
   * Projected number of top slot impressions. Only Search advertising channel
   * type supports this field.
   */
  topSlotImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetRoasSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? String(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? String(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? String(data["requiredBudgetAmountMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? String(data["topSlotImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPoint(data: any): GoogleAdsSearchads360V23Common__TargetRoasSimulationPoint {
  return {
    ...data,
    clicks: data["clicks"] !== undefined ? BigInt(data["clicks"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    impressions: data["impressions"] !== undefined ? BigInt(data["impressions"]) : undefined,
    requiredBudgetAmountMicros: data["requiredBudgetAmountMicros"] !== undefined ? BigInt(data["requiredBudgetAmountMicros"]) : undefined,
    topSlotImpressions: data["topSlotImpressions"] !== undefined ? BigInt(data["topSlotImpressions"]) : undefined,
  };
}

/**
 * A container for simulation points for simulations of type TARGET_ROAS.
 */
export interface GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList {
  /**
   * Projected metrics for a series of target ROAS amounts.
   */
  points?: GoogleAdsSearchads360V23Common__TargetRoasSimulationPoint[];
}

function serializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPoint(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPointList(data: any): GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList {
  return {
    ...data,
    points: data["points"] !== undefined ? data["points"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__TargetRoasSimulationPoint(item))) : undefined,
  };
}

/**
 * An automated bid strategy that sets your bids to help get as many clicks as
 * possible within your budget.
 */
export interface GoogleAdsSearchads360V23Common__TargetSpend {
  /**
   * Maximum bid limit that can be set by the bid strategy. The limit applies
   * to all keywords managed by the strategy.
   */
  cpcBidCeilingMicros?: bigint;
  /**
   * Deprecated: The spend target under which to maximize clicks. A TargetSpend
   * bidder will attempt to spend the smaller of this value or the natural
   * throttling spend amount. If not specified, the budget is used as the spend
   * target. This field is deprecated and should no longer be used. See
   * https://ads-developers.googleblog.com/2020/05/reminder-about-sunset-creation-of.html
   * for details.
   */
  targetSpendMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__TargetSpend(data: any): GoogleAdsSearchads360V23Common__TargetSpend {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? String(data["cpcBidCeilingMicros"]) : undefined,
    targetSpendMicros: data["targetSpendMicros"] !== undefined ? String(data["targetSpendMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TargetSpend(data: any): GoogleAdsSearchads360V23Common__TargetSpend {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    targetSpendMicros: data["targetSpendMicros"] !== undefined ? BigInt(data["targetSpendMicros"]) : undefined,
  };
}

/**
 * A text ad.
 */
export interface GoogleAdsSearchads360V23Common__TextAdInfo {
  /**
   * The first line of the ad's description.
   */
  description1?: string;
  /**
   * The second line of the ad's description.
   */
  description2?: string;
  /**
   * The headline of the ad.
   */
  headline?: string;
}

/**
 * A Text asset.
 */
export interface GoogleAdsSearchads360V23Common__TextAsset {
  /**
   * Text content of the text asset.
   */
  text?: string;
}

/**
 * A type of label displaying text on a colored background.
 */
export interface GoogleAdsSearchads360V23Common__TextLabel {
  /**
   * Background color of the label in HEX format. This string must match the
   * regular expression '^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$'. Note: The
   * background color may not be visible for manager accounts.
   */
  backgroundColor?: string;
  /**
   * A short description of the label. The length must be no more than 200
   * characters.
   */
  description?: string;
}

/**
 * Contains third party measurement partner related data for video campaigns.
 */
export interface GoogleAdsSearchads360V23Common__ThirdPartyIntegrationPartnerData {
  /**
   * The client ID that allows the measurement partner to join multiple
   * campaigns for a particular advertiser.
   */
  clientId?: string;
  /**
   * The third party placement ID that maps the measurement partner data with a
   * campaign (or a group of related campaigns) specific data.
   */
  thirdPartyPlacementId?: string;
}

/**
 * A topic criterion. Use topics to target or exclude placements in the Google
 * Display Network based on the category into which the placement falls (for
 * example, "Pets & Animals/Pets/Dogs").
 */
export interface GoogleAdsSearchads360V23Common__TopicInfo {
  /**
   * The category to target or exclude. Each subsequent element in the array
   * describes a more specific sub-category. For example, "Pets & Animals",
   * "Pets", "Dogs" represents the "Pets & Animals/Pets/Dogs" category.
   */
  path?: string[];
  /**
   * The Topic Constant resource name.
   */
  topicConstant?: string;
}

/**
 * Attribute of the store sales transaction.
 */
export interface GoogleAdsSearchads360V23Common__TransactionAttribute {
  /**
   * The resource name of conversion action to report conversions to. Required.
   */
  conversionAction?: string;
  /**
   * Transaction currency code. ISO 4217 three-letter code is used. Required.
   */
  currencyCode?: string;
  /**
   * Value of the custom variable for each transaction. Allowed only if a
   * custom key is provided in the store sales metadata.
   */
  customValue?: string;
  /**
   * Item attributes of the transaction. Accessible only to customers on the
   * allow-list.
   */
  itemAttribute?: GoogleAdsSearchads360V23Common__ItemAttribute;
  /**
   * Transaction order id. Useful to group transactions which are part of the
   * same order.
   */
  orderId?: string;
  /**
   * Store attributes of the transaction.
   */
  storeAttribute?: GoogleAdsSearchads360V23Common__StoreAttribute;
  /**
   * Transaction amount in micros. Required. Transaction amount in micros needs
   * to be greater than 1000. If item Attributes are provided, it represents the
   * total value of the items, after multiplying the unit price per item by the
   * quantity provided in the ItemAttributes.
   */
  transactionAmountMicros?: number;
  /**
   * Timestamp when transaction occurred. Required. The format is "YYYY-MM-DD
   * HH:MM:SS[+/-HH:MM]", where [+/-HH:MM] is an optional timezone offset from
   * UTC. If the offset is absent, the API will use the account's timezone as
   * default. Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30+03:00"
   */
  transactionDateTime?: string;
}

function serializeGoogleAdsSearchads360V23Common__TransactionAttribute(data: any): GoogleAdsSearchads360V23Common__TransactionAttribute {
  return {
    ...data,
    itemAttribute: data["itemAttribute"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ItemAttribute(data["itemAttribute"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__TransactionAttribute(data: any): GoogleAdsSearchads360V23Common__TransactionAttribute {
  return {
    ...data,
    itemAttribute: data["itemAttribute"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ItemAttribute(data["itemAttribute"]) : undefined,
  };
}

/**
 * A travel ad.
 */
export interface GoogleAdsSearchads360V23Common__TravelAdInfo {
}

/**
 * A unified call asset.
 */
export interface GoogleAdsSearchads360V23Common__UnifiedCallAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * The conversion action to attribute a call conversion to. If not set, the
   * default conversion action is used. This field only has effect if
   * call_conversion_reporting_state is set to
   * USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION.
   */
  callConversionAction?: string;
  /**
   * Output only. Indicates whether this CallAsset should use its own call
   * conversion setting, follow the account level setting, or disable call
   * conversion.
   */
  readonly callConversionReportingState?:  | "UNSPECIFIED" | "UNKNOWN" | "DISABLED" | "USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION" | "USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION";
  /**
   * Whether the call only shows the phone number without a link to the
   * website. Applies to Microsoft Ads.
   */
  callOnly?: boolean;
  /**
   * Whether the call should be enabled on call tracking. Applies to Microsoft
   * Ads.
   */
  callTrackingEnabled?: boolean;
  /**
   * Two-letter country code of the phone number. Examples: 'US', 'us'.
   */
  countryCode?: string;
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * The advertiser's raw phone number. Examples: '1234567890', '(123)456-7890'
   */
  phoneNumber?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
  /**
   * Whether to show the call extension in search user's time zone. Applies to
   * Microsoft Ads.
   */
  useSearcherTimeZone?: boolean;
}

/**
 * A unified callout asset.
 */
export interface GoogleAdsSearchads360V23Common__UnifiedCalloutAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * The callout text. The length of this string should be between 1 and 25,
   * inclusive.
   */
  calloutText?: string;
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
  /**
   * Whether to show the asset in search user's time zone. Applies to Microsoft
   * Ads.
   */
  useSearcherTimeZone?: boolean;
}

/**
 * A unified location asset.
 */
export interface GoogleAdsSearchads360V23Common__UnifiedLocationAsset {
  /**
   * The list of business locations for the customer. This will only be
   * returned if the Location Asset is syncing from the Business Profile
   * account. It is possible to have multiple Business Profile listings under
   * the same account that point to the same Place ID.
   */
  businessProfileLocations?: GoogleAdsSearchads360V23Common__BusinessProfileLocation[];
  /**
   * The type of location ownership. If the type is BUSINESS_OWNER, it will be
   * served as a location extension. If the type is AFFILIATE, it will be served
   * as an affiliate location.
   */
  locationOwnershipType?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_OWNER" | "AFFILIATE";
  /**
   * Place IDs uniquely identify a place in the Google Places database and on
   * Google Maps. This field is unique for a given customer ID and asset type.
   * See https://developers.google.com/places/web-service/place-id to learn more
   * about Place ID.
   */
  placeId?: string;
}

function serializeGoogleAdsSearchads360V23Common__UnifiedLocationAsset(data: any): GoogleAdsSearchads360V23Common__UnifiedLocationAsset {
  return {
    ...data,
    businessProfileLocations: data["businessProfileLocations"] !== undefined ? data["businessProfileLocations"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UnifiedLocationAsset(data: any): GoogleAdsSearchads360V23Common__UnifiedLocationAsset {
  return {
    ...data,
    businessProfileLocations: data["businessProfileLocations"] !== undefined ? data["businessProfileLocations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocation(item))) : undefined,
  };
}

/**
 * A Unified Page Feed asset.
 */
export interface GoogleAdsSearchads360V23Common__UnifiedPageFeedAsset {
  /**
   * Labels used to group the page urls.
   */
  labels?: string[];
  /**
   * The webpage that advertisers want to target.
   */
  pageUrl?: string;
}

/**
 * A unified sitelink asset.
 */
export interface GoogleAdsSearchads360V23Common__UnifiedSitelinkAsset {
  /**
   * List of non-overlapping schedules specifying all time intervals for which
   * the asset may serve. There can be a maximum of 6 schedules per day, 42 in
   * total.
   */
  adScheduleTargets?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * First line of the description for the sitelink. If set, the length should
   * be between 1 and 35, inclusive, and description2 must also be set.
   */
  description1?: string;
  /**
   * Second line of the description for the sitelink. If set, the length should
   * be between 1 and 35, inclusive, and description1 must also be set.
   */
  description2?: string;
  /**
   * Last date of when this asset is effective and still serving, in yyyy-MM-dd
   * format.
   */
  endDate?: string;
  /**
   * URL display text for the sitelink. The length of this string should be
   * between 1 and 25, inclusive.
   */
  linkText?: string;
  /**
   * Whether the preference is for the sitelink asset to be displayed on mobile
   * devices. Applies to Microsoft Ads.
   */
  mobilePreferred?: boolean;
  /**
   * Start date of when this asset is effective and can begin serving, in
   * yyyy-MM-dd format.
   */
  startDate?: string;
  /**
   * ID used for tracking clicks for the sitelink asset. This is a Yahoo! Japan
   * only field.
   */
  trackingId?: bigint;
  /**
   * Whether to show the sitelink asset in search user's time zone. Applies to
   * Microsoft Ads.
   */
  useSearcherTimeZone?: boolean;
}

function serializeGoogleAdsSearchads360V23Common__UnifiedSitelinkAsset(data: any): GoogleAdsSearchads360V23Common__UnifiedSitelinkAsset {
  return {
    ...data,
    trackingId: data["trackingId"] !== undefined ? String(data["trackingId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UnifiedSitelinkAsset(data: any): GoogleAdsSearchads360V23Common__UnifiedSitelinkAsset {
  return {
    ...data,
    trackingId: data["trackingId"] !== undefined ? BigInt(data["trackingId"]) : undefined,
  };
}

/**
 * Unknown listing dimension.
 */
export interface GoogleAdsSearchads360V23Common__UnknownListingDimensionInfo {
}

/**
 * Collection of urls that is tagged with a unique identifier.
 */
export interface GoogleAdsSearchads360V23Common__UrlCollection {
  /**
   * A list of possible final mobile URLs.
   */
  finalMobileUrls?: string[];
  /**
   * A list of possible final URLs.
   */
  finalUrls?: string[];
  /**
   * URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Unique identifier for this UrlCollection instance.
   */
  urlCollectionId?: string;
}

/**
 * User attribute, can only be used with CUSTOMER_MATCH_WITH_ATTRIBUTES job
 * type.
 */
export interface GoogleAdsSearchads360V23Common__UserAttribute {
  /**
   * Timestamp when the user was acquired. The format is YYYY-MM-DD
   * HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from
   * UTC. If the offset is absent, the API will use the account's timezone as
   * default.
   */
  acquisitionDateTime?: string;
  /**
   * Advertiser defined average number of purchases that are made by the user
   * in a 30 day period.
   */
  averagePurchaseCount?: number;
  /**
   * Advertiser defined average purchase value in micros for the user.
   */
  averagePurchaseValueMicros?: bigint;
  /**
   * Optional. Advertiser defined events and their attributes. All the values
   * in the nested fields are required. Currently this field is in beta.
   */
  eventAttribute?: GoogleAdsSearchads360V23Common__EventAttribute[];
  /**
   * Optional. Timestamp of the first purchase made by the user. The format is
   * YYYY-MM-DD HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone
   * offset from UTC. If the offset is absent, the API will use the account's
   * timezone as default.
   */
  firstPurchaseDateTime?: string;
  /**
   * Timestamp of the last purchase made by the user. The format is YYYY-MM-DD
   * HH:MM:SS[+/-HH:MM], where [+/-HH:MM] is an optional timezone offset from
   * UTC. If the offset is absent, the API will use the account's timezone as
   * default.
   */
  lastPurchaseDateTime?: string;
  /**
   * Optional. Advertiser defined lifecycle stage for the user. The accepted
   * values are "Lead", "Active" and "Churned".
   */
  lifecycleStage?: string;
  /**
   * Advertiser defined lifetime value bucket for the user. The valid range for
   * a lifetime value bucket is from 1 (low) to 10 (high), except for remove
   * operation where 0 will also be accepted.
   */
  lifetimeValueBucket?: number;
  /**
   * Advertiser defined lifetime value for the user.
   */
  lifetimeValueMicros?: bigint;
  /**
   * The shopping loyalty related data. Shopping utilizes this data to provide
   * users with a better experience. Accessible only to merchants on the
   * allow-list with the user's consent.
   */
  shoppingLoyalty?: GoogleAdsSearchads360V23Common__ShoppingLoyalty;
}

function serializeGoogleAdsSearchads360V23Common__UserAttribute(data: any): GoogleAdsSearchads360V23Common__UserAttribute {
  return {
    ...data,
    averagePurchaseValueMicros: data["averagePurchaseValueMicros"] !== undefined ? String(data["averagePurchaseValueMicros"]) : undefined,
    lifetimeValueMicros: data["lifetimeValueMicros"] !== undefined ? String(data["lifetimeValueMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserAttribute(data: any): GoogleAdsSearchads360V23Common__UserAttribute {
  return {
    ...data,
    averagePurchaseValueMicros: data["averagePurchaseValueMicros"] !== undefined ? BigInt(data["averagePurchaseValueMicros"]) : undefined,
    lifetimeValueMicros: data["lifetimeValueMicros"] !== undefined ? BigInt(data["lifetimeValueMicros"]) : undefined,
  };
}

/**
 * User data holding user identifiers and attributes.
 */
export interface GoogleAdsSearchads360V23Common__UserData {
  /**
   * The consent setting for the user. If set, will override the job level
   * consent for this user.
   */
  consent?: GoogleAdsSearchads360V23Common__Consent;
  /**
   * Additional transactions/attributes associated with the user. Required when
   * updating store sales data.
   */
  transactionAttribute?: GoogleAdsSearchads360V23Common__TransactionAttribute;
  /**
   * Additional attributes associated with the user. Required when updating
   * customer match attributes. These have an expiration of 540 days.
   */
  userAttribute?: GoogleAdsSearchads360V23Common__UserAttribute;
  /**
   * User identification info.
   */
  userIdentifiers?: GoogleAdsSearchads360V23Common__UserIdentifier[];
}

function serializeGoogleAdsSearchads360V23Common__UserData(data: any): GoogleAdsSearchads360V23Common__UserData {
  return {
    ...data,
    transactionAttribute: data["transactionAttribute"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TransactionAttribute(data["transactionAttribute"]) : undefined,
    userAttribute: data["userAttribute"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserAttribute(data["userAttribute"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserData(data: any): GoogleAdsSearchads360V23Common__UserData {
  return {
    ...data,
    transactionAttribute: data["transactionAttribute"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TransactionAttribute(data["transactionAttribute"]) : undefined,
    userAttribute: data["userAttribute"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserAttribute(data["userAttribute"]) : undefined,
  };
}

/**
 * identifying information.
 */
export interface GoogleAdsSearchads360V23Common__UserIdentifier {
  /**
   * Address information.
   */
  addressInfo?: GoogleAdsSearchads360V23Common__OfflineUserAddressInfo;
  /**
   * Hashed email address using SHA-256 hash function after normalization.
   */
  hashedEmail?: string;
  /**
   * Hashed phone number using SHA-256 hash function after normalization (E164
   * standard).
   */
  hashedPhoneNumber?: string;
  /**
   * Mobile device ID (advertising ID/IDFA).
   */
  mobileId?: string;
  /**
   * Advertiser-assigned user ID for Customer Match upload, or
   * third-party-assigned user ID for
   */
  thirdPartyUserId?: string;
  /**
   * Source of the user identifier when the upload is from Store Sales
   */
  userIdentifierSource?:  | "UNSPECIFIED" | "UNKNOWN" | "FIRST_PARTY" | "THIRD_PARTY";
}

/**
 * Metadata associated with a User Interest attribute.
 */
export interface GoogleAdsSearchads360V23Common__UserInterestAttributeMetadata {
  /**
   * English language text description of the user interest category (200
   * characters max).
   */
  userInterestDescription?: string;
}

/**
 * Represents a particular interest-based topic to be targeted.
 */
export interface GoogleAdsSearchads360V23Common__UserInterestInfo {
  /**
   * The UserInterest resource name.
   */
  userInterestCategory?: string;
}

/**
 * User interest segment.
 */
export interface GoogleAdsSearchads360V23Common__UserInterestSegment {
  /**
   * The user interest resource.
   */
  userInterestCategory?: string;
}

/**
 * Represents an action type used for building remarketing user lists.
 */
export interface GoogleAdsSearchads360V23Common__UserListActionInfo {
  /**
   * A conversion action that's not generated from remarketing.
   */
  conversionAction?: string;
  /**
   * A remarketing action.
   */
  remarketingAction?: string;
}

/**
 * Metadata associated with a User List attribute.
 */
export interface GoogleAdsSearchads360V23Common__UserListAttributeMetadata {
  /**
   * The user list type.
   */
  userListType?:  | "UNSPECIFIED" | "UNKNOWN" | "REMARKETING" | "LOGICAL" | "EXTERNAL_REMARKETING" | "RULE_BASED" | "SIMILAR" | "CRM_BASED" | "LOOKALIKE";
}

/**
 * A rule item composed of a date operation.
 */
export interface GoogleAdsSearchads360V23Common__UserListDateRuleItemInfo {
  /**
   * The relative date value of the right hand side denoted by number of days
   * offset from now. The value field will override this field when both are
   * present.
   */
  offsetInDays?: bigint;
  /**
   * Date comparison operator. This field is required and must be populated
   * when creating new date rule item.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "EQUALS" | "NOT_EQUALS" | "BEFORE" | "AFTER";
  /**
   * String representing date value to be compared with the rule variable.
   * Supported date format is YYYY-MM-DD. Times are reported in the customer's
   * time zone.
   */
  value?: string;
}

function serializeGoogleAdsSearchads360V23Common__UserListDateRuleItemInfo(data: any): GoogleAdsSearchads360V23Common__UserListDateRuleItemInfo {
  return {
    ...data,
    offsetInDays: data["offsetInDays"] !== undefined ? String(data["offsetInDays"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserListDateRuleItemInfo(data: any): GoogleAdsSearchads360V23Common__UserListDateRuleItemInfo {
  return {
    ...data,
    offsetInDays: data["offsetInDays"] !== undefined ? BigInt(data["offsetInDays"]) : undefined,
  };
}

/**
 * A User List criterion. Represents a user list that is defined by the
 * advertiser to be targeted.
 */
export interface GoogleAdsSearchads360V23Common__UserListInfo {
  /**
   * The User List resource name.
   */
  userList?: string;
}

/**
 * A user list logical rule. A rule has a logical operator (and/or/not) and a
 * list of user lists as operands.
 */
export interface GoogleAdsSearchads360V23Common__UserListLogicalRuleInfo {
  /**
   * The logical operator of the rule.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL" | "ANY" | "NONE";
  /**
   * The list of operands of the rule.
   */
  ruleOperands?: GoogleAdsSearchads360V23Common__LogicalUserListOperandInfo[];
}

/**
 * A rule item composed of a number operation.
 */
export interface GoogleAdsSearchads360V23Common__UserListNumberRuleItemInfo {
  /**
   * Number comparison operator. This field is required and must be populated
   * when creating a new number rule item.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "GREATER_THAN" | "GREATER_THAN_OR_EQUAL" | "EQUALS" | "NOT_EQUALS" | "LESS_THAN" | "LESS_THAN_OR_EQUAL";
  /**
   * Number value to be compared with the variable. This field is required and
   * must be populated when creating a new number rule item.
   */
  value?: number;
}

/**
 * A client defined rule based on custom parameters sent by web sites or
 * uploaded by the advertiser.
 */
export interface GoogleAdsSearchads360V23Common__UserListRuleInfo {
  /**
   * List of rule item groups that defines this rule. Rule item groups are
   * grouped together based on rule_type.
   */
  ruleItemGroups?: GoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo[];
  /**
   * Rule type is used to determine how to group rule items. The default is OR
   * of ANDs (disjunctive normal form). That is, rule items will be ANDed
   * together within rule item groups and the groups themselves will be ORed
   * together. OR of ANDs is the only supported type for FlexibleRuleUserList.
   */
  ruleType?:  | "UNSPECIFIED" | "UNKNOWN" | "AND_OF_ORS" | "OR_OF_ANDS";
}

function serializeGoogleAdsSearchads360V23Common__UserListRuleInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleInfo {
  return {
    ...data,
    ruleItemGroups: data["ruleItemGroups"] !== undefined ? data["ruleItemGroups"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserListRuleInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleInfo {
  return {
    ...data,
    ruleItemGroups: data["ruleItemGroups"] !== undefined ? data["ruleItemGroups"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo(item))) : undefined,
  };
}

/**
 * A group of rule items.
 */
export interface GoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo {
  /**
   * Rule items that will be grouped together based on rule_type.
   */
  ruleItems?: GoogleAdsSearchads360V23Common__UserListRuleItemInfo[];
}

function serializeGoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo {
  return {
    ...data,
    ruleItems: data["ruleItems"] !== undefined ? data["ruleItems"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__UserListRuleItemInfo(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleItemGroupInfo {
  return {
    ...data,
    ruleItems: data["ruleItems"] !== undefined ? data["ruleItems"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__UserListRuleItemInfo(item))) : undefined,
  };
}

/**
 * An atomic rule item.
 */
export interface GoogleAdsSearchads360V23Common__UserListRuleItemInfo {
  /**
   * An atomic rule item composed of a date operation.
   */
  dateRuleItem?: GoogleAdsSearchads360V23Common__UserListDateRuleItemInfo;
  /**
   * Rule variable name. It should match the corresponding key name fired by
   * the pixel. A name must begin with US-ascii letters or underscore or UTF8
   * code that is greater than 127 and consist of US-ascii letters or digits or
   * underscore or UTF8 code that is greater than 127. For websites, there are
   * two built-in variable URL (name = 'url__') and referrer URL (name =
   * 'ref_url__'). This field must be populated when creating a new rule item.
   */
  name?: string;
  /**
   * An atomic rule item composed of a number operation.
   */
  numberRuleItem?: GoogleAdsSearchads360V23Common__UserListNumberRuleItemInfo;
  /**
   * An atomic rule item composed of a string operation.
   */
  stringRuleItem?: GoogleAdsSearchads360V23Common__UserListStringRuleItemInfo;
}

function serializeGoogleAdsSearchads360V23Common__UserListRuleItemInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleItemInfo {
  return {
    ...data,
    dateRuleItem: data["dateRuleItem"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserListDateRuleItemInfo(data["dateRuleItem"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__UserListRuleItemInfo(data: any): GoogleAdsSearchads360V23Common__UserListRuleItemInfo {
  return {
    ...data,
    dateRuleItem: data["dateRuleItem"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserListDateRuleItemInfo(data["dateRuleItem"]) : undefined,
  };
}

/**
 * User list segment.
 */
export interface GoogleAdsSearchads360V23Common__UserListSegment {
  /**
   * The user list resource.
   */
  userList?: string;
}

/**
 * A rule item composed of a string operation.
 */
export interface GoogleAdsSearchads360V23Common__UserListStringRuleItemInfo {
  /**
   * String comparison operator. This field is required and must be populated
   * when creating a new string rule item.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "CONTAINS" | "EQUALS" | "STARTS_WITH" | "ENDS_WITH" | "NOT_EQUALS" | "NOT_CONTAINS" | "NOT_STARTS_WITH" | "NOT_ENDS_WITH";
  /**
   * The right hand side of the string rule item. For URLs or referrer URLs,
   * the value can not contain illegal URL chars such as newlines, quotes, tabs,
   * or parentheses. This field is required and must be populated when creating
   * a new string rule item.
   */
  value?: string;
}

/**
 * A generic data container.
 */
export interface GoogleAdsSearchads360V23Common__Value {
  /**
   * A boolean.
   */
  booleanValue?: boolean;
  /**
   * A double.
   */
  doubleValue?: number;
  /**
   * A float.
   */
  floatValue?: number;
  /**
   * An int64.
   */
  int64Value?: bigint;
  /**
   * A string.
   */
  stringValue?: string;
}

function serializeGoogleAdsSearchads360V23Common__Value(data: any): GoogleAdsSearchads360V23Common__Value {
  return {
    ...data,
    int64Value: data["int64Value"] !== undefined ? String(data["int64Value"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__Value(data: any): GoogleAdsSearchads360V23Common__Value {
  return {
    ...data,
    int64Value: data["int64Value"] !== undefined ? BigInt(data["int64Value"]) : undefined,
  };
}

/**
 * A criterion to represent a single item group rule in Vertical Ads.
 */
export interface GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo {
  /**
   * The resource name of the Geo Target Constant for the city.
   */
  cityCriterionId?: string;
  /**
   * The resource name of the Geo Target Constant for the country.
   */
  countryCriterionId?: string;
  /**
   * Integer value specifying the class rating for a hotel. Ranges from 1 to 5
   * stars.
   */
  hotelClass?: bigint;
  /**
   * The id specifying a particular Vertical Ad listing.
   */
  itemCode?: string;
  /**
   * The resource name of the Geo Target Constant for the region.
   */
  regionCriterionId?: string;
}

function serializeGoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo(data: any): GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo {
  return {
    ...data,
    hotelClass: data["hotelClass"] !== undefined ? String(data["hotelClass"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo(data: any): GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo {
  return {
    ...data,
    hotelClass: data["hotelClass"] !== undefined ? BigInt(data["hotelClass"]) : undefined,
  };
}

/**
 * A criterion for targeting a shared set of rules for item groups in Vertical
 * Ads (e.g., for hotel ads).
 */
export interface GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleListInfo {
  /**
   * The shared set resource name of the vertical ads item group rule list.
   */
  sharedSet?: string;
}

/**
 * A Video lineup criterion.
 */
export interface GoogleAdsSearchads360V23Common__VideoLineupInfo {
  /**
   * ID for a Video lineup. Contact your Google business development
   * representative for details.
   */
  videoLineupId?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data: any): GoogleAdsSearchads360V23Common__VideoLineupInfo {
  return {
    ...data,
    videoLineupId: data["videoLineupId"] !== undefined ? String(data["videoLineupId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data: any): GoogleAdsSearchads360V23Common__VideoLineupInfo {
  return {
    ...data,
    videoLineupId: data["videoLineupId"] !== undefined ? BigInt(data["videoLineupId"]) : undefined,
  };
}

/**
 * Google notifies the advertiser of leads by making HTTP calls to an endpoint
 * they specify. The requests contain JSON matching a schema that Google
 * publishes as part of form ads documentation.
 */
export interface GoogleAdsSearchads360V23Common__WebhookDelivery {
  /**
   * Webhook url specified by advertiser to send the lead.
   */
  advertiserWebhookUrl?: string;
  /**
   * Anti-spoofing secret set by the advertiser as part of the webhook payload.
   */
  googleSecret?: string;
  /**
   * The schema version that this delivery instance will use.
   */
  payloadSchemaVersion?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__WebhookDelivery(data: any): GoogleAdsSearchads360V23Common__WebhookDelivery {
  return {
    ...data,
    payloadSchemaVersion: data["payloadSchemaVersion"] !== undefined ? String(data["payloadSchemaVersion"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__WebhookDelivery(data: any): GoogleAdsSearchads360V23Common__WebhookDelivery {
  return {
    ...data,
    payloadSchemaVersion: data["payloadSchemaVersion"] !== undefined ? BigInt(data["payloadSchemaVersion"]) : undefined,
  };
}

/**
 * Logical expression for targeting webpages of an advertiser's website.
 */
export interface GoogleAdsSearchads360V23Common__WebpageConditionInfo {
  /**
   * Argument of webpage targeting condition.
   */
  argument?: string;
  /**
   * Operand of webpage targeting condition.
   */
  operand?:  | "UNSPECIFIED" | "UNKNOWN" | "URL" | "CATEGORY" | "PAGE_TITLE" | "PAGE_CONTENT" | "CUSTOM_LABEL";
  /**
   * Operator of webpage targeting condition.
   */
  operator?:  | "UNSPECIFIED" | "UNKNOWN" | "EQUALS" | "CONTAINS";
}

/**
 * Represents a criterion for targeting webpages of an advertiser's website.
 */
export interface GoogleAdsSearchads360V23Common__WebpageInfo {
  /**
   * Conditions, or logical expressions, for webpage targeting. The list of
   * webpage targeting conditions are and-ed together when evaluated for
   * targeting. An empty list of conditions indicates all pages of the
   * campaign's website are targeted. This field is required for CREATE
   * operations and is prohibited on UPDATE operations.
   */
  conditions?: GoogleAdsSearchads360V23Common__WebpageConditionInfo[];
  /**
   * Website criteria coverage percentage. This is the computed percentage of
   * website coverage based on the website target, negative website target and
   * negative keywords in the ad group and campaign. For instance, when coverage
   * returns as 1, it indicates it has 100% coverage. This field is read-only.
   */
  coveragePercentage?: number;
  /**
   * The name of the criterion that is defined by this parameter. The name
   * value will be used for identifying, sorting and filtering criteria with
   * this type of parameters. This field is required for CREATE operations and
   * is prohibited on UPDATE operations.
   */
  criterionName?: string;
  /**
   * List of sample urls that match the website target. This field is
   * read-only.
   */
  sample?: GoogleAdsSearchads360V23Common__WebpageSampleInfo;
}

/**
 * Represents a list of webpage criteria.
 */
export interface GoogleAdsSearchads360V23Common__WebpageListInfo {
  /**
   * Shared set resource name of the webpage list.
   */
  sharedSet?: string;
}

/**
 * List of sample urls that match the website target
 */
export interface GoogleAdsSearchads360V23Common__WebpageSampleInfo {
  /**
   * Webpage sample urls
   */
  sampleUrls?: string[];
}

/**
 * Whatsapp information to use for messaging.
 */
export interface GoogleAdsSearchads360V23Common__WhatsappBusinessMessageInfo {
  /**
   * Required. Two-letter country code of the phone number. Examples: 'US',
   * 'us'.
   */
  countryCode?: string;
  /**
   * Required. Whatsapp phone number of the business. Examples: '1234567890',
   * '(123)456-7890'.
   */
  phoneNumber?: string;
}

/**
 * Year month.
 */
export interface GoogleAdsSearchads360V23Common__YearMonth {
  /**
   * The month of the year. (for example, FEBRUARY).
   */
  month?:  | "UNSPECIFIED" | "UNKNOWN" | "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER";
  /**
   * The year (for example, 2020).
   */
  year?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__YearMonth(data: any): GoogleAdsSearchads360V23Common__YearMonth {
  return {
    ...data,
    year: data["year"] !== undefined ? String(data["year"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__YearMonth(data: any): GoogleAdsSearchads360V23Common__YearMonth {
  return {
    ...data,
    year: data["year"] !== undefined ? BigInt(data["year"]) : undefined,
  };
}

/**
 * The year month range inclusive of the start and end months. Eg: A year month
 * range to represent Jan 2020 would be: (Jan 2020, Jan 2020).
 */
export interface GoogleAdsSearchads360V23Common__YearMonthRange {
  /**
   * The inclusive end year month.
   */
  end?: GoogleAdsSearchads360V23Common__YearMonth;
  /**
   * The inclusive start year month.
   */
  start?: GoogleAdsSearchads360V23Common__YearMonth;
}

function serializeGoogleAdsSearchads360V23Common__YearMonthRange(data: any): GoogleAdsSearchads360V23Common__YearMonthRange {
  return {
    ...data,
    end: data["end"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YearMonth(data["end"]) : undefined,
    start: data["start"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YearMonth(data["start"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__YearMonthRange(data: any): GoogleAdsSearchads360V23Common__YearMonthRange {
  return {
    ...data,
    end: data["end"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YearMonth(data["end"]) : undefined,
    start: data["start"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YearMonth(data["start"]) : undefined,
  };
}

/**
 * Metadata associated with a YouTube channel attribute.
 */
export interface GoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata {
  /**
   * The approximate number of subscribers to the YouTube channel.
   */
  subscriberCount?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata {
  return {
    ...data,
    subscriberCount: data["subscriberCount"] !== undefined ? String(data["subscriberCount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata {
  return {
    ...data,
    subscriberCount: data["subscriberCount"] !== undefined ? BigInt(data["subscriberCount"]) : undefined,
  };
}

/**
 * A YouTube Channel criterion.
 */
export interface GoogleAdsSearchads360V23Common__YouTubeChannelInfo {
  /**
   * The YouTube uploader channel id or the channel code of a YouTube channel.
   */
  channelId?: string;
}

/**
 * A YouTube asset.
 */
export interface GoogleAdsSearchads360V23Common__YoutubeVideoAsset {
  /**
   * YouTube video id. This is the 11 character string value used in the
   * YouTube video URL.
   */
  youtubeVideoId?: string;
  /**
   * YouTube video title.
   */
  youtubeVideoTitle?: string;
}

/**
 * Metadata for a YouTube video attribute.
 */
export interface GoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata {
  /**
   * The total number of comments.
   */
  commentsCount?: bigint;
  /**
   * The total number of likes.
   */
  likesCount?: bigint;
  /**
   * The date that the video was created. Formatted as "yyyy-mm-dd".
   */
  publishDate?: string;
  /**
   * The URL of the video thumbnail, prefixed by "https://img.youtube.com/".
   */
  thumbnailUrl?: string;
  /**
   * The properties of this video (such as shorts, live stream).
   */
  videoProperties?:  | "UNSPECIFIED" | "UNKNOWN" | "LIVE_STREAM" | "SHORTS"[];
  /**
   * The URL of the video, prefixed by "https://www.youtube.com/".
   */
  videoUrl?: string;
  /**
   * The total number of views.
   */
  viewsCount?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata {
  return {
    ...data,
    commentsCount: data["commentsCount"] !== undefined ? String(data["commentsCount"]) : undefined,
    likesCount: data["likesCount"] !== undefined ? String(data["likesCount"]) : undefined,
    viewsCount: data["viewsCount"] !== undefined ? String(data["viewsCount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata(data: any): GoogleAdsSearchads360V23Common__YouTubeVideoAttributeMetadata {
  return {
    ...data,
    commentsCount: data["commentsCount"] !== undefined ? BigInt(data["commentsCount"]) : undefined,
    likesCount: data["likesCount"] !== undefined ? BigInt(data["likesCount"]) : undefined,
    viewsCount: data["viewsCount"] !== undefined ? BigInt(data["viewsCount"]) : undefined,
  };
}

/**
 * A YouTube Video criterion.
 */
export interface GoogleAdsSearchads360V23Common__YouTubeVideoInfo {
  /**
   * YouTube video id as it appears on the YouTube watch page.
   */
  videoId?: string;
}

/**
 * Zalo information to use for messaging.
 */
export interface GoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo {
  /**
   * Custom name generated by the advertiser for their Zalo Account. These
   * names will usually be registered brands or trademarks.
   */
  customName?: string;
  /**
   * Zalo Official Account ID of the advertiser.
   */
  oaId?: bigint;
}

function serializeGoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo(data: any): GoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo {
  return {
    ...data,
    oaId: data["oaId"] !== undefined ? String(data["oaId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo(data: any): GoogleAdsSearchads360V23Common__ZaloBusinessMessageInfo {
  return {
    ...data,
    oaId: data["oaId"] !== undefined ? BigInt(data["oaId"]) : undefined,
  };
}

/**
 * Retention campaign goal settings.
 */
export interface GoogleAdsSearchads360V23Common_CampaignGoalSettings_CampaignRetentionGoalSettings {
  /**
   * Retention goal optimization mode for this campaign. Defaults to
   * TARGET_ALL. Only customers on the allowlist can set target_option.
   */
  targetOption?:  | "UNSPECIFIED" | "UNKNOWN" | "TARGET_ALL" | "TARGET_SPECIFIC";
  /**
   * Retention goal campaign specific value settings.
   */
  valueSettingsOverride?: GoogleAdsSearchads360V23Common__CustomerLifecycleOptimizationValueSettings;
}

/**
 * Retention goal settings.
 */
export interface GoogleAdsSearchads360V23Common_GoalSetting_RetentionGoal {
  /**
   * Retention goal value settings.
   */
  valueSettings?: GoogleAdsSearchads360V23Common__CustomerLifecycleOptimizationValueSettings;
}

/**
 * A YouTube channel returned as an example of the content in a lineup.
 */
export interface GoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel {
  /**
   * The name of the sample channel.
   */
  displayName?: string;
  /**
   * A YouTube channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * Metadata for the sample channel.
   */
  youtubeChannelMetadata?: GoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata;
}

function serializeGoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel(data: any): GoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel {
  return {
    ...data,
    youtubeChannelMetadata: data["youtubeChannelMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data["youtubeChannelMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel(data: any): GoogleAdsSearchads360V23Common_LineupAttributeMetadata_SampleChannel {
  return {
    ...data,
    youtubeChannelMetadata: data["youtubeChannelMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__YouTubeChannelAttributeMetadata(data["youtubeChannelMetadata"]) : undefined,
  };
}

/**
 * Indicates that a resource's ability to serve in a particular country is
 * constrained.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraint {
  /**
   * Geo target constant resource name of the country in which serving is
   * constrained.
   */
  countryCriterion?: string;
}

/**
 * A list of countries where a resource's serving is constrained.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraintList {
  /**
   * Countries in which serving is restricted.
   */
  countries?: GoogleAdsSearchads360V23Common_PolicyTopicConstraint_CountryConstraint[];
  /**
   * Total number of countries targeted by the resource.
   */
  totalTargetedCountries?: number;
}

/**
 * Indicates that a policy topic was constrained due to disapproval of the
 * website for reseller purposes.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicConstraint_ResellerConstraint {
}

/**
 * Evidence of mismatches between the URLs of a resource.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationMismatch {
  /**
   * The set of URLs that did not match each other.
   */
  urlTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "DISPLAY_URL" | "FINAL_URL" | "FINAL_MOBILE_URL" | "TRACKING_URL" | "MOBILE_TRACKING_URL"[];
}

/**
 * Evidence details when the destination is returning an HTTP error code or
 * isn't functional in all locations for commonly used devices.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking {
  /**
   * The type of device that failed to load the URL.
   */
  device?:  | "UNSPECIFIED" | "UNKNOWN" | "DESKTOP" | "ANDROID" | "IOS";
  /**
   * The type of DNS error.
   */
  dnsErrorType?:  | "UNSPECIFIED" | "UNKNOWN" | "HOSTNAME_NOT_FOUND" | "GOOGLE_CRAWLER_DNS_ISSUE";
  /**
   * The full URL that didn't work.
   */
  expandedUrl?: string;
  /**
   * The HTTP error code.
   */
  httpErrorCode?: bigint;
  /**
   * The time the URL was last checked. The format is "YYYY-MM-DD HH:MM:SS".
   * Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  lastCheckedDateTime?: string;
}

function serializeGoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking(data: any): GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking {
  return {
    ...data,
    httpErrorCode: data["httpErrorCode"] !== undefined ? String(data["httpErrorCode"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking(data: any): GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationNotWorking {
  return {
    ...data,
    httpErrorCode: data["httpErrorCode"] !== undefined ? BigInt(data["httpErrorCode"]) : undefined,
  };
}

/**
 * A list of strings found in a destination page that caused a policy finding.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicEvidence_DestinationTextList {
  /**
   * List of text found in the resource's destination page.
   */
  destinationTexts?: string[];
}

/**
 * A list of fragments of text that violated a policy.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicEvidence_TextList {
  /**
   * The fragments of text from the resource that caused the policy finding.
   */
  texts?: string[];
}

/**
 * A list of websites that caused a policy finding. Used for
 * ONE_WEBSITE_PER_AD_GROUP policy topic, for example. In case there are more
 * than five websites, only the top five (those that appear in resources the
 * most) will be listed here.
 */
export interface GoogleAdsSearchads360V23Common_PolicyTopicEvidence_WebsiteList {
  /**
   * Websites that caused the policy finding.
   */
  websites?: string[];
}

/**
 * Error details for a budget below per-day minimum error.
 */
export interface GoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails {
  /**
   * The minimum budget required by the campaign per day, in micros of the
   * advertiser currency. Applies to both daily and custom budgets.
   */
  budgetPerDayMinimumMicros?: bigint;
  /**
   * The advertiser's currency, represented as a three-letter ISO 4217 currency
   * code (such as "USD").
   */
  currencyCode?: string;
  /**
   * The budget amount value that was rejected as too low, in micros of the
   * advertiser currency. Only set if this error is caused by the amount field
   * value.
   */
  failedBudgetAmountMicros?: bigint;
  /**
   * The budget total_amount value that was rejected as too low, in micros of
   * the advertiser currency. Only set if this error is caused by the
   * total_amount field value.
   */
  failedBudgetTotalAmountMicros?: bigint;
  /**
   * The minimum value for the budget's amount field required by the campaign,
   * in micros of the advertiser currency. Only set if this error is caused by
   * the amount field value.
   */
  minimumBudgetAmountMicros?: bigint;
  /**
   * The minimum value for the budget's total_amount field required by the
   * campaign given its configured start and end time, in micros of the
   * advertiser currency. Only set if this error is caused by the total_amount
   * field value.
   */
  minimumBudgetTotalAmountMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails(data: any): GoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails {
  return {
    ...data,
    budgetPerDayMinimumMicros: data["budgetPerDayMinimumMicros"] !== undefined ? String(data["budgetPerDayMinimumMicros"]) : undefined,
    failedBudgetAmountMicros: data["failedBudgetAmountMicros"] !== undefined ? String(data["failedBudgetAmountMicros"]) : undefined,
    failedBudgetTotalAmountMicros: data["failedBudgetTotalAmountMicros"] !== undefined ? String(data["failedBudgetTotalAmountMicros"]) : undefined,
    minimumBudgetAmountMicros: data["minimumBudgetAmountMicros"] !== undefined ? String(data["minimumBudgetAmountMicros"]) : undefined,
    minimumBudgetTotalAmountMicros: data["minimumBudgetTotalAmountMicros"] !== undefined ? String(data["minimumBudgetTotalAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails(data: any): GoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails {
  return {
    ...data,
    budgetPerDayMinimumMicros: data["budgetPerDayMinimumMicros"] !== undefined ? BigInt(data["budgetPerDayMinimumMicros"]) : undefined,
    failedBudgetAmountMicros: data["failedBudgetAmountMicros"] !== undefined ? BigInt(data["failedBudgetAmountMicros"]) : undefined,
    failedBudgetTotalAmountMicros: data["failedBudgetTotalAmountMicros"] !== undefined ? BigInt(data["failedBudgetTotalAmountMicros"]) : undefined,
    minimumBudgetAmountMicros: data["minimumBudgetAmountMicros"] !== undefined ? BigInt(data["minimumBudgetAmountMicros"]) : undefined,
    minimumBudgetTotalAmountMicros: data["minimumBudgetTotalAmountMicros"] !== undefined ? BigInt(data["minimumBudgetTotalAmountMicros"]) : undefined,
  };
}

/**
 * The error reason represented by type and enum.
 */
export interface GoogleAdsSearchads360V23Errors__ErrorCode {
  /**
   * The reasons for the access invitation error
   */
  accessInvitationError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_EMAIL_ADDRESS" | "EMAIL_ADDRESS_ALREADY_HAS_ACCESS" | "INVALID_INVITATION_STATUS" | "GOOGLE_CONSUMER_ACCOUNT_NOT_ALLOWED" | "INVALID_INVITATION_ID" | "EMAIL_ADDRESS_ALREADY_HAS_PENDING_INVITATION" | "PENDING_INVITATIONS_LIMIT_EXCEEDED" | "EMAIL_DOMAIN_POLICY_VIOLATED";
  /**
   * The reasons for account budget proposal errors.
   */
  accountBudgetProposalError?:  | "UNSPECIFIED" | "UNKNOWN" | "FIELD_MASK_NOT_ALLOWED" | "IMMUTABLE_FIELD" | "REQUIRED_FIELD_MISSING" | "CANNOT_CANCEL_APPROVED_PROPOSAL" | "CANNOT_REMOVE_UNAPPROVED_BUDGET" | "CANNOT_REMOVE_RUNNING_BUDGET" | "CANNOT_END_UNAPPROVED_BUDGET" | "CANNOT_END_INACTIVE_BUDGET" | "BUDGET_NAME_REQUIRED" | "CANNOT_UPDATE_OLD_BUDGET" | "CANNOT_END_IN_PAST" | "CANNOT_EXTEND_END_TIME" | "PURCHASE_ORDER_NUMBER_REQUIRED" | "PENDING_UPDATE_PROPOSAL_EXISTS" | "MULTIPLE_BUDGETS_NOT_ALLOWED_FOR_UNAPPROVED_BILLING_SETUP" | "CANNOT_UPDATE_START_TIME_FOR_STARTED_BUDGET" | "SPENDING_LIMIT_LOWER_THAN_ACCRUED_COST_NOT_ALLOWED" | "UPDATE_IS_NO_OP" | "END_TIME_MUST_FOLLOW_START_TIME" | "BUDGET_DATE_RANGE_INCOMPATIBLE_WITH_BILLING_SETUP" | "NOT_AUTHORIZED" | "INVALID_BILLING_SETUP" | "OVERLAPS_EXISTING_BUDGET" | "CANNOT_CREATE_BUDGET_THROUGH_API" | "INVALID_MASTER_SERVICE_AGREEMENT" | "CANCELED_BILLING_SETUP";
  /**
   * The reasons for the account link status change error
   */
  accountLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_STATUS" | "PERMISSION_DENIED";
  /**
   * The reasons for the ad customizer error
   */
  adCustomizerError?:  | "UNSPECIFIED" | "UNKNOWN" | "COUNTDOWN_INVALID_DATE_FORMAT" | "COUNTDOWN_DATE_IN_PAST" | "COUNTDOWN_INVALID_LOCALE" | "COUNTDOWN_INVALID_START_DAYS_BEFORE" | "UNKNOWN_USER_LIST";
  /**
   * An error with an Ad Group Ad mutate.
   */
  adError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_CUSTOMIZERS_NOT_SUPPORTED_FOR_AD_TYPE" | "APPROXIMATELY_TOO_LONG" | "APPROXIMATELY_TOO_SHORT" | "BAD_SNIPPET" | "CANNOT_MODIFY_AD" | "CANNOT_SET_BUSINESS_NAME_IF_URL_SET" | "CANNOT_SET_FIELD" | "CANNOT_SET_FIELD_WITH_ORIGIN_AD_ID_SET" | "CANNOT_SET_FIELD_WITH_AD_ID_SET_FOR_SHARING" | "CANNOT_SET_ALLOW_FLEXIBLE_COLOR_FALSE" | "CANNOT_SET_COLOR_CONTROL_WHEN_NATIVE_FORMAT_SETTING" | "CANNOT_SET_URL" | "CANNOT_SET_WITHOUT_FINAL_URLS" | "CANNOT_SET_WITH_FINAL_URLS" | "CANNOT_SET_WITH_URL_DATA" | "CANNOT_USE_AD_SUBCLASS_FOR_OPERATOR" | "CUSTOMER_NOT_APPROVED_MOBILEADS" | "CUSTOMER_NOT_APPROVED_THIRDPARTY_ADS" | "CUSTOMER_NOT_APPROVED_THIRDPARTY_REDIRECT_ADS" | "CUSTOMER_NOT_ELIGIBLE" | "CUSTOMER_NOT_ELIGIBLE_FOR_UPDATING_BEACON_URL" | "DIMENSION_ALREADY_IN_UNION" | "DIMENSION_MUST_BE_SET" | "DIMENSION_NOT_IN_UNION" | "DISPLAY_URL_CANNOT_BE_SPECIFIED" | "DOMESTIC_PHONE_NUMBER_FORMAT" | "EMERGENCY_PHONE_NUMBER" | "EMPTY_FIELD" | "FEED_ATTRIBUTE_MUST_HAVE_MAPPING_FOR_TYPE_ID" | "FEED_ATTRIBUTE_MAPPING_TYPE_MISMATCH" | "ILLEGAL_AD_CUSTOMIZER_TAG_USE" | "ILLEGAL_TAG_USE" | "INCONSISTENT_DIMENSIONS" | "INCONSISTENT_STATUS_IN_TEMPLATE_UNION" | "INCORRECT_LENGTH" | "INELIGIBLE_FOR_UPGRADE" | "INVALID_AD_ADDRESS_CAMPAIGN_TARGET" | "INVALID_AD_TYPE" | "INVALID_ATTRIBUTES_FOR_MOBILE_IMAGE" | "INVALID_ATTRIBUTES_FOR_MOBILE_TEXT" | "INVALID_CALL_TO_ACTION_TEXT" | "INVALID_CHARACTER_FOR_URL" | "INVALID_COUNTRY_CODE" | "INVALID_EXPANDED_DYNAMIC_SEARCH_AD_TAG" | "INVALID_INPUT" | "INVALID_MARKUP_LANGUAGE" | "INVALID_MOBILE_CARRIER" | "INVALID_MOBILE_CARRIER_TARGET" | "INVALID_NUMBER_OF_ELEMENTS" | "INVALID_PHONE_NUMBER_FORMAT" | "INVALID_RICH_MEDIA_CERTIFIED_VENDOR_FORMAT_ID" | "INVALID_TEMPLATE_DATA" | "INVALID_TEMPLATE_ELEMENT_FIELD_TYPE" | "INVALID_TEMPLATE_ID" | "LINE_TOO_WIDE" | "MISSING_AD_CUSTOMIZER_MAPPING" | "MISSING_ADDRESS_COMPONENT" | "MISSING_ADVERTISEMENT_NAME" | "MISSING_BUSINESS_NAME" | "MISSING_DESCRIPTION1" | "MISSING_DESCRIPTION2" | "MISSING_DESTINATION_URL_TAG" | "MISSING_LANDING_PAGE_URL_TAG" | "MISSING_DIMENSION" | "MISSING_DISPLAY_URL" | "MISSING_HEADLINE" | "MISSING_HEIGHT" | "MISSING_IMAGE" | "MISSING_MARKETING_IMAGE_OR_PRODUCT_VIDEOS" | "MISSING_MARKUP_LANGUAGES" | "MISSING_MOBILE_CARRIER" | "MISSING_PHONE" | "MISSING_REQUIRED_TEMPLATE_FIELDS" | "MISSING_TEMPLATE_FIELD_VALUE" | "MISSING_TEXT" | "MISSING_VISIBLE_URL" | "MISSING_WIDTH" | "MULTIPLE_DISTINCT_FEEDS_UNSUPPORTED" | "MUST_USE_TEMP_AD_UNION_ID_ON_ADD" | "TOO_LONG" | "TOO_SHORT" | "UNION_DIMENSIONS_CANNOT_CHANGE" | "UNKNOWN_ADDRESS_COMPONENT" | "UNKNOWN_FIELD_NAME" | "UNKNOWN_UNIQUE_NAME" | "UNSUPPORTED_DIMENSIONS" | "URL_INVALID_SCHEME" | "URL_INVALID_TOP_LEVEL_DOMAIN" | "URL_MALFORMED" | "URL_NO_HOST" | "URL_NOT_EQUIVALENT" | "URL_HOST_NAME_TOO_LONG" | "URL_NO_SCHEME" | "URL_NO_TOP_LEVEL_DOMAIN" | "URL_PATH_NOT_ALLOWED" | "URL_PORT_NOT_ALLOWED" | "URL_QUERY_NOT_ALLOWED" | "URL_SCHEME_BEFORE_EXPANDED_DYNAMIC_SEARCH_AD_TAG" | "USER_DOES_NOT_HAVE_ACCESS_TO_TEMPLATE" | "INCONSISTENT_EXPANDABLE_SETTINGS" | "INVALID_FORMAT" | "INVALID_FIELD_TEXT" | "ELEMENT_NOT_PRESENT" | "IMAGE_ERROR" | "VALUE_NOT_IN_RANGE" | "FIELD_NOT_PRESENT" | "ADDRESS_NOT_COMPLETE" | "ADDRESS_INVALID" | "VIDEO_RETRIEVAL_ERROR" | "AUDIO_ERROR" | "INVALID_YOUTUBE_DISPLAY_URL" | "TOO_MANY_PRODUCT_IMAGES" | "TOO_MANY_PRODUCT_VIDEOS" | "INCOMPATIBLE_AD_TYPE_AND_DEVICE_PREFERENCE" | "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY" | "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED" | "DISALLOWED_NUMBER_TYPE" | "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY" | "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY" | "PREMIUM_RATE_NUMBER_NOT_ALLOWED" | "VANITY_PHONE_NUMBER_NOT_ALLOWED" | "INVALID_CALL_CONVERSION_TYPE_ID" | "CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID" | "CANNOT_SET_PATH2_WITHOUT_PATH1" | "MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME" | "INCOMPATIBLE_WITH_RESTRICTION_TYPE" | "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED" | "MISSING_IMAGE_OR_MEDIA_BUNDLE" | "PRODUCT_TYPE_NOT_SUPPORTED_IN_THIS_CAMPAIGN" | "PLACEHOLDER_CANNOT_HAVE_EMPTY_DEFAULT_VALUE" | "PLACEHOLDER_COUNTDOWN_FUNCTION_CANNOT_HAVE_DEFAULT_VALUE" | "PLACEHOLDER_DEFAULT_VALUE_MISSING" | "UNEXPECTED_PLACEHOLDER_DEFAULT_VALUE" | "AD_CUSTOMIZERS_MAY_NOT_BE_ADJACENT" | "UPDATING_AD_WITH_NO_ENABLED_ASSOCIATION" | "CALL_AD_VERIFICATION_URL_FINAL_URL_DOES_NOT_HAVE_SAME_DOMAIN" | "CALL_AD_FINAL_URL_AND_VERIFICATION_URL_CANNOT_BOTH_BE_EMPTY" | "TOO_MANY_AD_CUSTOMIZERS" | "INVALID_AD_CUSTOMIZER_FORMAT" | "NESTED_AD_CUSTOMIZER_SYNTAX" | "UNSUPPORTED_AD_CUSTOMIZER_SYNTAX" | "UNPAIRED_BRACE_IN_AD_CUSTOMIZER_TAG" | "MORE_THAN_ONE_COUNTDOWN_TAG_TYPE_EXISTS" | "DATE_TIME_IN_COUNTDOWN_TAG_IS_INVALID" | "DATE_TIME_IN_COUNTDOWN_TAG_IS_PAST" | "UNRECOGNIZED_AD_CUSTOMIZER_TAG_FOUND" | "CUSTOMIZER_TYPE_FORBIDDEN_FOR_FIELD" | "INVALID_CUSTOMIZER_ATTRIBUTE_NAME" | "STORE_MISMATCH" | "MISSING_REQUIRED_IMAGE_ASPECT_RATIO" | "MISMATCHED_ASPECT_RATIOS" | "DUPLICATE_IMAGE_ACROSS_CAROUSEL_CARDS" | "INVALID_YOUTUBE_VIDEO_ASSET_ID_FOR_VIDEO_ADS_SEQUENCING";
  /**
   * The reasons for the ad group ad error
   */
  adGroupAdError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_AD_LABEL_DOES_NOT_EXIST" | "AD_GROUP_AD_LABEL_ALREADY_EXISTS" | "AD_NOT_UNDER_ADGROUP" | "CANNOT_OPERATE_ON_REMOVED_ADGROUPAD" | "CANNOT_CREATE_DEPRECATED_ADS" | "CANNOT_CREATE_TEXT_ADS" | "EMPTY_FIELD" | "RESOURCE_REFERENCED_IN_MULTIPLE_OPS" | "AD_TYPE_CANNOT_BE_PAUSED" | "AD_TYPE_CANNOT_BE_REMOVED" | "CANNOT_UPDATE_DEPRECATED_ADS" | "AD_SHARING_NOT_ALLOWED";
  /**
   * The reasons for the ad group bid modifier error
   */
  adGroupBidModifierError?:  | "UNSPECIFIED" | "UNKNOWN" | "CRITERION_ID_NOT_SUPPORTED" | "CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER";
  /**
   * The reasons for the ad group criterion customizer error.
   */
  adGroupCriterionCustomizerError?:  | "UNSPECIFIED" | "UNKNOWN" | "CRITERION_IS_NOT_KEYWORD";
  /**
   * Indicates failure to properly authenticate user.
   */
  adGroupCriterionError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_CRITERION_LABEL_DOES_NOT_EXIST" | "AD_GROUP_CRITERION_LABEL_ALREADY_EXISTS" | "CANNOT_ADD_LABEL_TO_NEGATIVE_CRITERION" | "TOO_MANY_OPERATIONS" | "CANT_UPDATE_NEGATIVE" | "CONCRETE_TYPE_REQUIRED" | "BID_INCOMPATIBLE_WITH_ADGROUP" | "CANNOT_TARGET_AND_EXCLUDE" | "ILLEGAL_URL" | "INVALID_KEYWORD_TEXT" | "INVALID_DESTINATION_URL" | "MISSING_DESTINATION_URL_TAG" | "KEYWORD_LEVEL_BID_NOT_SUPPORTED_FOR_MANUALCPM" | "INVALID_USER_STATUS" | "CANNOT_ADD_CRITERIA_TYPE" | "CANNOT_EXCLUDE_CRITERIA_TYPE" | "CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE" | "OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS" | "CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS" | "CANNOT_SET_WITHOUT_FINAL_URLS" | "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_MOBILE_URLS_EXIST" | "CANNOT_CLEAR_FINAL_URLS_IF_FINAL_APP_URLS_EXIST" | "CANNOT_CLEAR_FINAL_URLS_IF_TRACKING_URL_TEMPLATE_EXISTS" | "CANNOT_CLEAR_FINAL_URLS_IF_URL_CUSTOM_PARAMETERS_EXIST" | "CANNOT_SET_BOTH_DESTINATION_URL_AND_FINAL_URLS" | "CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE" | "FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE" | "FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE";
  /**
   * The reasons for the ad group customizer error.
   */
  adGroupCustomizerError?:  | "UNSPECIFIED" | "UNKNOWN";
  /**
   * An error with an Ad Group mutate.
   */
  adGroupError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_ADGROUP_NAME" | "INVALID_ADGROUP_NAME" | "ADVERTISER_NOT_ON_CONTENT_NETWORK" | "BID_TOO_BIG" | "BID_TYPE_AND_BIDDING_STRATEGY_MISMATCH" | "MISSING_ADGROUP_NAME" | "ADGROUP_LABEL_DOES_NOT_EXIST" | "ADGROUP_LABEL_ALREADY_EXISTS" | "INVALID_CONTENT_BID_CRITERION_TYPE_GROUP" | "AD_GROUP_TYPE_NOT_VALID_FOR_ADVERTISING_CHANNEL_TYPE" | "ADGROUP_TYPE_NOT_SUPPORTED_FOR_CAMPAIGN_SALES_COUNTRY" | "CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING" | "PROMOTED_HOTEL_AD_GROUPS_NOT_AVAILABLE_FOR_CUSTOMER" | "INVALID_EXCLUDED_PARENT_ASSET_FIELD_TYPE" | "INVALID_EXCLUDED_PARENT_ASSET_SET_TYPE" | "CANNOT_ADD_AD_GROUP_FOR_CAMPAIGN_TYPE" | "INVALID_STATUS" | "INVALID_STEP_ID_FOR_VIDEO_ADS_SEQUENCING" | "INVALID_AD_GROUP_TYPE_FOR_VIDEO_ADS_SEQUENCING" | "DUPLICATE_STEP_ID" | "INVALID_VERTICAL_ADS_FORMAT_SETTING" | "VERTICAL_ADS_FORMAT_SETTING_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_AI_MAX" | "VERTICAL_ADS_FORMAT_SETTING_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_ENABLED_TRAVEL_FEED";
  /**
   * The reasons for the ad group feed error
   */
  adGroupFeedError?:  | "UNSPECIFIED" | "UNKNOWN" | "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "CANNOT_CREATE_FOR_REMOVED_FEED" | "ADGROUP_FEED_ALREADY_EXISTS" | "CANNOT_OPERATE_ON_REMOVED_ADGROUP_FEED" | "INVALID_PLACEHOLDER_TYPE" | "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE" | "NO_EXISTING_LOCATION_CUSTOMER_FEED";
  /**
   * The reasons for the ad parameter error
   */
  adParameterError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_CRITERION_MUST_BE_KEYWORD" | "INVALID_INSERTION_TEXT_FORMAT";
  /**
   * The reasons for the ad sharing error
   */
  adSharingError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_ALREADY_CONTAINS_AD" | "INCOMPATIBLE_AD_UNDER_AD_GROUP" | "CANNOT_SHARE_INACTIVE_AD";
  /**
   * The reasons for the adx error
   */
  adxError?:  | "UNSPECIFIED" | "UNKNOWN" | "UNSUPPORTED_FEATURE";
  /**
   * The reasons for the asset error
   */
  assetError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_NOT_ON_ALLOWLIST_FOR_ASSET_TYPE" | "DUPLICATE_ASSET" | "DUPLICATE_ASSET_NAME" | "ASSET_DATA_IS_MISSING" | "CANNOT_MODIFY_ASSET_NAME" | "FIELD_INCOMPATIBLE_WITH_ASSET_TYPE" | "INVALID_CALL_TO_ACTION_TEXT" | "LEAD_FORM_INVALID_FIELDS_COMBINATION" | "LEAD_FORM_MISSING_AGREEMENT" | "INVALID_ASSET_STATUS" | "FIELD_CANNOT_BE_MODIFIED_FOR_ASSET_TYPE" | "SCHEDULES_CANNOT_OVERLAP" | "PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF" | "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT" | "TOO_MANY_DECIMAL_PLACES_SPECIFIED" | "DUPLICATE_ASSETS_WITH_DIFFERENT_FIELD_VALUE" | "CALL_CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED" | "CALL_CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED" | "CALL_DISALLOWED_NUMBER_TYPE" | "CALL_INVALID_CONVERSION_ACTION" | "CALL_INVALID_COUNTRY_CODE" | "CALL_INVALID_DOMESTIC_PHONE_NUMBER_FORMAT" | "CALL_INVALID_PHONE_NUMBER" | "CALL_PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY" | "CALL_PREMIUM_RATE_NUMBER_NOT_ALLOWED" | "CALL_VANITY_PHONE_NUMBER_NOT_ALLOWED" | "PRICE_HEADER_SAME_AS_DESCRIPTION" | "MOBILE_APP_INVALID_APP_ID" | "MOBILE_APP_INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL" | "NAME_REQUIRED_FOR_ASSET_TYPE" | "LEAD_FORM_LEGACY_QUALIFYING_QUESTIONS_DISALLOWED" | "NAME_CONFLICT_FOR_ASSET_TYPE" | "CANNOT_MODIFY_ASSET_SOURCE" | "CANNOT_MODIFY_AUTOMATICALLY_CREATED_ASSET" | "LEAD_FORM_LOCATION_ANSWER_TYPE_DISALLOWED" | "PAGE_FEED_INVALID_LABEL_TEXT" | "CUSTOMER_NOT_ON_ALLOWLIST_FOR_WHATSAPP_MESSAGE_ASSETS" | "CUSTOMER_NOT_ON_ALLOWLIST_FOR_APP_DEEP_LINK_ASSETS" | "PROMOTION_BARCODE_CANNOT_CONTAIN_LINKS" | "PROMOTION_BARCODE_INVALID_FORMAT" | "UNSUPPORTED_BARCODE_TYPE" | "PROMOTION_QR_CODE_CANNOT_CONTAIN_LINKS" | "PROMOTION_QR_CODE_INVALID_FORMAT" | "CUSTOMER_NOT_ON_ALLOWLIST_FOR_MESSAGE_ASSETS";
  /**
   * The reasons for the GenAI asset generation error.
   */
  assetGenerationError?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_ASSETS_GENERATED" | "FINAL_URL_REQUIRED" | "GENERATION_CONTEXT_MISSING_FINAL_URL" | "FINAL_URL_SENSITIVE" | "FINAL_URL_UNSUPPORTED_LANGUAGE" | "FINAL_URL_UNAVAILABLE" | "CAMPAIGN_TYPE_REQUIRED" | "UNSUPPORTED_CAMPAIGN_TYPE" | "UNSUPPORTED_FIELD_TYPE" | "UNSUPPORTED_FIELD_TYPE_FOR_CAMPAIGN_TYPE" | "FREEFORM_PROMPT_UNSUPPORTED_LANGUAGE" | "FREEFORM_PROMPT_SENSITIVE" | "INPUT_IMAGE_FILE_SIZE_TOO_LARGE" | "INPUT_IMAGE_EMPTY" | "GENERATION_TYPE_REQUIRED" | "TOO_MANY_KEYWORDS" | "KEYWORD_INVALID_LENGTH" | "NO_VALID_KEYWORDS" | "FREEFORM_PROMPT_INVALID_LENGTH" | "FREEFORM_PROMPT_REFERENCES_CHILDREN" | "FREEFORM_PROMPT_REFERENCES_SPECIFIC_PEOPLE" | "FREEFORM_PROMPT_VIOLATES_ADS_POLICY" | "FREEFORM_PROMPT_BRAND_CONTENT" | "INPUT_IMAGE_DEPICTS_CHILDREN" | "INPUT_IMAGE_CONTAINS_BRAND_CONTENT" | "INPUT_IMAGE_SENSITIVE" | "INPUT_IMAGE_VIOLATES_POLICY" | "ALL_OUTPUT_IMAGES_FILTERED_OUT_CHILDREN_DEPICTION" | "ALL_OUTPUT_IMAGES_FILTERED_OUT_SPECIFIC_PEOPLE" | "ALL_OUTPUT_IMAGES_FILTERED_OUT" | "INPUT_IMAGE_REQUIRED" | "INPUT_IMAGE_UNSUPPORTED_IMAGE_TYPE" | "CONTEXT_ASSET_GROUP_NOT_FOUND" | "CONTEXT_AD_GROUP_AD_NOT_FOUND" | "CONTEXT_CAMPAIGN_NOT_FOUND";
  /**
   * The reasons for the asset group asset error
   */
  assetGroupAssetError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_RESOURCE" | "EXPANDABLE_TAGS_NOT_ALLOWED_IN_DESCRIPTION" | "AD_CUSTOMIZER_NOT_SUPPORTED" | "HOTEL_PROPERTY_ASSET_NOT_LINKED_TO_CAMPAIGN";
  /**
   * The reasons for the asset group error
   */
  assetGroupError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "CANNOT_ADD_ASSET_GROUP_FOR_CAMPAIGN_TYPE" | "NOT_ENOUGH_HEADLINE_ASSET" | "NOT_ENOUGH_LONG_HEADLINE_ASSET" | "NOT_ENOUGH_DESCRIPTION_ASSET" | "NOT_ENOUGH_BUSINESS_NAME_ASSET" | "NOT_ENOUGH_MARKETING_IMAGE_ASSET" | "NOT_ENOUGH_SQUARE_MARKETING_IMAGE_ASSET" | "NOT_ENOUGH_LOGO_ASSET" | "FINAL_URL_SHOPPING_MERCHANT_HOME_PAGE_URL_DOMAINS_DIFFER" | "PATH1_REQUIRED_WHEN_PATH2_IS_SET" | "SHORT_DESCRIPTION_REQUIRED" | "FINAL_URL_REQUIRED" | "FINAL_URL_CONTAINS_INVALID_DOMAIN_NAME" | "AD_CUSTOMIZER_NOT_SUPPORTED" | "CANNOT_MUTATE_ASSET_GROUP_FOR_REMOVED_CAMPAIGN";
  /**
   * The reasons for the asset group listing group filter error
   */
  assetGroupListingGroupFilterError?:  | "UNSPECIFIED" | "UNKNOWN" | "TREE_TOO_DEEP" | "UNIT_CANNOT_HAVE_CHILDREN" | "SUBDIVISION_MUST_HAVE_EVERYTHING_ELSE_CHILD" | "DIFFERENT_DIMENSION_TYPE_BETWEEN_SIBLINGS" | "SAME_DIMENSION_VALUE_BETWEEN_SIBLINGS" | "SAME_DIMENSION_TYPE_BETWEEN_ANCESTORS" | "MULTIPLE_ROOTS" | "INVALID_DIMENSION_VALUE" | "MUST_REFINE_HIERARCHICAL_PARENT_TYPE" | "INVALID_PRODUCT_BIDDING_CATEGORY" | "CHANGING_CASE_VALUE_WITH_CHILDREN" | "SUBDIVISION_HAS_CHILDREN" | "CANNOT_REFINE_HIERARCHICAL_EVERYTHING_ELSE" | "DIMENSION_TYPE_NOT_ALLOWED" | "DUPLICATE_WEBPAGE_FILTER_UNDER_ASSET_GROUP" | "LISTING_SOURCE_NOT_ALLOWED" | "FILTER_EXCLUSION_NOT_ALLOWED" | "MULTIPLE_LISTING_SOURCES" | "MULTIPLE_WEBPAGE_CONDITION_TYPES_NOT_ALLOWED" | "MULTIPLE_WEBPAGE_TYPES_PER_ASSET_GROUP" | "PAGE_FEED_FILTER_HAS_PARENT" | "MULTIPLE_OPERATIONS_ON_ONE_NODE" | "TREE_WAS_INVALID_BEFORE_MUTATION";
  /**
   * The reasons for the asset group hint error
   */
  assetGroupSignalError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_MANY_WORDS" | "SEARCH_THEME_POLICY_VIOLATION" | "AUDIENCE_WITH_WRONG_ASSET_GROUP_ID";
  /**
   * The reasons for the asset link error
   */
  assetLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "PINNING_UNSUPPORTED" | "UNSUPPORTED_FIELD_TYPE" | "FIELD_TYPE_INCOMPATIBLE_WITH_ASSET_TYPE" | "FIELD_TYPE_INCOMPATIBLE_WITH_CAMPAIGN_TYPE" | "INCOMPATIBLE_ADVERTISING_CHANNEL_TYPE" | "IMAGE_NOT_WITHIN_SPECIFIED_DIMENSION_RANGE" | "INVALID_PINNED_FIELD" | "MEDIA_BUNDLE_ASSET_FILE_SIZE_TOO_LARGE" | "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_FOR_VALID_COMBINATION" | "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_WITH_FALLBACK" | "NOT_ENOUGH_AVAILABLE_ASSET_LINKS_WITH_FALLBACK_FOR_VALID_COMBINATION" | "YOUTUBE_VIDEO_REMOVED" | "YOUTUBE_VIDEO_TOO_LONG" | "YOUTUBE_VIDEO_TOO_SHORT" | "EXCLUDED_PARENT_FIELD_TYPE" | "INVALID_STATUS" | "YOUTUBE_VIDEO_DURATION_NOT_DEFINED" | "CANNOT_CREATE_AUTOMATICALLY_CREATED_LINKS" | "CANNOT_LINK_TO_AUTOMATICALLY_CREATED_ASSET" | "CANNOT_MODIFY_ASSET_LINK_SOURCE" | "CANNOT_LINK_LOCATION_LEAD_FORM_WITHOUT_LOCATION_ASSET" | "CUSTOMER_NOT_VERIFIED" | "UNSUPPORTED_CALL_TO_ACTION" | "BRAND_ASSETS_NOT_LINKED_AT_ASSET_GROUP_LEVEL" | "BRAND_ASSETS_NOT_LINKED_AT_CAMPAIGN_LEVEL";
  /**
   * The reasons for the asset set asset error
   */
  assetSetAssetError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_ASSET_TYPE" | "INVALID_ASSET_SET_TYPE" | "DUPLICATE_EXTERNAL_KEY" | "PARENT_LINKAGE_DOES_NOT_EXIST";
  /**
   * The reasons for the asset set error
   */
  assetSetError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_ASSET_SET_NAME" | "INVALID_PARENT_ASSET_SET_TYPE" | "ASSET_SET_SOURCE_INCOMPATIBLE_WITH_PARENT_ASSET_SET" | "ASSET_SET_TYPE_CANNOT_BE_LINKED_TO_CUSTOMER" | "INVALID_CHAIN_IDS" | "LOCATION_SYNC_ASSET_SET_DOES_NOT_SUPPORT_RELATIONSHIP_TYPE" | "NOT_UNIQUE_ENABLED_LOCATION_SYNC_TYPED_ASSET_SET" | "INVALID_PLACE_IDS" | "OAUTH_INFO_INVALID" | "OAUTH_INFO_MISSING" | "CANNOT_DELETE_AS_ENABLED_LINKAGES_EXIST";
  /**
   * The reasons for the asset set link error
   */
  assetSetLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "INCOMPATIBLE_ADVERTISING_CHANNEL_TYPE" | "DUPLICATE_FEED_LINK" | "INCOMPATIBLE_ASSET_SET_TYPE_WITH_CAMPAIGN_TYPE" | "DUPLICATE_ASSET_SET_LINK" | "ASSET_SET_LINK_CANNOT_BE_REMOVED";
  /**
   * The reasons for the audience error
   */
  audienceError?:  | "UNSPECIFIED" | "UNKNOWN" | "NAME_ALREADY_IN_USE" | "DIMENSION_INVALID" | "AUDIENCE_SEGMENT_NOT_FOUND" | "AUDIENCE_SEGMENT_TYPE_NOT_SUPPORTED" | "DUPLICATE_AUDIENCE_SEGMENT" | "TOO_MANY_SEGMENTS" | "TOO_MANY_DIMENSIONS_OF_SAME_TYPE" | "IN_USE" | "MISSING_ASSET_GROUP_ID" | "CANNOT_CHANGE_FROM_CUSTOMER_TO_ASSET_GROUP_SCOPE";
  /**
   * The reasons for the Audience Insights error
   */
  audienceInsightsError?:  | "UNSPECIFIED" | "UNKNOWN" | "DIMENSION_INCOMPATIBLE_WITH_TOPIC_AUDIENCE_COMBINATIONS";
  /**
   * Indicates failure to properly authenticate user.
   */
  authenticationError?:  | "UNSPECIFIED" | "UNKNOWN" | "AUTHENTICATION_ERROR" | "CLIENT_CUSTOMER_ID_INVALID" | "CUSTOMER_NOT_FOUND" | "GOOGLE_ACCOUNT_DELETED" | "GOOGLE_ACCOUNT_COOKIE_INVALID" | "GOOGLE_ACCOUNT_AUTHENTICATION_FAILED" | "GOOGLE_ACCOUNT_USER_AND_ADS_USER_MISMATCH" | "LOGIN_COOKIE_REQUIRED" | "NOT_ADS_USER" | "OAUTH_TOKEN_INVALID" | "OAUTH_TOKEN_EXPIRED" | "OAUTH_TOKEN_DISABLED" | "OAUTH_TOKEN_REVOKED" | "OAUTH_TOKEN_HEADER_INVALID" | "LOGIN_COOKIE_INVALID" | "INVALID_EMAIL_ADDRESS" | "USER_ID_INVALID" | "TWO_STEP_VERIFICATION_NOT_ENROLLED" | "ADVANCED_PROTECTION_NOT_ENROLLED" | "ORGANIZATION_NOT_RECOGNIZED" | "ORGANIZATION_NOT_APPROVED" | "ORGANIZATION_NOT_ASSOCIATED_WITH_DEVELOPER_TOKEN" | "DEVELOPER_TOKEN_INVALID";
  /**
   * An error encountered when trying to authorize a user.
   */
  authorizationError?:  | "UNSPECIFIED" | "UNKNOWN" | "USER_PERMISSION_DENIED" | "DEVELOPER_TOKEN_NOT_ON_ALLOWLIST" | "DEVELOPER_TOKEN_PROHIBITED" | "PROJECT_DISABLED" | "AUTHORIZATION_ERROR" | "ACTION_NOT_PERMITTED" | "INCOMPLETE_SIGNUP" | "CUSTOMER_NOT_ENABLED" | "MISSING_TOS" | "DEVELOPER_TOKEN_NOT_APPROVED" | "INVALID_LOGIN_CUSTOMER_ID_SERVING_CUSTOMER_ID_COMBINATION" | "SERVICE_ACCESS_DENIED" | "ACCESS_DENIED_FOR_ACCOUNT_TYPE" | "METRIC_ACCESS_DENIED" | "CLOUD_PROJECT_NOT_UNDER_ORGANIZATION" | "ACTION_NOT_PERMITTED_FOR_SUSPENDED_ACCOUNT";
  /**
   * The reasons for error in automatically created asset removal action.
   */
  automaticallyCreatedAssetRemovalError?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_DOES_NOT_EXIST" | "INVALID_AD_TYPE" | "ASSET_DOES_NOT_EXIST" | "ASSET_FIELD_TYPE_DOES_NOT_MATCH" | "NOT_AN_AUTOMATICALLY_CREATED_ASSET";
  /**
   * The reasons for the batch job error
   */
  batchJobError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_MODIFY_JOB_AFTER_JOB_STARTS_RUNNING" | "EMPTY_OPERATIONS" | "INVALID_SEQUENCE_TOKEN" | "RESULTS_NOT_READY" | "INVALID_PAGE_SIZE" | "CAN_ONLY_REMOVE_PENDING_JOB" | "CANNOT_LIST_RESULTS" | "ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILURE" | "ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILURE" | "REQUEST_TOO_LARGE" | "CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILURE";
  /**
   * The reasons for the Benchmarks error.
   */
  benchmarksError?:  | "UNSPECIFIED" | "UNKNOWN" | "MAX_QUERY_COMPLEXITY_EXCEEDED";
  /**
   * The reasons for the bidding errors
   */
  biddingError?:  | "UNSPECIFIED" | "UNKNOWN" | "BIDDING_STRATEGY_TRANSITION_NOT_ALLOWED" | "CANNOT_ATTACH_BIDDING_STRATEGY_TO_CAMPAIGN" | "INVALID_ANONYMOUS_BIDDING_STRATEGY_TYPE" | "INVALID_BIDDING_STRATEGY_TYPE" | "INVALID_BID" | "BIDDING_STRATEGY_NOT_AVAILABLE_FOR_ACCOUNT_TYPE" | "CANNOT_CREATE_CAMPAIGN_WITH_BIDDING_STRATEGY" | "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CAMPAIGN_LEVEL_POP_BIDDING_STRATEGY" | "BIDDING_STRATEGY_NOT_SUPPORTED_WITH_AD_SCHEDULE" | "PAY_PER_CONVERSION_NOT_AVAILABLE_FOR_CUSTOMER" | "PAY_PER_CONVERSION_NOT_ALLOWED_WITH_TARGET_CPA" | "BIDDING_STRATEGY_NOT_ALLOWED_FOR_SEARCH_ONLY_CAMPAIGNS" | "BIDDING_STRATEGY_NOT_SUPPORTED_IN_DRAFTS_OR_EXPERIMENTS" | "BIDDING_STRATEGY_TYPE_DOES_NOT_SUPPORT_PRODUCT_TYPE_ADGROUP_CRITERION" | "BID_TOO_SMALL" | "BID_TOO_BIG" | "BID_TOO_MANY_FRACTIONAL_DIGITS" | "INVALID_DOMAIN_NAME" | "NOT_COMPATIBLE_WITH_PAYMENT_MODE" | "BIDDING_STRATEGY_TYPE_INCOMPATIBLE_WITH_SHARED_BUDGET" | "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ALIGNED" | "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_ATTACHED_TO_THE_SAME_CAMPAIGNS_TO_ALIGN" | "BIDDING_STRATEGY_AND_BUDGET_MUST_BE_REMOVED_TOGETHER" | "CPC_BID_FLOOR_MICROS_GREATER_THAN_CPC_BID_CEILING_MICROS" | "TARGET_ROAS_TOLERANCE_PERCENT_MILLIS_MUST_BE_INTEGER";
  /**
   * An error with a Bidding Strategy mutate.
   */
  biddingStrategyError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "CANNOT_CHANGE_BIDDING_STRATEGY_TYPE" | "CANNOT_REMOVE_ASSOCIATED_STRATEGY" | "BIDDING_STRATEGY_NOT_SUPPORTED" | "INCOMPATIBLE_BIDDING_STRATEGY_AND_BIDDING_STRATEGY_GOAL_TYPE";
  /**
   * The reasons for the billing setup error
   */
  billingSetupError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_USE_EXISTING_AND_NEW_ACCOUNT" | "CANNOT_REMOVE_STARTED_BILLING_SETUP" | "CANNOT_CHANGE_BILLING_TO_SAME_PAYMENTS_ACCOUNT" | "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_STATUS" | "INVALID_PAYMENTS_ACCOUNT" | "BILLING_SETUP_NOT_PERMITTED_FOR_CUSTOMER_CATEGORY" | "INVALID_START_TIME_TYPE" | "THIRD_PARTY_ALREADY_HAS_BILLING" | "BILLING_SETUP_IN_PROGRESS" | "NO_SIGNUP_PERMISSION" | "CHANGE_OF_BILL_TO_IN_PROGRESS" | "PAYMENTS_PROFILE_NOT_FOUND" | "PAYMENTS_ACCOUNT_NOT_FOUND" | "PAYMENTS_PROFILE_INELIGIBLE" | "PAYMENTS_ACCOUNT_INELIGIBLE" | "CUSTOMER_NEEDS_INTERNAL_APPROVAL" | "PAYMENTS_PROFILE_NEEDS_SERVICE_AGREEMENT_ACCEPTANCE" | "PAYMENTS_ACCOUNT_INELIGIBLE_CURRENCY_CODE_MISMATCH" | "FUTURE_START_TIME_PROHIBITED" | "TOO_MANY_BILLING_SETUPS_FOR_PAYMENTS_ACCOUNT";
  /**
   * The reasons for the brand guidelines migration error.
   */
  brandGuidelinesMigrationError?:  | "UNSPECIFIED" | "UNKNOWN" | "BRAND_GUIDELINES_ALREADY_ENABLED" | "CANNOT_ENABLE_BRAND_GUIDELINES_FOR_REMOVED_CAMPAIGN" | "BRAND_GUIDELINES_LOGO_LIMIT_EXCEEDED" | "CANNOT_AUTO_POPULATE_BRAND_ASSETS_WHEN_BRAND_ASSETS_PROVIDED" | "AUTO_POPULATE_BRAND_ASSETS_REQUIRED_WHEN_BRAND_ASSETS_OMITTED" | "TOO_MANY_ENABLE_OPERATIONS";
  /**
   * An error with a Campaign Budget mutate.
   */
  campaignBudgetError?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BUDGET_CANNOT_BE_SHARED" | "CAMPAIGN_BUDGET_REMOVED" | "CAMPAIGN_BUDGET_IN_USE" | "CAMPAIGN_BUDGET_PERIOD_NOT_AVAILABLE" | "CANNOT_MODIFY_FIELD_OF_IMPLICITLY_SHARED_CAMPAIGN_BUDGET" | "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_IMPLICITLY_SHARED" | "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED_WITHOUT_NAME" | "CANNOT_UPDATE_CAMPAIGN_BUDGET_TO_EXPLICITLY_SHARED" | "CANNOT_USE_IMPLICITLY_SHARED_CAMPAIGN_BUDGET_WITH_MULTIPLE_CAMPAIGNS" | "DUPLICATE_NAME" | "MONEY_AMOUNT_IN_WRONG_CURRENCY" | "MONEY_AMOUNT_LESS_THAN_CURRENCY_MINIMUM_CPC" | "MONEY_AMOUNT_TOO_LARGE" | "NEGATIVE_MONEY_AMOUNT" | "NON_MULTIPLE_OF_MINIMUM_CURRENCY_UNIT" | "TOTAL_BUDGET_AMOUNT_MUST_BE_UNSET_FOR_BUDGET_PERIOD_DAILY" | "INVALID_PERIOD" | "CANNOT_USE_ACCELERATED_DELIVERY_MODE" | "BUDGET_AMOUNT_MUST_BE_UNSET_FOR_CUSTOM_BUDGET_PERIOD" | "BUDGET_BELOW_PER_DAY_MINIMUM";
  /**
   * The reasons for the campaign conversion goal error
   */
  campaignConversionGoalError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_USE_CAMPAIGN_GOAL_FOR_SEARCH_ADS_360_MANAGED_CAMPAIGN" | "CANNOT_USE_STORE_SALE_GOAL_FOR_PERFORMANCE_MAX_CAMPAIGN";
  /**
   * The reasons for the campaign criterion error
   */
  campaignCriterionError?:  | "UNSPECIFIED" | "UNKNOWN" | "CONCRETE_TYPE_REQUIRED" | "INVALID_PLACEMENT_URL" | "CANNOT_EXCLUDE_CRITERIA_TYPE" | "CANNOT_SET_STATUS_FOR_CRITERIA_TYPE" | "CANNOT_SET_STATUS_FOR_EXCLUDED_CRITERIA" | "CANNOT_TARGET_AND_EXCLUDE" | "TOO_MANY_OPERATIONS" | "OPERATOR_NOT_SUPPORTED_FOR_CRITERION_TYPE" | "SHOPPING_CAMPAIGN_SALES_COUNTRY_NOT_SUPPORTED_FOR_SALES_CHANNEL" | "CANNOT_ADD_EXISTING_FIELD" | "CANNOT_UPDATE_NEGATIVE_CRITERION" | "CANNOT_SET_NEGATIVE_KEYWORD_THEME_CONSTANT_CRITERION" | "INVALID_KEYWORD_THEME_CONSTANT" | "MISSING_KEYWORD_THEME_CONSTANT_OR_FREE_FORM_KEYWORD_THEME" | "CANNOT_TARGET_BOTH_PROXIMITY_AND_LOCATION_CRITERIA_FOR_SMART_CAMPAIGN" | "CANNOT_TARGET_MULTIPLE_PROXIMITY_CRITERIA_FOR_SMART_CAMPAIGN" | "LOCATION_NOT_LAUNCHED_FOR_LOCAL_SERVICES_CAMPAIGN" | "LOCATION_INVALID_FOR_LOCAL_SERVICES_CAMPAIGN" | "CANNOT_TARGET_COUNTRY_FOR_LOCAL_SERVICES_CAMPAIGN" | "LOCATION_NOT_IN_HOME_COUNTRY_FOR_LOCAL_SERVICES_CAMPAIGN" | "CANNOT_ADD_OR_REMOVE_LOCATION_FOR_LOCAL_SERVICES_CAMPAIGN" | "AT_LEAST_ONE_POSITIVE_LOCATION_REQUIRED_FOR_LOCAL_SERVICES_CAMPAIGN" | "AT_LEAST_ONE_LOCAL_SERVICE_ID_CRITERION_REQUIRED_FOR_LOCAL_SERVICES_CAMPAIGN" | "LOCAL_SERVICE_ID_NOT_FOUND_FOR_CATEGORY" | "CANNOT_ATTACH_BRAND_LIST_TO_NON_QUALIFIED_SEARCH_CAMPAIGN" | "CANNOT_REMOVE_ALL_LOCATIONS_DUE_TO_TOO_MANY_COUNTRY_EXCLUSIONS" | "INVALID_VIDEO_LINEUP_ID";
  /**
   * The reasons for the campaign customizer error.
   */
  campaignCustomizerError?:  | "UNSPECIFIED" | "UNKNOWN";
  /**
   * The reasons for the campaign draft error
   */
  campaignDraftError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_DRAFT_NAME" | "INVALID_STATUS_TRANSITION_FROM_REMOVED" | "INVALID_STATUS_TRANSITION_FROM_PROMOTED" | "INVALID_STATUS_TRANSITION_FROM_PROMOTE_FAILED" | "CUSTOMER_CANNOT_CREATE_DRAFT" | "CAMPAIGN_CANNOT_CREATE_DRAFT" | "INVALID_DRAFT_CHANGE" | "INVALID_STATUS_TRANSITION" | "MAX_NUMBER_OF_DRAFTS_PER_CAMPAIGN_REACHED" | "LIST_ERRORS_FOR_PROMOTED_DRAFT_ONLY";
  /**
   * An error with a Campaign mutate.
   */
  campaignError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_TARGET_CONTENT_NETWORK" | "CANNOT_TARGET_SEARCH_NETWORK" | "CANNOT_TARGET_SEARCH_NETWORK_WITHOUT_GOOGLE_SEARCH" | "CANNOT_TARGET_GOOGLE_SEARCH_FOR_CPM_CAMPAIGN" | "CAMPAIGN_MUST_TARGET_AT_LEAST_ONE_NETWORK" | "CANNOT_TARGET_PARTNER_SEARCH_NETWORK" | "CANNOT_TARGET_CONTENT_NETWORK_ONLY_WITH_CRITERIA_LEVEL_BIDDING_STRATEGY" | "CAMPAIGN_DURATION_MUST_CONTAIN_ALL_RUNNABLE_TRIALS" | "CANNOT_MODIFY_FOR_TRIAL_CAMPAIGN" | "DUPLICATE_CAMPAIGN_NAME" | "INCOMPATIBLE_CAMPAIGN_FIELD" | "INVALID_CAMPAIGN_NAME" | "INVALID_AD_SERVING_OPTIMIZATION_STATUS" | "INVALID_TRACKING_URL" | "CANNOT_SET_BOTH_TRACKING_URL_TEMPLATE_AND_TRACKING_SETTING" | "MAX_IMPRESSIONS_NOT_IN_RANGE" | "TIME_UNIT_NOT_SUPPORTED" | "INVALID_OPERATION_IF_SERVING_STATUS_HAS_ENDED" | "BUDGET_CANNOT_BE_SHARED" | "CAMPAIGN_CANNOT_USE_SHARED_BUDGET" | "CANNOT_CHANGE_BUDGET_ON_CAMPAIGN_WITH_TRIALS" | "CAMPAIGN_LABEL_DOES_NOT_EXIST" | "CAMPAIGN_LABEL_ALREADY_EXISTS" | "MISSING_SHOPPING_SETTING" | "INVALID_SHOPPING_SALES_COUNTRY" | "ADVERTISING_CHANNEL_TYPE_NOT_AVAILABLE_FOR_ACCOUNT_TYPE" | "INVALID_ADVERTISING_CHANNEL_SUB_TYPE" | "AT_LEAST_ONE_CONVERSION_MUST_BE_SELECTED" | "CANNOT_SET_AD_ROTATION_MODE" | "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED" | "CANNOT_SET_DATE_TO_PAST" | "MISSING_HOTEL_CUSTOMER_LINK" | "INVALID_HOTEL_CUSTOMER_LINK" | "MISSING_HOTEL_SETTING" | "CANNOT_USE_SHARED_CAMPAIGN_BUDGET_WHILE_PART_OF_CAMPAIGN_GROUP" | "APP_NOT_FOUND" | "SHOPPING_ENABLE_LOCAL_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE" | "MERCHANT_NOT_ALLOWED_FOR_COMPARISON_LISTING_ADS" | "INSUFFICIENT_APP_INSTALLS_COUNT" | "SENSITIVE_CATEGORY_APP" | "HEC_AGREEMENT_REQUIRED" | "NOT_COMPATIBLE_WITH_VIEW_THROUGH_CONVERSION_OPTIMIZATION" | "INVALID_EXCLUDED_PARENT_ASSET_FIELD_TYPE" | "CANNOT_CREATE_APP_PRE_REGISTRATION_FOR_NON_ANDROID_APP" | "APP_NOT_AVAILABLE_TO_CREATE_APP_PRE_REGISTRATION_CAMPAIGN" | "INCOMPATIBLE_BUDGET_TYPE" | "LOCAL_SERVICES_DUPLICATE_CATEGORY_BID" | "LOCAL_SERVICES_INVALID_CATEGORY_BID" | "LOCAL_SERVICES_MISSING_CATEGORY_BID" | "INVALID_STATUS_CHANGE" | "MISSING_TRAVEL_CUSTOMER_LINK" | "INVALID_TRAVEL_CUSTOMER_LINK" | "INVALID_EXCLUDED_PARENT_ASSET_SET_TYPE" | "ASSET_SET_NOT_A_HOTEL_PROPERTY_ASSET_SET" | "HOTEL_PROPERTY_ASSET_SET_ONLY_FOR_PERFORMANCE_MAX_FOR_TRAVEL_GOALS" | "AVERAGE_DAILY_SPEND_TOO_HIGH" | "CANNOT_ATTACH_TO_REMOVED_CAMPAIGN_GROUP" | "CANNOT_ATTACH_TO_BIDDING_STRATEGY" | "CANNOT_CHANGE_BUDGET_PERIOD" | "NOT_ENOUGH_CONVERSIONS" | "CANNOT_SET_MORE_THAN_ONE_CONVERSION_ACTION" | "NOT_COMPATIBLE_WITH_BUDGET_TYPE" | "NOT_COMPATIBLE_WITH_UPLOAD_CLICKS_CONVERSION" | "APP_ID_MUST_MATCH_CONVERSION_ACTION_APP_ID" | "CONVERSION_ACTION_WITH_DOWNLOAD_CATEGORY_NOT_ALLOWED" | "CONVERSION_ACTION_WITH_DOWNLOAD_CATEGORY_REQUIRED" | "CONVERSION_TRACKING_NOT_ENABLED" | "NOT_COMPATIBLE_WITH_BIDDING_STRATEGY_TYPE" | "NOT_COMPATIBLE_WITH_GOOGLE_ATTRIBUTION_CONVERSIONS" | "CONVERSION_LAG_TOO_HIGH" | "NOT_LINKED_ADVERTISING_PARTNER" | "INVALID_NUMBER_OF_ADVERTISING_PARTNER_IDS" | "CANNOT_TARGET_DISPLAY_NETWORK_WITHOUT_YOUTUBE" | "CANNOT_LINK_TO_COMPARISON_SHOPPING_SERVICE_ACCOUNT" | "CANNOT_TARGET_NETWORK_FOR_COMPARISON_SHOPPING_SERVICE_LINKED_ACCOUNTS" | "CANNOT_MODIFY_TEXT_ASSET_AUTOMATION_WITH_ENABLED_TRIAL" | "DYNAMIC_TEXT_ASSET_CANNOT_OPT_OUT_WITH_FINAL_URL_EXPANSION_OPT_IN" | "CANNOT_SET_CAMPAIGN_KEYWORD_MATCH_TYPE" | "CANNOT_DISABLE_BROAD_MATCH_WHEN_KEYWORD_CONVERSION_IN_PROCESS" | "CANNOT_DISABLE_BROAD_MATCH_WHEN_TARGETING_BRANDS" | "CANNOT_ENABLE_BROAD_MATCH_FOR_BASE_CAMPAIGN_WITH_PROMOTING_TRIAL" | "CANNOT_ENABLE_BROAD_MATCH_FOR_PROMOTING_TRIAL_CAMPAIGN" | "REQUIRED_BUSINESS_NAME_ASSET_NOT_LINKED" | "REQUIRED_LOGO_ASSET_NOT_LINKED" | "BRAND_TARGETING_OVERRIDES_NOT_SUPPORTED" | "BRAND_GUIDELINES_NOT_ENABLED_FOR_CAMPAIGN" | "BRAND_GUIDELINES_MAIN_AND_ACCENT_COLORS_REQUIRED" | "BRAND_GUIDELINES_COLOR_INVALID_FORMAT" | "BRAND_GUIDELINES_UNSUPPORTED_FONT_FAMILY" | "BRAND_GUIDELINES_UNSUPPORTED_CHANNEL" | "CANNOT_ENABLE_BRAND_GUIDELINES_FOR_TRAVEL_GOALS" | "CUSTOMER_NOT_ALLOWLISTED_FOR_BRAND_GUIDELINES" | "THIRD_PARTY_INTEGRATION_PARTNER_NOT_ALLOWED" | "THIRD_PARTY_INTEGRATION_PARTNER_SHARE_COST_NOT_ALLOWED" | "DUPLICATE_INTERACTION_TYPE" | "INVALID_INTERACTION_TYPE" | "VIDEO_SEQUENCE_ERROR_SEQUENCE_DEFINITION_REQUIRED" | "AI_MAX_MUST_BE_ENABLED" | "DURATION_TOO_LONG_FOR_TOTAL_BUDGET" | "END_DATE_TIME_REQUIRED_FOR_TOTAL_BUDGET";
  /**
   * The reasons for the campaign experiment error
   */
  campaignExperimentError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "INVALID_TRANSITION" | "CANNOT_CREATE_EXPERIMENT_WITH_SHARED_BUDGET" | "CANNOT_CREATE_EXPERIMENT_FOR_REMOVED_BASE_CAMPAIGN" | "CANNOT_CREATE_EXPERIMENT_FOR_NON_PROPOSED_DRAFT" | "CUSTOMER_CANNOT_CREATE_EXPERIMENT" | "CAMPAIGN_CANNOT_CREATE_EXPERIMENT" | "EXPERIMENT_DURATIONS_MUST_NOT_OVERLAP" | "EXPERIMENT_DURATION_MUST_BE_WITHIN_CAMPAIGN_DURATION" | "CANNOT_MUTATE_EXPERIMENT_DUE_TO_STATUS";
  /**
   * The reasons for the campaign feed error
   */
  campaignFeedError?:  | "UNSPECIFIED" | "UNKNOWN" | "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "CANNOT_CREATE_FOR_REMOVED_FEED" | "CANNOT_CREATE_ALREADY_EXISTING_CAMPAIGN_FEED" | "CANNOT_MODIFY_REMOVED_CAMPAIGN_FEED" | "INVALID_PLACEHOLDER_TYPE" | "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE" | "NO_EXISTING_LOCATION_CUSTOMER_FEED" | "LEGACY_FEED_TYPE_READ_ONLY";
  /**
   * The reasons for the campaign goal config error.
   */
  campaignGoalConfigError?:  | "UNSPECIFIED" | "UNKNOWN" | "GOAL_NOT_FOUND" | "CAMPAIGN_NOT_FOUND" | "HIGH_LIFETIME_VALUE_PRESENT_BUT_VALUE_ABSENT" | "HIGH_LIFETIME_VALUE_LESS_THAN_OR_EQUAL_TO_VALUE" | "CUSTOMER_LIFECYCLE_OPTIMIZATION_CAMPAIGN_TYPE_NOT_SUPPORTED" | "CUSTOMER_NOT_ALLOWLISTED_FOR_RETENTION_ONLY";
  /**
   * The reasons for the campaign lifecycle goal error
   */
  campaignLifecycleGoalError?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_MISSING" | "INVALID_CAMPAIGN" | "CUSTOMER_ACQUISITION_INVALID_OPTIMIZATION_MODE" | "INCOMPATIBLE_BIDDING_STRATEGY" | "MISSING_PURCHASE_GOAL" | "CUSTOMER_ACQUISITION_INVALID_HIGH_LIFETIME_VALUE" | "CUSTOMER_ACQUISITION_UNSUPPORTED_CAMPAIGN_TYPE" | "CUSTOMER_ACQUISITION_INVALID_VALUE" | "CUSTOMER_ACQUISITION_VALUE_MISSING" | "CUSTOMER_ACQUISITION_MISSING_EXISTING_CUSTOMER_DEFINITION" | "CUSTOMER_ACQUISITION_MISSING_HIGH_VALUE_CUSTOMER_DEFINITION";
  /**
   * The reasons for the campaign shared set error
   */
  campaignSharedSetError?:  | "UNSPECIFIED" | "UNKNOWN" | "SHARED_SET_ACCESS_DENIED";
  /**
   * The reasons for the change event error
   */
  changeEventError?:  | "UNSPECIFIED" | "UNKNOWN" | "START_DATE_TOO_OLD" | "CHANGE_DATE_RANGE_INFINITE" | "CHANGE_DATE_RANGE_NEGATIVE" | "LIMIT_NOT_SPECIFIED" | "INVALID_LIMIT_CLAUSE";
  /**
   * The reasons for the change status error
   */
  changeStatusError?:  | "UNSPECIFIED" | "UNKNOWN" | "START_DATE_TOO_OLD" | "CHANGE_DATE_RANGE_INFINITE" | "CHANGE_DATE_RANGE_NEGATIVE" | "LIMIT_NOT_SPECIFIED" | "INVALID_LIMIT_CLAUSE";
  /**
   * The reasons for the click view error
   */
  clickViewError?:  | "UNSPECIFIED" | "UNKNOWN" | "EXPECTED_FILTER_ON_A_SINGLE_DAY" | "DATE_TOO_OLD";
  /**
   * The reasons for the collection size error
   */
  collectionSizeError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_FEW" | "TOO_MANY";
  /**
   * The reasons for the context error
   */
  contextError?:  | "UNSPECIFIED" | "UNKNOWN" | "OPERATION_NOT_PERMITTED_FOR_CONTEXT" | "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE";
  /**
   * The reasons for the conversion action error
   */
  conversionActionError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "DUPLICATE_APP_ID" | "TWO_CONVERSION_ACTIONS_BIDDING_ON_SAME_APP_DOWNLOAD" | "BIDDING_ON_SAME_APP_DOWNLOAD_AS_GLOBAL_ACTION" | "DATA_DRIVEN_MODEL_WAS_NEVER_GENERATED" | "DATA_DRIVEN_MODEL_EXPIRED" | "DATA_DRIVEN_MODEL_STALE" | "DATA_DRIVEN_MODEL_UNKNOWN" | "CREATION_NOT_SUPPORTED" | "UPDATE_NOT_SUPPORTED" | "CANNOT_SET_RULE_BASED_ATTRIBUTION_MODELS";
  /**
   * The reasons for the conversion adjustment upload error
   */
  conversionAdjustmentUploadError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_RECENT_CONVERSION_ACTION" | "CONVERSION_ALREADY_RETRACTED" | "CONVERSION_NOT_FOUND" | "CONVERSION_EXPIRED" | "ADJUSTMENT_PRECEDES_CONVERSION" | "MORE_RECENT_RESTATEMENT_FOUND" | "TOO_RECENT_CONVERSION" | "CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE" | "TOO_MANY_ADJUSTMENTS_IN_REQUEST" | "TOO_MANY_ADJUSTMENTS" | "RESTATEMENT_ALREADY_EXISTS" | "DUPLICATE_ADJUSTMENT_IN_REQUEST" | "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS" | "CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT" | "INVALID_USER_IDENTIFIER" | "UNSUPPORTED_USER_IDENTIFIER" | "GCLID_DATE_TIME_PAIR_AND_ORDER_ID_BOTH_SET" | "CONVERSION_ALREADY_ENHANCED" | "DUPLICATE_ENHANCEMENT_IN_REQUEST" | "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCEMENT" | "MISSING_ORDER_ID_FOR_WEBPAGE" | "ORDER_ID_CONTAINS_PII" | "INVALID_JOB_ID" | "NO_CONVERSION_ACTION_FOUND" | "INVALID_CONVERSION_ACTION_TYPE";
  /**
   * The reasons for the conversion custom variable error
   */
  conversionCustomVariableError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_NAME" | "DUPLICATE_TAG" | "RESERVED_TAG";
  /**
   * The reasons for the conversion goal campaign config error
   */
  conversionGoalCampaignConfigError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_USE_CAMPAIGN_GOAL_FOR_SEARCH_ADS_360_MANAGED_CAMPAIGN" | "CUSTOM_GOAL_DOES_NOT_BELONG_TO_GOOGLE_ADS_CONVERSION_CUSTOMER" | "CAMPAIGN_CANNOT_USE_UNIFIED_GOALS" | "EMPTY_CONVERSION_GOALS" | "STORE_SALE_STORE_VISIT_CANNOT_BE_BOTH_INCLUDED" | "PERFORMANCE_MAX_CAMPAIGN_CANNOT_USE_CUSTOM_GOAL_WITH_STORE_SALES";
  /**
   * The reasons for the conversion upload error
   */
  conversionUploadError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_MANY_CONVERSIONS_IN_REQUEST" | "UNPARSEABLE_GCLID" | "CONVERSION_PRECEDES_EVENT" | "EXPIRED_EVENT" | "TOO_RECENT_EVENT" | "EVENT_NOT_FOUND" | "UNAUTHORIZED_CUSTOMER" | "TOO_RECENT_CONVERSION_ACTION" | "CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME" | "EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "ORDER_ID_ALREADY_IN_USE" | "DUPLICATE_ORDER_ID" | "TOO_RECENT_CALL" | "EXPIRED_CALL" | "CALL_NOT_FOUND" | "CONVERSION_PRECEDES_CALL" | "CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME" | "UNPARSEABLE_CALLERS_PHONE_NUMBER" | "CLICK_CONVERSION_ALREADY_EXISTS" | "CALL_CONVERSION_ALREADY_EXISTS" | "DUPLICATE_CLICK_CONVERSION_IN_REQUEST" | "DUPLICATE_CALL_CONVERSION_IN_REQUEST" | "CUSTOM_VARIABLE_NOT_ENABLED" | "CUSTOM_VARIABLE_VALUE_CONTAINS_PII" | "INVALID_CUSTOMER_FOR_CLICK" | "INVALID_CUSTOMER_FOR_CALL" | "CONVERSION_NOT_COMPLIANT_WITH_ATT_POLICY" | "CLICK_NOT_FOUND" | "INVALID_USER_IDENTIFIER" | "EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION_NOT_PERMITTED_WITH_USER_IDENTIFIER" | "UNSUPPORTED_USER_IDENTIFIER" | "GBRAID_WBRAID_BOTH_SET" | "UNPARSEABLE_WBRAID" | "UNPARSEABLE_GBRAID" | "ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID" | "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCED_CONVERSIONS" | "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS" | "ORDER_ID_CONTAINS_PII" | "CUSTOMER_NOT_ENABLED_ENHANCED_CONVERSIONS_FOR_LEADS" | "INVALID_JOB_ID" | "NO_CONVERSION_ACTION_FOUND" | "INVALID_CONVERSION_ACTION_TYPE";
  /**
   * The reasons for the conversion value rule error
   */
  conversionValueRuleError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_GEO_TARGET_CONSTANT" | "CONFLICTING_INCLUDED_AND_EXCLUDED_GEO_TARGET" | "CONFLICTING_CONDITIONS" | "CANNOT_REMOVE_IF_INCLUDED_IN_VALUE_RULE_SET" | "CONDITION_NOT_ALLOWED" | "FIELD_MUST_BE_UNSET" | "CANNOT_PAUSE_UNLESS_VALUE_RULE_SET_IS_PAUSED" | "UNTARGETABLE_GEO_TARGET" | "INVALID_AUDIENCE_USER_LIST" | "INACCESSIBLE_USER_LIST" | "INVALID_AUDIENCE_USER_INTEREST" | "CANNOT_ADD_RULE_WITH_STATUS_REMOVED" | "NO_DAY_OF_WEEK_SELECTED";
  /**
   * The reasons for the conversion value rule set error
   */
  conversionValueRuleSetError?:  | "UNSPECIFIED" | "UNKNOWN" | "CONFLICTING_VALUE_RULE_CONDITIONS" | "INVALID_VALUE_RULE" | "DIMENSIONS_UPDATE_ONLY_ALLOW_APPEND" | "CONDITION_TYPE_NOT_ALLOWED" | "DUPLICATE_DIMENSIONS" | "INVALID_CAMPAIGN_ID" | "CANNOT_PAUSE_UNLESS_ALL_VALUE_RULES_ARE_PAUSED" | "SHOULD_PAUSE_WHEN_ALL_VALUE_RULES_ARE_PAUSED" | "VALUE_RULES_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE" | "INELIGIBLE_CONVERSION_ACTION_CATEGORIES" | "DIMENSION_NO_CONDITION_USED_WITH_OTHER_DIMENSIONS" | "DIMENSION_NO_CONDITION_NOT_ALLOWED" | "UNSUPPORTED_CONVERSION_ACTION_CATEGORIES" | "DIMENSION_NOT_SUPPORTED_FOR_CAMPAIGN_TYPE";
  /**
   * The reasons for the country code error
   */
  countryCodeError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_COUNTRY_CODE";
  /**
   * The reasons for the criterion error
   */
  criterionError?:  | "UNSPECIFIED" | "UNKNOWN" | "CONCRETE_TYPE_REQUIRED" | "INVALID_EXCLUDED_CATEGORY" | "INVALID_KEYWORD_TEXT" | "KEYWORD_TEXT_TOO_LONG" | "KEYWORD_HAS_TOO_MANY_WORDS" | "KEYWORD_HAS_INVALID_CHARS" | "INVALID_PLACEMENT_URL" | "INVALID_USER_LIST" | "INVALID_USER_INTEREST" | "INVALID_FORMAT_FOR_PLACEMENT_URL" | "PLACEMENT_URL_IS_TOO_LONG" | "PLACEMENT_URL_HAS_ILLEGAL_CHAR" | "PLACEMENT_URL_HAS_MULTIPLE_SITES_IN_LINE" | "PLACEMENT_IS_NOT_AVAILABLE_FOR_TARGETING_OR_EXCLUSION" | "INVALID_TOPIC_PATH" | "INVALID_YOUTUBE_CHANNEL_ID" | "INVALID_YOUTUBE_VIDEO_ID" | "YOUTUBE_VERTICAL_CHANNEL_DEPRECATED" | "YOUTUBE_DEMOGRAPHIC_CHANNEL_DEPRECATED" | "YOUTUBE_URL_UNSUPPORTED" | "CANNOT_EXCLUDE_CRITERIA_TYPE" | "CANNOT_ADD_CRITERIA_TYPE" | "CANNOT_EXCLUDE_SIMILAR_USER_LIST" | "CANNOT_ADD_CLOSED_USER_LIST" | "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_ONLY_CAMPAIGNS" | "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SEARCH_CAMPAIGNS" | "CANNOT_ADD_DISPLAY_ONLY_LISTS_TO_SHOPPING_CAMPAIGNS" | "CANNOT_ADD_USER_INTERESTS_TO_SEARCH_CAMPAIGNS" | "CANNOT_SET_BIDS_ON_CRITERION_TYPE_IN_SEARCH_CAMPAIGNS" | "CANNOT_ADD_URLS_TO_CRITERION_TYPE_FOR_CAMPAIGN_TYPE" | "INVALID_COMBINED_AUDIENCE" | "INVALID_CUSTOM_AFFINITY" | "INVALID_CUSTOM_INTENT" | "INVALID_CUSTOM_AUDIENCE" | "INVALID_IP_ADDRESS" | "INVALID_IP_FORMAT" | "INVALID_MOBILE_APP" | "INVALID_MOBILE_APP_CATEGORY" | "INVALID_CRITERION_ID" | "CANNOT_TARGET_CRITERION" | "CANNOT_TARGET_OBSOLETE_CRITERION" | "CRITERION_ID_AND_TYPE_MISMATCH" | "INVALID_PROXIMITY_RADIUS" | "INVALID_PROXIMITY_RADIUS_UNITS" | "INVALID_STREETADDRESS_LENGTH" | "INVALID_CITYNAME_LENGTH" | "INVALID_REGIONCODE_LENGTH" | "INVALID_REGIONNAME_LENGTH" | "INVALID_POSTALCODE_LENGTH" | "INVALID_COUNTRY_CODE" | "INVALID_LATITUDE" | "INVALID_LONGITUDE" | "PROXIMITY_GEOPOINT_AND_ADDRESS_BOTH_CANNOT_BE_NULL" | "INVALID_PROXIMITY_ADDRESS" | "INVALID_USER_DOMAIN_NAME" | "CRITERION_PARAMETER_TOO_LONG" | "AD_SCHEDULE_TIME_INTERVALS_OVERLAP" | "AD_SCHEDULE_INTERVAL_CANNOT_SPAN_MULTIPLE_DAYS" | "AD_SCHEDULE_INVALID_TIME_INTERVAL" | "AD_SCHEDULE_EXCEEDED_INTERVALS_PER_DAY_LIMIT" | "AD_SCHEDULE_CRITERION_ID_MISMATCHING_FIELDS" | "CANNOT_BID_MODIFY_CRITERION_TYPE" | "CANNOT_BID_MODIFY_CRITERION_CAMPAIGN_OPTED_OUT" | "CANNOT_BID_MODIFY_NEGATIVE_CRITERION" | "BID_MODIFIER_ALREADY_EXISTS" | "FEED_ID_NOT_ALLOWED" | "ACCOUNT_INELIGIBLE_FOR_CRITERIA_TYPE" | "CRITERIA_TYPE_INVALID_FOR_BIDDING_STRATEGY" | "CANNOT_EXCLUDE_CRITERION" | "CANNOT_REMOVE_CRITERION" | "INVALID_PRODUCT_BIDDING_CATEGORY" | "MISSING_SHOPPING_SETTING" | "INVALID_MATCHING_FUNCTION" | "LOCATION_FILTER_NOT_ALLOWED" | "INVALID_FEED_FOR_LOCATION_FILTER" | "LOCATION_FILTER_INVALID" | "CANNOT_SET_GEO_TARGET_CONSTANTS_WITH_FEED_ITEM_SETS" | "CANNOT_SET_BOTH_ASSET_SET_AND_FEED" | "CANNOT_SET_FEED_OR_FEED_ITEM_SETS_FOR_CUSTOMER" | "CANNOT_SET_ASSET_SET_FIELD_FOR_CUSTOMER" | "CANNOT_SET_GEO_TARGET_CONSTANTS_WITH_ASSET_SETS" | "CANNOT_SET_ASSET_SETS_WITH_FEED_ITEM_SETS" | "INVALID_LOCATION_GROUP_ASSET_SET" | "INVALID_LOCATION_GROUP_RADIUS" | "INVALID_LOCATION_GROUP_RADIUS_UNIT" | "CANNOT_ATTACH_CRITERIA_AT_CAMPAIGN_AND_ADGROUP" | "HOTEL_LENGTH_OF_STAY_OVERLAPS_WITH_EXISTING_CRITERION" | "HOTEL_ADVANCE_BOOKING_WINDOW_OVERLAPS_WITH_EXISTING_CRITERION" | "FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING" | "INVALID_WEBPAGE_CONDITION" | "INVALID_WEBPAGE_CONDITION_URL" | "WEBPAGE_CONDITION_URL_CANNOT_BE_EMPTY" | "WEBPAGE_CONDITION_URL_UNSUPPORTED_PROTOCOL" | "WEBPAGE_CONDITION_URL_CANNOT_BE_IP_ADDRESS" | "WEBPAGE_CONDITION_URL_DOMAIN_NOT_CONSISTENT_WITH_CAMPAIGN_SETTING" | "WEBPAGE_CONDITION_URL_CANNOT_BE_PUBLIC_SUFFIX" | "WEBPAGE_CONDITION_URL_INVALID_PUBLIC_SUFFIX" | "WEBPAGE_CONDITION_URL_VALUE_TRACK_VALUE_NOT_SUPPORTED" | "WEBPAGE_CRITERION_URL_EQUALS_CAN_HAVE_ONLY_ONE_CONDITION" | "WEBPAGE_CRITERION_NOT_SUPPORTED_ON_NON_DSA_AD_GROUP" | "CANNOT_TARGET_USER_LIST_FOR_SMART_DISPLAY_CAMPAIGNS" | "CANNOT_TARGET_PLACEMENTS_FOR_SEARCH_CAMPAIGNS" | "LISTING_SCOPE_TOO_MANY_DIMENSION_TYPES" | "LISTING_SCOPE_TOO_MANY_IN_OPERATORS" | "LISTING_SCOPE_IN_OPERATOR_NOT_SUPPORTED" | "DUPLICATE_LISTING_DIMENSION_TYPE" | "DUPLICATE_LISTING_DIMENSION_VALUE" | "CANNOT_SET_BIDS_ON_LISTING_GROUP_SUBDIVISION" | "LISTING_GROUP_ERROR_IN_ANOTHER_OPERATION" | "INVALID_LISTING_GROUP_HIERARCHY" | "LISTING_GROUP_TREE_WAS_INVALID_BEFORE_MUTATION" | "LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN" | "LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE" | "LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS" | "LISTING_GROUP_ALREADY_EXISTS" | "LISTING_GROUP_DOES_NOT_EXIST" | "LISTING_GROUP_CANNOT_BE_REMOVED" | "INVALID_LISTING_GROUP_TYPE" | "LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID" | "LISTING_SCOPE_TOO_LONG" | "LISTING_SCOPE_TOO_MANY_DIMENSIONS" | "LISTING_GROUP_TOO_LONG" | "LISTING_GROUP_TREE_TOO_DEEP" | "INVALID_LISTING_DIMENSION" | "INVALID_LISTING_DIMENSION_TYPE" | "ADVERTISER_NOT_ON_ALLOWLIST_FOR_COMBINED_AUDIENCE_ON_DISPLAY" | "CANNOT_TARGET_REMOVED_COMBINED_AUDIENCE" | "INVALID_COMBINED_AUDIENCE_ID" | "CANNOT_TARGET_REMOVED_CUSTOM_AUDIENCE" | "HOTEL_CHECK_IN_DATE_RANGE_OVERLAPS_WITH_EXISTING_CRITERION" | "HOTEL_CHECK_IN_DATE_RANGE_START_DATE_TOO_EARLY" | "HOTEL_CHECK_IN_DATE_RANGE_END_DATE_TOO_LATE" | "HOTEL_CHECK_IN_DATE_RANGE_REVERSED" | "BROAD_MATCH_MODIFIER_KEYWORD_NOT_ALLOWED" | "ONE_AUDIENCE_ALLOWED_PER_ASSET_GROUP" | "AUDIENCE_NOT_ELIGIBLE_FOR_CAMPAIGN_TYPE" | "AUDIENCE_NOT_ALLOWED_TO_ATTACH_WHEN_AUDIENCE_GROUPED_SET_TO_FALSE" | "CANNOT_TARGET_CUSTOMER_MATCH_USER_LIST" | "NEGATIVE_KEYWORD_SHARED_SET_DOES_NOT_EXIST" | "CANNOT_ADD_REMOVED_NEGATIVE_KEYWORD_SHARED_SET" | "CANNOT_HAVE_MULTIPLE_NEGATIVE_KEYWORD_LIST_PER_ACCOUNT" | "CUSTOMER_CANNOT_ADD_CRITERION_OF_THIS_TYPE" | "CANNOT_TARGET_SIMILAR_USER_LIST" | "CANNOT_ADD_AUDIENCE_SEGMENT_CRITERION_WHEN_AUDIENCE_GROUPED_IS_SET" | "ONE_AUDIENCE_ALLOWED_PER_AD_GROUP" | "INVALID_DETAILED_DEMOGRAPHIC" | "CANNOT_RECOGNIZE_BRAND" | "BRAND_SHARED_SET_DOES_NOT_EXIST" | "CANNOT_ADD_REMOVED_BRAND_SHARED_SET" | "ONLY_EXCLUSION_BRAND_LIST_ALLOWED_FOR_CAMPAIGN_TYPE" | "LOCATION_TARGETING_NOT_ELIGIBLE_FOR_RESTRICTED_CAMPAIGN" | "ONLY_INCLUSION_BRAND_LIST_ALLOWED_FOR_AD_GROUPS" | "CANNOT_ADD_REMOVED_PLACEMENT_LIST_SHARED_SET" | "PLACEMENT_LIST_SHARED_SET_DOES_NOT_EXIST" | "AI_MAX_MUST_BE_ENABLED" | "NOT_AVAILABLE_FOR_AI_MAX_CAMPAIGNS" | "MISSING_EU_POLITICAL_ADVERTISING_SELF_DECLARATION" | "INVALID_CAMPAIGN_TYPE_FOR_THIRD_PARTY_PARTNER_DATA_LIST" | "CANNOT_ADD_USER_LIST_PENDING_PRIVACY_REVIEW" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST_DOES_NOT_EXIST" | "CANNOT_ADD_REMOVED_VERTICAL_ADS_ITEM_GROUP_RULE_LIST_SHARED_SET" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_ENABLED_TRAVEL_FEED" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_AI_MAX" | "VERTICAL_ADS_ITEM_GROUP_RULE_NOT_SUPPORTED_FOR_THE_VERTICAL_TYPE";
  /**
   * The reasons for the currency code error
   */
  currencyCodeError?:  | "UNSPECIFIED" | "UNKNOWN" | "UNSUPPORTED";
  /**
   * The reasons for the currency errors.
   */
  currencyError?:  | "UNSPECIFIED" | "UNKNOWN" | "VALUE_NOT_MULTIPLE_OF_BILLABLE_UNIT";
  /**
   * The reasons for the custom audience error
   */
  customAudienceError?:  | "UNSPECIFIED" | "UNKNOWN" | "NAME_ALREADY_USED" | "CANNOT_REMOVE_WHILE_IN_USE" | "RESOURCE_ALREADY_REMOVED" | "MEMBER_TYPE_AND_PARAMETER_ALREADY_EXISTED" | "INVALID_MEMBER_TYPE" | "MEMBER_TYPE_AND_VALUE_DOES_NOT_MATCH" | "POLICY_VIOLATION" | "INVALID_TYPE_CHANGE";
  /**
   * The reasons for the custom column error
   */
  customColumnError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOM_COLUMN_NOT_FOUND" | "CUSTOM_COLUMN_NOT_AVAILABLE";
  /**
   * The reasons for the custom conversion goal error
   */
  customConversionGoalError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_CONVERSION_ACTION" | "CONVERSION_ACTION_NOT_ENABLED" | "CANNOT_REMOVE_LINKED_CUSTOM_CONVERSION_GOAL" | "CUSTOM_GOAL_DUPLICATE_NAME" | "DUPLICATE_CONVERSION_ACTION_LIST" | "NON_BIDDABLE_CONVERSION_ACTION_NOT_ELIGIBLE_FOR_CUSTOM_GOAL";
  /**
   * The reasons for the customer client link error
   */
  customerClientLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "CLIENT_ALREADY_INVITED_BY_THIS_MANAGER" | "CLIENT_ALREADY_MANAGED_IN_HIERARCHY" | "CYCLIC_LINK_NOT_ALLOWED" | "CUSTOMER_HAS_TOO_MANY_ACCOUNTS" | "CLIENT_HAS_TOO_MANY_INVITATIONS" | "CANNOT_HIDE_OR_UNHIDE_MANAGER_ACCOUNTS" | "CUSTOMER_HAS_TOO_MANY_ACCOUNTS_AT_MANAGER" | "CLIENT_HAS_TOO_MANY_MANAGERS";
  /**
   * The reasons for the customer customizer error.
   */
  customerCustomizerError?:  | "UNSPECIFIED" | "UNKNOWN";
  /**
   * The reasons for the customer error
   */
  customerError?:  | "UNSPECIFIED" | "UNKNOWN" | "STATUS_CHANGE_DISALLOWED" | "ACCOUNT_NOT_SET_UP" | "CREATION_DENIED_FOR_POLICY_VIOLATION" | "CREATION_DENIED_INELIGIBLE_MCC";
  /**
   * The reasons for the customer feed error
   */
  customerFeedError?:  | "UNSPECIFIED" | "UNKNOWN" | "FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "CANNOT_CREATE_FOR_REMOVED_FEED" | "CANNOT_CREATE_ALREADY_EXISTING_CUSTOMER_FEED" | "CANNOT_MODIFY_REMOVED_CUSTOMER_FEED" | "INVALID_PLACEHOLDER_TYPE" | "MISSING_FEEDMAPPING_FOR_PLACEHOLDER_TYPE" | "PLACEHOLDER_TYPE_NOT_ALLOWED_ON_CUSTOMER_FEED";
  /**
   * The reasons for the customer lifecycle goal error
   */
  customerLifecycleGoalError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_ACQUISITION_VALUE_MISSING" | "CUSTOMER_ACQUISITION_INVALID_VALUE" | "CUSTOMER_ACQUISITION_INVALID_HIGH_LIFETIME_VALUE" | "CUSTOMER_ACQUISITION_VALUE_CANNOT_BE_CLEARED" | "CUSTOMER_ACQUISITION_HIGH_LIFETIME_VALUE_CANNOT_BE_CLEARED" | "INVALID_EXISTING_USER_LIST" | "INVALID_HIGH_LIFETIME_VALUE_USER_LIST";
  /**
   * The reasons for the customer manager link error
   */
  customerManagerLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_PENDING_INVITE" | "SAME_CLIENT_MORE_THAN_ONCE_PER_CALL" | "MANAGER_HAS_MAX_NUMBER_OF_LINKED_ACCOUNTS" | "CANNOT_UNLINK_ACCOUNT_WITHOUT_ACTIVE_USER" | "CANNOT_REMOVE_LAST_CLIENT_ACCOUNT_OWNER" | "CANNOT_CHANGE_ROLE_BY_NON_ACCOUNT_OWNER" | "CANNOT_CHANGE_ROLE_FOR_NON_ACTIVE_LINK_ACCOUNT" | "DUPLICATE_CHILD_FOUND" | "TEST_ACCOUNT_LINKS_TOO_MANY_CHILD_ACCOUNTS";
  /**
   * The reasons for the customer SK Ad network conversion value schema error
   */
  customerSkAdNetworkConversionValueSchemaError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_LINK_ID" | "INVALID_APP_ID" | "INVALID_SCHEMA" | "LINK_CODE_NOT_FOUND" | "INVALID_EVENT_COUNTER" | "INVALID_EVENT_NAME";
  /**
   * The reasons for the customer user access mutate error
   */
  customerUserAccessError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_USER_ID" | "REMOVAL_DISALLOWED" | "DISALLOWED_ACCESS_ROLE" | "LAST_ADMIN_USER_OF_SERVING_CUSTOMER" | "LAST_ADMIN_USER_OF_MANAGER";
  /**
   * The reasons for the custom interest error
   */
  customInterestError?:  | "UNSPECIFIED" | "UNKNOWN" | "NAME_ALREADY_USED" | "CUSTOM_INTEREST_MEMBER_ID_AND_TYPE_PARAMETER_NOT_PRESENT_IN_REMOVE" | "TYPE_AND_PARAMETER_NOT_FOUND" | "TYPE_AND_PARAMETER_ALREADY_EXISTED" | "INVALID_CUSTOM_INTEREST_MEMBER_TYPE" | "CANNOT_REMOVE_WHILE_IN_USE" | "CANNOT_CHANGE_TYPE";
  /**
   * The reasons for the customizer attribute error.
   */
  customizerAttributeError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_CUSTOMIZER_ATTRIBUTE_NAME";
  /**
   * The reasons for the database error.
   */
  databaseError?:  | "UNSPECIFIED" | "UNKNOWN" | "CONCURRENT_MODIFICATION" | "DATA_CONSTRAINT_VIOLATION" | "REQUEST_TOO_LARGE";
  /**
   * The reasons for the data link error
   */
  dataLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "YOUTUBE_CHANNEL_ID_INVALID" | "YOUTUBE_VIDEO_ID_INVALID" | "YOUTUBE_VIDEO_FROM_DIFFERENT_CHANNEL" | "PERMISSION_DENIED" | "INVALID_STATUS" | "INVALID_UPDATE_STATUS" | "INVALID_RESOURCE_NAME";
  /**
   * The reasons for the date error
   */
  dateError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_FIELD_VALUES_IN_DATE" | "INVALID_FIELD_VALUES_IN_DATE_TIME" | "INVALID_STRING_DATE" | "INVALID_STRING_DATE_TIME_MICROS" | "INVALID_STRING_DATE_TIME_SECONDS" | "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET" | "EARLIER_THAN_MINIMUM_DATE" | "LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL" | "DATE_RANGE_ERROR_START_TIME_MUST_BE_THE_START_OF_A_DAY" | "DATE_RANGE_ERROR_END_TIME_MUST_BE_THE_END_OF_A_DAY";
  /**
   * The reasons for the date range error
   */
  dateRangeError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_DATE" | "START_DATE_AFTER_END_DATE" | "CANNOT_SET_DATE_TO_PAST" | "AFTER_MAXIMUM_ALLOWABLE_DATE" | "CANNOT_MODIFY_START_DATE_IF_ALREADY_STARTED";
  /**
   * The reasons for the distinct error
   */
  distinctError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_ELEMENT" | "DUPLICATE_TYPE";
  /**
   * The reason for enum error.
   */
  enumError?:  | "UNSPECIFIED" | "UNKNOWN" | "ENUM_VALUE_NOT_PERMITTED";
  /**
   * The reasons for the experiment arm error
   */
  experimentArmError?:  | "UNSPECIFIED" | "UNKNOWN" | "EXPERIMENT_ARM_COUNT_LIMIT_EXCEEDED" | "INVALID_CAMPAIGN_STATUS" | "DUPLICATE_EXPERIMENT_ARM_NAME" | "CANNOT_SET_TREATMENT_ARM_CAMPAIGN" | "CANNOT_MODIFY_CAMPAIGN_IDS" | "CANNOT_MODIFY_CAMPAIGN_WITHOUT_SUFFIX_SET" | "CANNOT_MUTATE_TRAFFIC_SPLIT_AFTER_START" | "CANNOT_ADD_CAMPAIGN_WITH_SHARED_BUDGET" | "CANNOT_ADD_CAMPAIGN_WITH_CUSTOM_BUDGET" | "CANNOT_ADD_CAMPAIGNS_WITH_DYNAMIC_ASSETS_ENABLED" | "UNSUPPORTED_CAMPAIGN_ADVERTISING_CHANNEL_SUB_TYPE" | "CANNOT_ADD_BASE_CAMPAIGN_WITH_DATE_RANGE" | "BIDDING_STRATEGY_NOT_SUPPORTED_IN_EXPERIMENTS" | "TRAFFIC_SPLIT_NOT_SUPPORTED_FOR_CHANNEL_TYPE";
  /**
   * The reasons for the experiment error
   */
  experimentError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_SET_START_DATE_IN_PAST" | "END_DATE_BEFORE_START_DATE" | "START_DATE_TOO_FAR_IN_FUTURE" | "DUPLICATE_EXPERIMENT_NAME" | "CANNOT_MODIFY_REMOVED_EXPERIMENT" | "START_DATE_ALREADY_PASSED" | "CANNOT_SET_END_DATE_IN_PAST" | "CANNOT_SET_STATUS_TO_REMOVED" | "CANNOT_MODIFY_PAST_END_DATE" | "INVALID_STATUS" | "INVALID_CAMPAIGN_CHANNEL_TYPE" | "OVERLAPPING_MEMBERS_AND_DATE_RANGE" | "INVALID_TRIAL_ARM_TRAFFIC_SPLIT" | "TRAFFIC_SPLIT_OVERLAPPING" | "SUM_TRIAL_ARM_TRAFFIC_UNEQUALS_TO_TRIAL_TRAFFIC_SPLIT_DENOMINATOR" | "CANNOT_MODIFY_TRAFFIC_SPLIT_AFTER_START" | "EXPERIMENT_NOT_FOUND" | "EXPERIMENT_NOT_YET_STARTED" | "CANNOT_HAVE_MULTIPLE_CONTROL_ARMS" | "IN_DESIGN_CAMPAIGNS_NOT_SET" | "CANNOT_SET_STATUS_TO_GRADUATED" | "CANNOT_CREATE_EXPERIMENT_CAMPAIGN_WITH_SHARED_BUDGET" | "CANNOT_CREATE_EXPERIMENT_CAMPAIGN_WITH_CUSTOM_BUDGET" | "STATUS_TRANSITION_INVALID" | "DUPLICATE_EXPERIMENT_CAMPAIGN_NAME" | "CANNOT_REMOVE_IN_CREATION_EXPERIMENT" | "CANNOT_ADD_CAMPAIGN_WITH_DEPRECATED_AD_TYPES" | "CANNOT_ENABLE_SYNC_FOR_UNSUPPORTED_EXPERIMENT_TYPE" | "INVALID_DURATION_FOR_AN_EXPERIMENT" | "MISSING_EU_POLITICAL_ADVERTISING_SELF_DECLARATION";
  /**
   * The reasons for the extension feed item error
   */
  extensionFeedItemError?:  | "UNSPECIFIED" | "UNKNOWN" | "VALUE_OUT_OF_RANGE" | "URL_LIST_TOO_LONG" | "CANNOT_HAVE_RESTRICTION_ON_EMPTY_GEO_TARGETING" | "CANNOT_SET_WITH_FINAL_URLS" | "CANNOT_SET_WITHOUT_FINAL_URLS" | "INVALID_PHONE_NUMBER" | "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY" | "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED" | "PREMIUM_RATE_NUMBER_NOT_ALLOWED" | "DISALLOWED_NUMBER_TYPE" | "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT" | "VANITY_PHONE_NUMBER_NOT_ALLOWED" | "INVALID_CALL_CONVERSION_ACTION" | "CUSTOMER_NOT_ON_ALLOWLIST_FOR_CALLTRACKING" | "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY" | "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED" | "INVALID_APP_ID" | "QUOTES_IN_REVIEW_EXTENSION_SNIPPET" | "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET" | "REVIEW_EXTENSION_SOURCE_INELIGIBLE" | "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT" | "INCONSISTENT_CURRENCY_CODES" | "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS" | "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION" | "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS" | "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS" | "UNSUPPORTED_VALUE" | "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE" | "INVALID_DEVICE_PREFERENCE" | "INVALID_SCHEDULE_END" | "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE" | "INVALID_SNIPPETS_HEADER" | "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM" | "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY" | "CONFLICTING_CALL_CONVERSION_SETTINGS" | "EXTENSION_TYPE_MISMATCH" | "EXTENSION_SUBTYPE_REQUIRED" | "EXTENSION_TYPE_UNSUPPORTED" | "CANNOT_OPERATE_ON_FEED_WITH_MULTIPLE_MAPPINGS" | "CANNOT_OPERATE_ON_FEED_WITH_KEY_ATTRIBUTES" | "INVALID_PRICE_FORMAT" | "PROMOTION_INVALID_TIME" | "TOO_MANY_DECIMAL_PLACES_SPECIFIED" | "CONCRETE_EXTENSION_TYPE_REQUIRED" | "SCHEDULE_END_NOT_AFTER_START";
  /**
   * The reasons for the extension setting error
   */
  extensionSettingError?:  | "UNSPECIFIED" | "UNKNOWN" | "EXTENSIONS_REQUIRED" | "FEED_TYPE_EXTENSION_TYPE_MISMATCH" | "INVALID_FEED_TYPE" | "INVALID_FEED_TYPE_FOR_CUSTOMER_EXTENSION_SETTING" | "CANNOT_CHANGE_FEED_ITEM_ON_CREATE" | "CANNOT_UPDATE_NEWLY_CREATED_EXTENSION" | "NO_EXISTING_AD_GROUP_EXTENSION_SETTING_FOR_TYPE" | "NO_EXISTING_CAMPAIGN_EXTENSION_SETTING_FOR_TYPE" | "NO_EXISTING_CUSTOMER_EXTENSION_SETTING_FOR_TYPE" | "AD_GROUP_EXTENSION_SETTING_ALREADY_EXISTS" | "CAMPAIGN_EXTENSION_SETTING_ALREADY_EXISTS" | "CUSTOMER_EXTENSION_SETTING_ALREADY_EXISTS" | "AD_GROUP_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "CAMPAIGN_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "CUSTOMER_FEED_ALREADY_EXISTS_FOR_PLACEHOLDER_TYPE" | "VALUE_OUT_OF_RANGE" | "CANNOT_SET_FIELD_WITH_FINAL_URLS" | "FINAL_URLS_NOT_SET" | "INVALID_PHONE_NUMBER" | "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY" | "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED" | "PREMIUM_RATE_NUMBER_NOT_ALLOWED" | "DISALLOWED_NUMBER_TYPE" | "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT" | "VANITY_PHONE_NUMBER_NOT_ALLOWED" | "INVALID_COUNTRY_CODE" | "INVALID_CALL_CONVERSION_TYPE_ID" | "CUSTOMER_NOT_IN_ALLOWLIST_FOR_CALLTRACKING" | "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY" | "INVALID_APP_ID" | "QUOTES_IN_REVIEW_EXTENSION_SNIPPET" | "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET" | "REVIEW_EXTENSION_SOURCE_NOT_ELIGIBLE" | "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT" | "MISSING_FIELD" | "INCONSISTENT_CURRENCY_CODES" | "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS" | "PRICE_ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION" | "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS" | "PRICE_EXTENSION_HAS_TOO_MANY_ITEMS" | "UNSUPPORTED_VALUE" | "INVALID_DEVICE_PREFERENCE" | "INVALID_SCHEDULE_END" | "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE" | "OVERLAPPING_SCHEDULES_NOT_ALLOWED" | "SCHEDULE_END_NOT_AFTER_START" | "TOO_MANY_SCHEDULES_PER_DAY" | "DUPLICATE_EXTENSION_FEED_ITEM_EDIT" | "INVALID_SNIPPETS_HEADER" | "PHONE_NUMBER_NOT_SUPPORTED_WITH_CALLTRACKING_FOR_COUNTRY" | "CAMPAIGN_TARGETING_MISMATCH" | "CANNOT_OPERATE_ON_REMOVED_FEED" | "EXTENSION_TYPE_REQUIRED" | "INCOMPATIBLE_UNDERLYING_MATCHING_FUNCTION" | "START_DATE_AFTER_END_DATE" | "INVALID_PRICE_FORMAT" | "PROMOTION_INVALID_TIME" | "PROMOTION_CANNOT_SET_PERCENT_DISCOUNT_AND_MONEY_DISCOUNT" | "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT" | "TOO_MANY_DECIMAL_PLACES_SPECIFIED" | "INVALID_LANGUAGE_CODE" | "UNSUPPORTED_LANGUAGE" | "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED" | "EXTENSION_SETTING_UPDATE_IS_A_NOOP" | "DISALLOWED_TEXT";
  /**
   * The reasons for the feed attribute reference error
   */
  feedAttributeReferenceError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_REFERENCE_REMOVED_FEED" | "INVALID_FEED_NAME" | "INVALID_FEED_ATTRIBUTE_NAME";
  /**
   * The reasons for the feed error
   */
  feedError?:  | "UNSPECIFIED" | "UNKNOWN" | "ATTRIBUTE_NAMES_NOT_UNIQUE" | "ATTRIBUTES_DO_NOT_MATCH_EXISTING_ATTRIBUTES" | "CANNOT_SPECIFY_USER_ORIGIN_FOR_SYSTEM_FEED" | "CANNOT_SPECIFY_GOOGLE_ORIGIN_FOR_NON_SYSTEM_FEED" | "CANNOT_SPECIFY_FEED_ATTRIBUTES_FOR_SYSTEM_FEED" | "CANNOT_UPDATE_FEED_ATTRIBUTES_WITH_ORIGIN_GOOGLE" | "FEED_REMOVED" | "INVALID_ORIGIN_VALUE" | "FEED_ORIGIN_IS_NOT_USER" | "INVALID_AUTH_TOKEN_FOR_EMAIL" | "INVALID_EMAIL" | "DUPLICATE_FEED_NAME" | "INVALID_FEED_NAME" | "MISSING_OAUTH_INFO" | "NEW_ATTRIBUTE_CANNOT_BE_PART_OF_UNIQUE_KEY" | "TOO_MANY_ATTRIBUTES" | "INVALID_BUSINESS_ACCOUNT" | "BUSINESS_ACCOUNT_CANNOT_ACCESS_LOCATION_ACCOUNT" | "INVALID_AFFILIATE_CHAIN_ID" | "DUPLICATE_SYSTEM_FEED" | "GMB_ACCESS_ERROR" | "CANNOT_HAVE_LOCATION_AND_AFFILIATE_LOCATION_FEEDS" | "LEGACY_EXTENSION_TYPE_READ_ONLY";
  /**
   * The reasons for the feed item error
   */
  feedItemError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_CONVERT_ATTRIBUTE_VALUE_FROM_STRING" | "CANNOT_OPERATE_ON_REMOVED_FEED_ITEM" | "DATE_TIME_MUST_BE_IN_ACCOUNT_TIME_ZONE" | "KEY_ATTRIBUTES_NOT_FOUND" | "INVALID_URL" | "MISSING_KEY_ATTRIBUTES" | "KEY_ATTRIBUTES_NOT_UNIQUE" | "CANNOT_MODIFY_KEY_ATTRIBUTE_VALUE" | "SIZE_TOO_LARGE_FOR_MULTI_VALUE_ATTRIBUTE" | "LEGACY_FEED_TYPE_READ_ONLY";
  /**
   * The reasons for the feed item set error
   */
  feedItemSetError?:  | "UNSPECIFIED" | "UNKNOWN" | "FEED_ITEM_SET_REMOVED" | "CANNOT_CLEAR_DYNAMIC_FILTER" | "CANNOT_CREATE_DYNAMIC_FILTER" | "INVALID_FEED_TYPE" | "DUPLICATE_NAME" | "WRONG_DYNAMIC_FILTER_FOR_FEED_TYPE" | "DYNAMIC_FILTER_INVALID_CHAIN_IDS";
  /**
   * The reasons for the feed item set link error
   */
  feedItemSetLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "FEED_ID_MISMATCH" | "NO_MUTATE_ALLOWED_FOR_DYNAMIC_SET";
  /**
   * The reasons for the feed item target error
   */
  feedItemTargetError?:  | "UNSPECIFIED" | "UNKNOWN" | "MUST_SET_TARGET_ONEOF_ON_CREATE" | "FEED_ITEM_TARGET_ALREADY_EXISTS" | "FEED_ITEM_SCHEDULES_CANNOT_OVERLAP" | "TARGET_LIMIT_EXCEEDED_FOR_GIVEN_TYPE" | "TOO_MANY_SCHEDULES_PER_DAY" | "CANNOT_HAVE_ENABLED_CAMPAIGN_AND_ENABLED_AD_GROUP_TARGETS" | "DUPLICATE_AD_SCHEDULE" | "DUPLICATE_KEYWORD";
  /**
   * The reasons for the feed item validation error
   */
  feedItemValidationError?:  | "UNSPECIFIED" | "UNKNOWN" | "STRING_TOO_SHORT" | "STRING_TOO_LONG" | "VALUE_NOT_SPECIFIED" | "INVALID_DOMESTIC_PHONE_NUMBER_FORMAT" | "INVALID_PHONE_NUMBER" | "PHONE_NUMBER_NOT_SUPPORTED_FOR_COUNTRY" | "PREMIUM_RATE_NUMBER_NOT_ALLOWED" | "DISALLOWED_NUMBER_TYPE" | "VALUE_OUT_OF_RANGE" | "CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY" | "CUSTOMER_NOT_IN_ALLOWLIST_FOR_CALLTRACKING" | "INVALID_COUNTRY_CODE" | "INVALID_APP_ID" | "MISSING_ATTRIBUTES_FOR_FIELDS" | "INVALID_TYPE_ID" | "INVALID_EMAIL_ADDRESS" | "INVALID_HTTPS_URL" | "MISSING_DELIVERY_ADDRESS" | "START_DATE_AFTER_END_DATE" | "MISSING_FEED_ITEM_START_TIME" | "MISSING_FEED_ITEM_END_TIME" | "MISSING_FEED_ITEM_ID" | "VANITY_PHONE_NUMBER_NOT_ALLOWED" | "INVALID_REVIEW_EXTENSION_SNIPPET" | "INVALID_NUMBER_FORMAT" | "INVALID_DATE_FORMAT" | "INVALID_PRICE_FORMAT" | "UNKNOWN_PLACEHOLDER_FIELD" | "MISSING_ENHANCED_SITELINK_DESCRIPTION_LINE" | "REVIEW_EXTENSION_SOURCE_INELIGIBLE" | "HYPHENS_IN_REVIEW_EXTENSION_SNIPPET" | "DOUBLE_QUOTES_IN_REVIEW_EXTENSION_SNIPPET" | "QUOTES_IN_REVIEW_EXTENSION_SNIPPET" | "INVALID_FORM_ENCODED_PARAMS" | "INVALID_URL_PARAMETER_NAME" | "NO_GEOCODING_RESULT" | "SOURCE_NAME_IN_REVIEW_EXTENSION_TEXT" | "CARRIER_SPECIFIC_SHORT_NUMBER_NOT_ALLOWED" | "INVALID_PLACEHOLDER_FIELD_ID" | "INVALID_URL_TAG" | "LIST_TOO_LONG" | "INVALID_ATTRIBUTES_COMBINATION" | "DUPLICATE_VALUES" | "INVALID_CALL_CONVERSION_ACTION_ID" | "CANNOT_SET_WITHOUT_FINAL_URLS" | "APP_ID_DOESNT_EXIST_IN_APP_STORE" | "INVALID_FINAL_URL" | "INVALID_TRACKING_URL" | "INVALID_FINAL_URL_FOR_APP_DOWNLOAD_URL" | "LIST_TOO_SHORT" | "INVALID_USER_ACTION" | "INVALID_TYPE_NAME" | "INVALID_EVENT_CHANGE_STATUS" | "INVALID_SNIPPETS_HEADER" | "INVALID_ANDROID_APP_LINK" | "NUMBER_TYPE_WITH_CALLTRACKING_NOT_SUPPORTED_FOR_COUNTRY" | "RESERVED_KEYWORD_OTHER" | "DUPLICATE_OPTION_LABELS" | "DUPLICATE_OPTION_PREFILLS" | "UNEQUAL_LIST_LENGTHS" | "INCONSISTENT_CURRENCY_CODES" | "PRICE_EXTENSION_HAS_DUPLICATED_HEADERS" | "ITEM_HAS_DUPLICATED_HEADER_AND_DESCRIPTION" | "PRICE_EXTENSION_HAS_TOO_FEW_ITEMS" | "UNSUPPORTED_VALUE" | "INVALID_FINAL_MOBILE_URL" | "INVALID_KEYWORDLESS_AD_RULE_LABEL" | "VALUE_TRACK_PARAMETER_NOT_SUPPORTED" | "UNSUPPORTED_VALUE_IN_SELECTED_LANGUAGE" | "INVALID_IOS_APP_LINK" | "MISSING_IOS_APP_LINK_OR_IOS_APP_STORE_ID" | "PROMOTION_INVALID_TIME" | "PROMOTION_CANNOT_SET_PERCENT_OFF_AND_MONEY_AMOUNT_OFF" | "PROMOTION_CANNOT_SET_PROMOTION_CODE_AND_ORDERS_OVER_AMOUNT" | "TOO_MANY_DECIMAL_PLACES_SPECIFIED" | "AD_CUSTOMIZERS_NOT_ALLOWED" | "INVALID_LANGUAGE_CODE" | "UNSUPPORTED_LANGUAGE" | "IF_FUNCTION_NOT_ALLOWED" | "INVALID_FINAL_URL_SUFFIX" | "INVALID_TAG_IN_FINAL_URL_SUFFIX" | "INVALID_FINAL_URL_SUFFIX_FORMAT" | "CUSTOMER_CONSENT_FOR_CALL_RECORDING_REQUIRED" | "ONLY_ONE_DELIVERY_OPTION_IS_ALLOWED" | "NO_DELIVERY_OPTION_IS_SET" | "INVALID_CONVERSION_REPORTING_STATE" | "IMAGE_SIZE_WRONG" | "EMAIL_DELIVERY_NOT_AVAILABLE_IN_COUNTRY" | "AUTO_REPLY_NOT_AVAILABLE_IN_COUNTRY" | "INVALID_LATITUDE_VALUE" | "INVALID_LONGITUDE_VALUE" | "TOO_MANY_LABELS" | "INVALID_IMAGE_URL" | "MISSING_LATITUDE_VALUE" | "MISSING_LONGITUDE_VALUE" | "ADDRESS_NOT_FOUND" | "ADDRESS_NOT_TARGETABLE" | "INVALID_ASSET_ID" | "INCOMPATIBLE_ASSET_TYPE" | "IMAGE_ERROR_UNEXPECTED_SIZE" | "IMAGE_ERROR_ASPECT_RATIO_NOT_ALLOWED" | "IMAGE_ERROR_FILE_TOO_LARGE" | "IMAGE_ERROR_FORMAT_NOT_ALLOWED" | "IMAGE_ERROR_CONSTRAINTS_VIOLATED" | "IMAGE_ERROR_SERVER_ERROR";
  /**
   * The reasons for the feed mapping error
   */
  feedMappingError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_PLACEHOLDER_FIELD" | "INVALID_CRITERION_FIELD" | "INVALID_PLACEHOLDER_TYPE" | "INVALID_CRITERION_TYPE" | "NO_ATTRIBUTE_FIELD_MAPPINGS" | "FEED_ATTRIBUTE_TYPE_MISMATCH" | "CANNOT_OPERATE_ON_MAPPINGS_FOR_SYSTEM_GENERATED_FEED" | "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_TYPE" | "MULTIPLE_MAPPINGS_FOR_CRITERION_TYPE" | "MULTIPLE_MAPPINGS_FOR_PLACEHOLDER_FIELD" | "MULTIPLE_MAPPINGS_FOR_CRITERION_FIELD" | "UNEXPECTED_ATTRIBUTE_FIELD_MAPPINGS" | "LOCATION_PLACEHOLDER_ONLY_FOR_PLACES_FEEDS" | "CANNOT_MODIFY_MAPPINGS_FOR_TYPED_FEED" | "INVALID_PLACEHOLDER_TYPE_FOR_NON_SYSTEM_GENERATED_FEED" | "INVALID_PLACEHOLDER_TYPE_FOR_SYSTEM_GENERATED_FEED_TYPE" | "ATTRIBUTE_FIELD_MAPPING_MISSING_FIELD" | "LEGACY_FEED_TYPE_READ_ONLY";
  /**
   * The reasons for the field error
   */
  fieldError?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUIRED" | "IMMUTABLE_FIELD" | "INVALID_VALUE" | "VALUE_MUST_BE_UNSET" | "REQUIRED_NONEMPTY_LIST" | "FIELD_CANNOT_BE_CLEARED" | "BLOCKED_VALUE" | "FIELD_CAN_ONLY_BE_CLEARED";
  /**
   * An error with a field mask
   */
  fieldMaskError?:  | "UNSPECIFIED" | "UNKNOWN" | "FIELD_MASK_MISSING" | "FIELD_MASK_NOT_ALLOWED" | "FIELD_NOT_FOUND" | "FIELD_HAS_SUBFIELDS";
  /**
   * The reasons for the final url expansion asset view error
   */
  finalUrlExpansionAssetViewError?:  | "UNSPECIFIED" | "UNKNOWN" | "MISSING_REQUIRED_FILTER" | "REQUIRES_ADVERTISING_CHANNEL_TYPE_FILTER" | "INVALID_ADVERTISING_CHANNEL_TYPE_IN_FILTER" | "CANNOT_SELECT_ASSET_GROUP" | "CANNOT_SELECT_AD_GROUP" | "REQUIRES_FILTER_BY_SINGLE_RESOURCE" | "CANNOT_SELECT_BOTH_AD_GROUP_AND_ASSET_GROUP" | "CANNOT_FILTER_BY_BOTH_AD_GROUP_AND_ASSET_GROUP";
  /**
   * The reasons for the function error
   */
  functionError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_FUNCTION_FORMAT" | "DATA_TYPE_MISMATCH" | "INVALID_CONJUNCTION_OPERANDS" | "INVALID_NUMBER_OF_OPERANDS" | "INVALID_OPERAND_TYPE" | "INVALID_OPERATOR" | "INVALID_REQUEST_CONTEXT_TYPE" | "INVALID_FUNCTION_FOR_CALL_PLACEHOLDER" | "INVALID_FUNCTION_FOR_PLACEHOLDER" | "INVALID_OPERAND" | "MISSING_CONSTANT_OPERAND_VALUE" | "INVALID_CONSTANT_OPERAND_VALUE" | "INVALID_NESTING" | "MULTIPLE_FEED_IDS_NOT_SUPPORTED" | "INVALID_FUNCTION_FOR_FEED_WITH_FIXED_SCHEMA" | "INVALID_ATTRIBUTE_NAME";
  /**
   * The reasons for the function parsing error
   */
  functionParsingError?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_MORE_INPUT" | "EXPECTED_CHARACTER" | "UNEXPECTED_SEPARATOR" | "UNMATCHED_LEFT_BRACKET" | "UNMATCHED_RIGHT_BRACKET" | "TOO_MANY_NESTED_FUNCTIONS" | "MISSING_RIGHT_HAND_OPERAND" | "INVALID_OPERATOR_NAME" | "FEED_ATTRIBUTE_OPERAND_ARGUMENT_NOT_INTEGER" | "NO_OPERANDS" | "TOO_MANY_OPERANDS";
  /**
   * The reasons for the geo target constant suggestion error.
   */
  geoTargetConstantSuggestionError?:  | "UNSPECIFIED" | "UNKNOWN" | "LOCATION_NAME_SIZE_LIMIT" | "LOCATION_NAME_LIMIT" | "INVALID_COUNTRY_CODE" | "REQUEST_PARAMETERS_UNSET";
  /**
   * The reasons for the goal error.
   */
  goalError?:  | "UNSPECIFIED" | "UNKNOWN" | "RETENTION_GOAL_ALREADY_EXISTS" | "HIGH_LIFETIME_VALUE_PRESENT_BUT_VALUE_ABSENT" | "HIGH_LIFETIME_VALUE_LESS_THAN_OR_EQUAL_TO_VALUE" | "CUSTOMER_LIFECYCLE_OPTIMIZATION_ACCOUNT_TYPE_NOT_ALLOWED";
  /**
   * The reasons for the header error.
   */
  headerError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_LOGIN_CUSTOMER_ID" | "INVALID_LINKED_CUSTOMER_ID";
  /**
   * The reasons for an identity verification error.
   */
  identityVerificationError?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_EFFECTIVE_BILLING" | "BILLING_NOT_ON_MONTHLY_INVOICING" | "VERIFICATION_ALREADY_STARTED";
  /**
   * The reasons for the id error
   */
  idError?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_FOUND";
  /**
   * The reasons for the image error
   */
  imageError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_IMAGE" | "STORAGE_ERROR" | "BAD_REQUEST" | "UNEXPECTED_SIZE" | "ANIMATED_NOT_ALLOWED" | "ANIMATION_TOO_LONG" | "SERVER_ERROR" | "CMYK_JPEG_NOT_ALLOWED" | "FLASH_NOT_ALLOWED" | "FLASH_WITHOUT_CLICKTAG" | "FLASH_ERROR_AFTER_FIXING_CLICK_TAG" | "ANIMATED_VISUAL_EFFECT" | "FLASH_ERROR" | "LAYOUT_PROBLEM" | "PROBLEM_READING_IMAGE_FILE" | "ERROR_STORING_IMAGE" | "ASPECT_RATIO_NOT_ALLOWED" | "FLASH_HAS_NETWORK_OBJECTS" | "FLASH_HAS_NETWORK_METHODS" | "FLASH_HAS_URL" | "FLASH_HAS_MOUSE_TRACKING" | "FLASH_HAS_RANDOM_NUM" | "FLASH_SELF_TARGETS" | "FLASH_BAD_GETURL_TARGET" | "FLASH_VERSION_NOT_SUPPORTED" | "FLASH_WITHOUT_HARD_CODED_CLICK_URL" | "INVALID_FLASH_FILE" | "FAILED_TO_FIX_CLICK_TAG_IN_FLASH" | "FLASH_ACCESSES_NETWORK_RESOURCES" | "FLASH_EXTERNAL_JS_CALL" | "FLASH_EXTERNAL_FS_CALL" | "FILE_TOO_LARGE" | "IMAGE_DATA_TOO_LARGE" | "IMAGE_PROCESSING_ERROR" | "IMAGE_TOO_SMALL" | "INVALID_INPUT" | "PROBLEM_READING_FILE" | "IMAGE_CONSTRAINTS_VIOLATED" | "FORMAT_NOT_ALLOWED";
  /**
   * The reasons for the incentive error
   */
  incentiveError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_INCENTIVE_ID";
  /**
   * An unexpected server-side error.
   */
  internalError?:  | "UNSPECIFIED" | "UNKNOWN" | "INTERNAL_ERROR" | "ERROR_CODE_NOT_PUBLISHED" | "TRANSIENT_ERROR" | "DEADLINE_EXCEEDED";
  /**
   * The reasons for invalid parameter errors.
   */
  invalidParameterError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_CURRENCY_CODE";
  /**
   * The reasons for the invoice error
   */
  invoiceError?:  | "UNSPECIFIED" | "UNKNOWN" | "YEAR_MONTH_TOO_OLD" | "NOT_INVOICED_CUSTOMER" | "BILLING_SETUP_NOT_APPROVED" | "BILLING_SETUP_NOT_ON_MONTHLY_INVOICING" | "NON_SERVING_CUSTOMER";
  /**
   * The reason for keyword plan ad group error.
   */
  keywordPlanAdGroupError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_NAME" | "DUPLICATE_NAME";
  /**
   * The reason for keyword plan ad group keyword error.
   */
  keywordPlanAdGroupKeywordError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_KEYWORD_MATCH_TYPE" | "DUPLICATE_KEYWORD" | "KEYWORD_TEXT_TOO_LONG" | "KEYWORD_HAS_INVALID_CHARS" | "KEYWORD_HAS_TOO_MANY_WORDS" | "INVALID_KEYWORD_TEXT" | "NEGATIVE_KEYWORD_HAS_CPC_BID" | "NEW_BMM_KEYWORDS_NOT_ALLOWED";
  /**
   * The reason for keyword plan campaign error.
   */
  keywordPlanCampaignError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_NAME" | "INVALID_LANGUAGES" | "INVALID_GEOS" | "DUPLICATE_NAME" | "MAX_GEOS_EXCEEDED" | "MAX_LANGUAGES_EXCEEDED";
  /**
   * The reason for keyword plan campaign keyword error.
   */
  keywordPlanCampaignKeywordError?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_KEYWORD_IS_POSITIVE";
  /**
   * The reason for keyword plan error.
   */
  keywordPlanError?:  | "UNSPECIFIED" | "UNKNOWN" | "BID_MULTIPLIER_OUT_OF_RANGE" | "BID_TOO_HIGH" | "BID_TOO_LOW" | "BID_TOO_MANY_FRACTIONAL_DIGITS" | "DAILY_BUDGET_TOO_LOW" | "DAILY_BUDGET_TOO_MANY_FRACTIONAL_DIGITS" | "INVALID_VALUE" | "KEYWORD_PLAN_HAS_NO_KEYWORDS" | "KEYWORD_PLAN_NOT_ENABLED" | "KEYWORD_PLAN_NOT_FOUND" | "MISSING_BID" | "MISSING_FORECAST_PERIOD" | "INVALID_FORECAST_DATE_RANGE" | "INVALID_NAME";
  /**
   * The reason for keyword idea error.
   */
  keywordPlanIdeaError?:  | "UNSPECIFIED" | "UNKNOWN" | "URL_CRAWL_ERROR" | "INVALID_VALUE";
  /**
   * The reason for the label error.
   */
  labelError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_APPLY_INACTIVE_LABEL" | "CANNOT_APPLY_LABEL_TO_DISABLED_AD_GROUP_CRITERION" | "CANNOT_APPLY_LABEL_TO_NEGATIVE_AD_GROUP_CRITERION" | "EXCEEDED_LABEL_LIMIT_PER_TYPE" | "INVALID_RESOURCE_FOR_MANAGER_LABEL" | "DUPLICATE_NAME" | "INVALID_LABEL_NAME" | "CANNOT_ATTACH_LABEL_TO_DRAFT" | "CANNOT_ATTACH_NON_MANAGER_LABEL_TO_CUSTOMER";
  /**
   * The reasons for the language code error
   */
  languageCodeError?:  | "UNSPECIFIED" | "UNKNOWN" | "LANGUAGE_CODE_NOT_FOUND" | "INVALID_LANGUAGE_CODE";
  /**
   * An error with a list operation.
   */
  listOperationError?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUIRED_FIELD_MISSING" | "DUPLICATE_VALUES";
  /**
   * The reasons for the manager link error
   */
  managerLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCOUNTS_NOT_COMPATIBLE_FOR_LINKING" | "TOO_MANY_MANAGERS" | "TOO_MANY_INVITES" | "ALREADY_INVITED_BY_THIS_MANAGER" | "ALREADY_MANAGED_BY_THIS_MANAGER" | "ALREADY_MANAGED_IN_HIERARCHY" | "DUPLICATE_CHILD_FOUND" | "CLIENT_HAS_NO_ADMIN_USER" | "MAX_DEPTH_EXCEEDED" | "CYCLE_NOT_ALLOWED" | "TOO_MANY_ACCOUNTS" | "TOO_MANY_ACCOUNTS_AT_MANAGER" | "NON_OWNER_USER_CANNOT_MODIFY_LINK" | "SUSPENDED_ACCOUNT_CANNOT_ADD_CLIENTS" | "CLIENT_OUTSIDE_TREE" | "INVALID_STATUS_CHANGE" | "INVALID_CHANGE" | "CUSTOMER_CANNOT_MANAGE_SELF" | "CREATING_ENABLED_LINK_NOT_ALLOWED";
  /**
   * The reasons for the media bundle error
   */
  mediaBundleError?:  | "UNSPECIFIED" | "UNKNOWN" | "BAD_REQUEST" | "DOUBLECLICK_BUNDLE_NOT_ALLOWED" | "EXTERNAL_URL_NOT_ALLOWED" | "FILE_TOO_LARGE" | "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED" | "INVALID_INPUT" | "INVALID_MEDIA_BUNDLE" | "INVALID_MEDIA_BUNDLE_ENTRY" | "INVALID_MIME_TYPE" | "INVALID_PATH" | "INVALID_URL_REFERENCE" | "MEDIA_DATA_TOO_LARGE" | "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY" | "SERVER_ERROR" | "STORAGE_ERROR" | "SWIFFY_BUNDLE_NOT_ALLOWED" | "TOO_MANY_FILES" | "UNEXPECTED_SIZE" | "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT" | "UNSUPPORTED_HTML5_FEATURE" | "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT" | "CUSTOM_EXIT_NOT_ALLOWED";
  /**
   * The reasons for the media file error
   */
  mediaFileError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_CREATE_STANDARD_ICON" | "CANNOT_SELECT_STANDARD_ICON_WITH_OTHER_TYPES" | "CANNOT_SPECIFY_MEDIA_FILE_ID_AND_DATA" | "DUPLICATE_MEDIA" | "EMPTY_FIELD" | "RESOURCE_REFERENCED_IN_MULTIPLE_OPS" | "FIELD_NOT_SUPPORTED_FOR_MEDIA_SUB_TYPE" | "INVALID_MEDIA_FILE_ID" | "INVALID_MEDIA_SUB_TYPE" | "INVALID_MEDIA_FILE_TYPE" | "INVALID_MIME_TYPE" | "INVALID_REFERENCE_ID" | "INVALID_YOU_TUBE_ID" | "MEDIA_FILE_FAILED_TRANSCODING" | "MEDIA_NOT_TRANSCODED" | "MEDIA_TYPE_DOES_NOT_MATCH_MEDIA_FILE_TYPE" | "NO_FIELDS_SPECIFIED" | "NULL_REFERENCE_ID_AND_MEDIA_ID" | "TOO_LONG" | "UNSUPPORTED_TYPE" | "YOU_TUBE_SERVICE_UNAVAILABLE" | "YOU_TUBE_VIDEO_HAS_NON_POSITIVE_DURATION" | "YOU_TUBE_VIDEO_NOT_FOUND";
  /**
   * The reasons for media uploading errors.
   */
  mediaUploadError?:  | "UNSPECIFIED" | "UNKNOWN" | "FILE_TOO_BIG" | "UNPARSEABLE_IMAGE" | "ANIMATED_IMAGE_NOT_ALLOWED" | "FORMAT_NOT_ALLOWED" | "EXTERNAL_URL_NOT_ALLOWED" | "INVALID_URL_REFERENCE" | "MISSING_PRIMARY_MEDIA_BUNDLE_ENTRY" | "ANIMATED_VISUAL_EFFECT" | "ANIMATION_TOO_LONG" | "ASPECT_RATIO_NOT_ALLOWED" | "AUDIO_NOT_ALLOWED_IN_MEDIA_BUNDLE" | "CMYK_JPEG_NOT_ALLOWED" | "FLASH_NOT_ALLOWED" | "FRAME_RATE_TOO_HIGH" | "GOOGLE_WEB_DESIGNER_ZIP_FILE_NOT_PUBLISHED" | "IMAGE_CONSTRAINTS_VIOLATED" | "INVALID_MEDIA_BUNDLE" | "INVALID_MEDIA_BUNDLE_ENTRY" | "INVALID_MIME_TYPE" | "INVALID_PATH" | "LAYOUT_PROBLEM" | "MALFORMED_URL" | "MEDIA_BUNDLE_NOT_ALLOWED" | "MEDIA_BUNDLE_NOT_COMPATIBLE_TO_PRODUCT_TYPE" | "MEDIA_BUNDLE_REJECTED_BY_MULTIPLE_ASSET_SPECS" | "TOO_MANY_FILES_IN_MEDIA_BUNDLE" | "UNSUPPORTED_GOOGLE_WEB_DESIGNER_ENVIRONMENT" | "UNSUPPORTED_HTML5_FEATURE" | "URL_IN_MEDIA_BUNDLE_NOT_SSL_COMPLIANT" | "VIDEO_FILE_NAME_TOO_LONG" | "VIDEO_MULTIPLE_FILES_WITH_SAME_NAME" | "VIDEO_NOT_ALLOWED_IN_MEDIA_BUNDLE" | "CANNOT_UPLOAD_MEDIA_TYPE_THROUGH_API" | "DIMENSIONS_NOT_ALLOWED";
  /**
   * Container for enum describing possible merchant center errors.
   */
  merchantCenterError?:  | "UNSPECIFIED" | "UNKNOWN" | "MERCHANT_ID_CANNOT_BE_ACCESSED" | "CUSTOMER_NOT_ALLOWED_FOR_SHOPPING_PERFORMANCE_MAX";
  /**
   * The reasons for the multiplier error
   */
  multiplierError?:  | "UNSPECIFIED" | "UNKNOWN" | "MULTIPLIER_TOO_HIGH" | "MULTIPLIER_TOO_LOW" | "TOO_MANY_FRACTIONAL_DIGITS" | "MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY" | "MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING" | "NO_MULTIPLIER_SPECIFIED" | "MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET" | "MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET" | "MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET" | "MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID" | "BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER" | "MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH";
  /**
   * An error with a mutate
   */
  mutateError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_NOT_FOUND" | "ID_EXISTS_IN_MULTIPLE_MUTATES" | "INCONSISTENT_FIELD_VALUES" | "MUTATE_NOT_ALLOWED" | "RESOURCE_NOT_IN_GOOGLE_ADS" | "RESOURCE_ALREADY_EXISTS" | "RESOURCE_DOES_NOT_SUPPORT_VALIDATE_ONLY" | "OPERATION_DOES_NOT_SUPPORT_PARTIAL_FAILURE" | "RESOURCE_READ_ONLY" | "EU_POLITICAL_ADVERTISING_DECLARATION_REQUIRED";
  /**
   * The reasons for the new resource creation error
   */
  newResourceCreationError?:  | "UNSPECIFIED" | "UNKNOWN" | "CANNOT_SET_ID_FOR_CREATE" | "DUPLICATE_TEMP_IDS" | "TEMP_ID_RESOURCE_HAD_ERRORS";
  /**
   * The reasons for the not allowlisted error
   */
  notAllowlistedError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE";
  /**
   * The reasons for the not empty error
   */
  notEmptyError?:  | "UNSPECIFIED" | "UNKNOWN" | "EMPTY_LIST";
  /**
   * The reasons for the null error
   */
  nullError?:  | "UNSPECIFIED" | "UNKNOWN" | "NULL_CONTENT";
  /**
   * The reasons for the offline user data job error.
   */
  offlineUserDataJobError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_USER_LIST_ID" | "INVALID_USER_LIST_TYPE" | "NOT_ON_ALLOWLIST_FOR_USER_ID" | "INCOMPATIBLE_UPLOAD_KEY_TYPE" | "MISSING_USER_IDENTIFIER" | "INVALID_MOBILE_ID_FORMAT" | "TOO_MANY_USER_IDENTIFIERS" | "NOT_ON_ALLOWLIST_FOR_STORE_SALES_DIRECT" | "NOT_ON_ALLOWLIST_FOR_UNIFIED_STORE_SALES" | "INVALID_PARTNER_ID" | "INVALID_ENCODING" | "INVALID_COUNTRY_CODE" | "INCOMPATIBLE_USER_IDENTIFIER" | "FUTURE_TRANSACTION_TIME" | "INVALID_CONVERSION_ACTION" | "MOBILE_ID_NOT_SUPPORTED" | "INVALID_OPERATION_ORDER" | "CONFLICTING_OPERATION" | "EXTERNAL_UPDATE_ID_ALREADY_EXISTS" | "JOB_ALREADY_STARTED" | "REMOVE_NOT_SUPPORTED" | "REMOVE_ALL_NOT_SUPPORTED" | "INVALID_SHA256_FORMAT" | "CUSTOM_KEY_DISABLED" | "CUSTOM_KEY_NOT_PREDEFINED" | "CUSTOM_KEY_NOT_SET" | "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS" | "ATTRIBUTES_NOT_APPLICABLE_FOR_CUSTOMER_MATCH_USER_LIST" | "LIFETIME_VALUE_BUCKET_NOT_IN_RANGE" | "INCOMPATIBLE_USER_IDENTIFIER_FOR_ATTRIBUTES" | "FUTURE_TIME_NOT_ALLOWED" | "LAST_PURCHASE_TIME_LESS_THAN_ACQUISITION_TIME" | "CUSTOMER_IDENTIFIER_NOT_ALLOWED" | "INVALID_ITEM_ID" | "FIRST_PURCHASE_TIME_GREATER_THAN_LAST_PURCHASE_TIME" | "INVALID_LIFECYCLE_STAGE" | "INVALID_EVENT_VALUE" | "EVENT_ATTRIBUTE_ALL_FIELDS_ARE_REQUIRED" | "OPERATION_LEVEL_CONSENT_PROVIDED";
  /**
   * The reasons for the operation access denied error
   */
  operationAccessDeniedError?:  | "UNSPECIFIED" | "UNKNOWN" | "ACTION_NOT_PERMITTED" | "CREATE_OPERATION_NOT_PERMITTED" | "REMOVE_OPERATION_NOT_PERMITTED" | "UPDATE_OPERATION_NOT_PERMITTED" | "MUTATE_ACTION_NOT_PERMITTED_FOR_CLIENT" | "OPERATION_NOT_PERMITTED_FOR_CAMPAIGN_TYPE" | "CREATE_AS_REMOVED_NOT_PERMITTED" | "OPERATION_NOT_PERMITTED_FOR_REMOVED_RESOURCE" | "OPERATION_NOT_PERMITTED_FOR_AD_GROUP_TYPE" | "MUTATE_NOT_PERMITTED_FOR_CUSTOMER";
  /**
   * The reasons for the operator error
   */
  operatorError?:  | "UNSPECIFIED" | "UNKNOWN" | "OPERATOR_NOT_SUPPORTED";
  /**
   * The reasons for the mutate job error
   */
  partialFailureError?:  | "UNSPECIFIED" | "UNKNOWN" | "PARTIAL_FAILURE_MODE_REQUIRED";
  /**
   * The reasons for errors in payments accounts service
   */
  paymentsAccountError?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_SUPPORTED_FOR_MANAGER_CUSTOMER";
  /**
   * The reasons for the policy finding error.
   */
  policyFindingError?:  | "UNSPECIFIED" | "UNKNOWN" | "POLICY_FINDING" | "POLICY_TOPIC_NOT_FOUND";
  /**
   * The reasons for the policy validation parameter error
   */
  policyValidationParameterError?:  | "UNSPECIFIED" | "UNKNOWN" | "UNSUPPORTED_AD_TYPE_FOR_IGNORABLE_POLICY_TOPICS" | "UNSUPPORTED_AD_TYPE_FOR_EXEMPT_POLICY_VIOLATION_KEYS" | "CANNOT_SET_BOTH_IGNORABLE_POLICY_TOPICS_AND_EXEMPT_POLICY_VIOLATION_KEYS";
  /**
   * The reasons for the policy violation error
   */
  policyViolationError?:  | "UNSPECIFIED" | "UNKNOWN" | "POLICY_ERROR";
  /**
   * The reasons for the product link error
   */
  productLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_OPERATION" | "CREATION_NOT_PERMITTED" | "INVITATION_EXISTS" | "LINK_EXISTS";
  /**
   * The reasons for the product link invitation error
   */
  productLinkInvitationError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_STATUS" | "PERMISSION_DENIED" | "NO_INVITATION_REQUIRED" | "CUSTOMER_NOT_PERMITTED_TO_CREATE_INVITATION";
  /**
   * An error with the query
   */
  queryError?:  | "UNSPECIFIED" | "UNKNOWN" | "QUERY_ERROR" | "BAD_ENUM_CONSTANT" | "BAD_ESCAPE_SEQUENCE" | "BAD_FIELD_NAME" | "BAD_LIMIT_VALUE" | "BAD_NUMBER" | "BAD_OPERATOR" | "BAD_PARAMETER_NAME" | "BAD_PARAMETER_VALUE" | "BAD_RESOURCE_TYPE_IN_FROM_CLAUSE" | "BAD_SYMBOL" | "BAD_VALUE" | "DATE_RANGE_TOO_WIDE" | "DATE_RANGE_TOO_NARROW" | "EXPECTED_AND" | "EXPECTED_BY" | "EXPECTED_DIMENSION_FIELD_IN_SELECT_CLAUSE" | "EXPECTED_FILTERS_ON_DATE_RANGE" | "EXPECTED_FROM" | "EXPECTED_LIST" | "EXPECTED_REFERENCED_FIELD_IN_SELECT_CLAUSE" | "EXPECTED_SELECT" | "EXPECTED_SINGLE_VALUE" | "EXPECTED_VALUE_WITH_BETWEEN_OPERATOR" | "INVALID_DATE_FORMAT" | "MISALIGNED_DATE_FOR_FILTER" | "INVALID_STRING_VALUE" | "INVALID_VALUE_WITH_BETWEEN_OPERATOR" | "INVALID_VALUE_WITH_DURING_OPERATOR" | "INVALID_VALUE_WITH_LIKE_OPERATOR" | "OPERATOR_FIELD_MISMATCH" | "PROHIBITED_EMPTY_LIST_IN_CONDITION" | "PROHIBITED_ENUM_CONSTANT" | "PROHIBITED_FIELD_COMBINATION_IN_SELECT_CLAUSE" | "PROHIBITED_FIELD_IN_ORDER_BY_CLAUSE" | "PROHIBITED_FIELD_IN_SELECT_CLAUSE" | "PROHIBITED_FIELD_IN_WHERE_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_FROM_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_SELECT_CLAUSE" | "PROHIBITED_RESOURCE_TYPE_IN_WHERE_CLAUSE" | "PROHIBITED_METRIC_IN_SELECT_OR_WHERE_CLAUSE" | "PROHIBITED_SEGMENT_IN_SELECT_OR_WHERE_CLAUSE" | "PROHIBITED_SEGMENT_WITH_METRIC_IN_SELECT_OR_WHERE_CLAUSE" | "PROHIBITED_FIELD_OR_SEGMENT_WITH_METRIC" | "LIMIT_VALUE_TOO_LOW" | "PROHIBITED_NEWLINE_IN_STRING" | "PROHIBITED_VALUE_COMBINATION_IN_LIST" | "PROHIBITED_VALUE_COMBINATION_WITH_BETWEEN_OPERATOR" | "STRING_NOT_TERMINATED" | "TOO_MANY_SEGMENTS" | "UNEXPECTED_END_OF_QUERY" | "UNEXPECTED_FROM_CLAUSE" | "UNRECOGNIZED_FIELD" | "UNEXPECTED_INPUT" | "REQUESTED_METRICS_FOR_MANAGER" | "FILTER_HAS_TOO_MANY_VALUES" | "REQUIRED_SEGMENT_FIELD_MISSING";
  /**
   * An error with the amount of quota remaining.
   */
  quotaError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_EXHAUSTED" | "ACCESS_PROHIBITED" | "RESOURCE_TEMPORARILY_EXHAUSTED" | "EXCESSIVE_SHORT_TERM_QUERY_RESOURCE_CONSUMPTION" | "EXCESSIVE_LONG_TERM_QUERY_RESOURCE_CONSUMPTION" | "PAYMENTS_PROFILE_ACTIVATION_RATE_LIMIT_EXCEEDED";
  /**
   * The reasons for the range error
   */
  rangeError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_LOW" | "TOO_HIGH";
  /**
   * The reasons for the reach plan error
   */
  reachPlanError?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_FORECASTABLE_MISSING_RATE" | "NOT_FORECASTABLE_NOT_ENOUGH_INVENTORY" | "NOT_FORECASTABLE_ACCOUNT_NOT_ENABLED";
  /**
   * The reasons for error in applying a recommendation
   */
  recommendationError?:  | "UNSPECIFIED" | "UNKNOWN" | "BUDGET_AMOUNT_TOO_SMALL" | "BUDGET_AMOUNT_TOO_LARGE" | "INVALID_BUDGET_AMOUNT" | "POLICY_ERROR" | "INVALID_BID_AMOUNT" | "ADGROUP_KEYWORD_LIMIT" | "RECOMMENDATION_ALREADY_APPLIED" | "RECOMMENDATION_INVALIDATED" | "TOO_MANY_OPERATIONS" | "NO_OPERATIONS" | "DIFFERENT_TYPES_NOT_SUPPORTED" | "DUPLICATE_RESOURCE_NAME" | "RECOMMENDATION_ALREADY_DISMISSED" | "INVALID_APPLY_REQUEST" | "RECOMMENDATION_TYPE_APPLY_NOT_SUPPORTED" | "INVALID_MULTIPLIER" | "ADVERTISING_CHANNEL_TYPE_GENERATE_NOT_SUPPORTED" | "RECOMMENDATION_TYPE_GENERATE_NOT_SUPPORTED" | "RECOMMENDATION_TYPES_CANNOT_BE_EMPTY" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_BIDDING_INFO" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_BIDDING_STRATEGY_TYPE" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_ASSET_GROUP_INFO" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_ASSET_GROUP_INFO_WITH_FINAL_URL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_COUNTRY_CODES_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_INVALID_COUNTRY_CODE_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_LANGUAGE_CODES_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_EITHER_POSITIVE_OR_NEGATIVE_LOCATION_IDS_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_AD_GROUP_INFO_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_REQUIRES_KEYWORDS_FOR_SEARCH_CHANNEL" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_LOCATION" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_TARGET_IMPRESSION_SHARE_MICROS" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_TARGET_IMPRESSION_SHARE_MICROS_BETWEEN_1_AND_1000000" | "CAMPAIGN_BUDGET_RECOMMENDATION_TYPE_WITH_CHANNEL_TYPE_SEARCH_AND_BIDDING_STRATEGY_TYPE_TARGET_IMPRESSION_SHARE_REQUIRES_TARGET_IMPRESSION_SHARE_INFO" | "MERCHANT_CENTER_ACCOUNT_ID_NOT_SUPPORTED_ADVERTISING_CHANNEL_TYPE";
  /**
   * The reasons for the recommendation subscription error.
   */
  recommendationSubscriptionError?:  | "UNSPECIFIED" | "UNKNOWN";
  /**
   * The reasons for the region code error
   */
  regionCodeError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_REGION_CODE";
  /**
   * An error caused by the request
   */
  requestError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_NAME_MISSING" | "RESOURCE_NAME_MALFORMED" | "BAD_RESOURCE_ID" | "INVALID_CUSTOMER_ID" | "OPERATION_REQUIRED" | "RESOURCE_NOT_FOUND" | "INVALID_PAGE_TOKEN" | "EXPIRED_PAGE_TOKEN" | "INVALID_PAGE_SIZE" | "PAGE_SIZE_NOT_SUPPORTED" | "REQUIRED_FIELD_MISSING" | "IMMUTABLE_FIELD" | "TOO_MANY_MUTATE_OPERATIONS" | "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT" | "CANNOT_MODIFY_FOREIGN_FIELD" | "INVALID_ENUM_VALUE" | "DEVELOPER_TOKEN_PARAMETER_MISSING" | "LOGIN_CUSTOMER_ID_PARAMETER_MISSING" | "VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN" | "CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS" | "CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS" | "INCONSISTENT_RETURN_SUMMARY_ROW_VALUE" | "TOTAL_RESULTS_COUNT_NOT_ORIGINALLY_REQUESTED" | "RPC_DEADLINE_TOO_SHORT" | "UNSUPPORTED_VERSION" | "CLOUD_PROJECT_NOT_FOUND";
  /**
   * The reasons for the resource access denied error
   */
  resourceAccessDeniedError?:  | "UNSPECIFIED" | "UNKNOWN" | "WRITE_ACCESS_DENIED";
  /**
   * The reasons for the resource count limit exceeded error
   */
  resourceCountLimitExceededError?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCOUNT_LIMIT" | "CAMPAIGN_LIMIT" | "ADGROUP_LIMIT" | "AD_GROUP_AD_LIMIT" | "AD_GROUP_CRITERION_LIMIT" | "SHARED_SET_LIMIT" | "MATCHING_FUNCTION_LIMIT" | "RESPONSE_ROW_LIMIT_EXCEEDED" | "RESOURCE_LIMIT";
  /**
   * The reasons for the Search term insight error
   */
  searchTermInsightError?:  | "UNSPECIFIED" | "UNKNOWN" | "FILTERING_NOT_ALLOWED_WITH_SEGMENTS" | "LIMIT_NOT_ALLOWED_WITH_SEGMENTS" | "MISSING_FIELD_IN_SELECT_CLAUSE" | "REQUIRES_FILTER_BY_SINGLE_RESOURCE" | "SORTING_NOT_ALLOWED_WITH_SEGMENTS" | "SUMMARY_ROW_NOT_ALLOWED_WITH_SEGMENTS";
  /**
   * The reasons for the setting error
   */
  settingError?:  | "UNSPECIFIED" | "UNKNOWN" | "SETTING_TYPE_IS_NOT_AVAILABLE" | "SETTING_TYPE_IS_NOT_COMPATIBLE_WITH_CAMPAIGN" | "TARGETING_SETTING_CONTAINS_INVALID_CRITERION_TYPE_GROUP" | "TARGETING_SETTING_DEMOGRAPHIC_CRITERION_TYPE_GROUPS_MUST_BE_SET_TO_TARGET_ALL" | "TARGETING_SETTING_CANNOT_CHANGE_TARGET_ALL_TO_FALSE_FOR_DEMOGRAPHIC_CRITERION_TYPE_GROUP" | "DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT" | "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_DOMAIN_NAME" | "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_SUBDOMAIN_NAME" | "DYNAMIC_SEARCH_ADS_SETTING_CONTAINS_INVALID_LANGUAGE_CODE" | "TARGET_ALL_IS_NOT_ALLOWED_FOR_PLACEMENT_IN_SEARCH_CAMPAIGN" | "SETTING_VALUE_NOT_COMPATIBLE_WITH_CAMPAIGN" | "BID_ONLY_IS_NOT_ALLOWED_TO_BE_MODIFIED_WITH_CUSTOMER_MATCH_TARGETING";
  /**
   * The reasons for the shareable preview error.
   */
  shareablePreviewError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_MANY_ASSET_GROUPS_IN_REQUEST" | "ASSET_GROUP_DOES_NOT_EXIST_UNDER_THIS_CUSTOMER";
  /**
   * The reasons for the shared criterion error
   */
  sharedCriterionError?:  | "UNSPECIFIED" | "UNKNOWN" | "CRITERION_TYPE_NOT_ALLOWED_FOR_SHARED_SET_TYPE";
  /**
   * The reasons for the shared set error
   */
  sharedSetError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_CANNOT_CREATE_SHARED_SET_OF_THIS_TYPE" | "DUPLICATE_NAME" | "SHARED_SET_REMOVED" | "SHARED_SET_IN_USE";
  /**
   * The reasons for error in querying shopping product.
   */
  shoppingProductError?:  | "UNSPECIFIED" | "UNKNOWN" | "MISSING_CAMPAIGN_FILTER" | "MISSING_AD_GROUP_FILTER" | "UNSUPPORTED_DATE_SEGMENTATION";
  /**
   * The reasons for the size limit error
   */
  sizeLimitError?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUEST_SIZE_LIMIT_EXCEEDED" | "RESPONSE_SIZE_LIMIT_EXCEEDED";
  /**
   * The reasons for the Smart campaign error
   */
  smartCampaignError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_BUSINESS_LOCATION_ID" | "INVALID_CAMPAIGN" | "BUSINESS_NAME_OR_BUSINESS_LOCATION_ID_MISSING" | "REQUIRED_SUGGESTION_FIELD_MISSING" | "GEO_TARGETS_REQUIRED" | "CANNOT_DETERMINE_SUGGESTION_LOCALE" | "FINAL_URL_NOT_CRAWLABLE";
  /**
   * The reasons for the string format error
   */
  stringFormatError?:  | "UNSPECIFIED" | "UNKNOWN" | "ILLEGAL_CHARS" | "INVALID_FORMAT";
  /**
   * The reasons for the string length error
   */
  stringLengthError?:  | "UNSPECIFIED" | "UNKNOWN" | "EMPTY" | "TOO_SHORT" | "TOO_LONG";
  /**
   * The reasons for the third party app analytics link mutate error
   */
  thirdPartyAppAnalyticsLinkError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_ANALYTICS_PROVIDER_ID" | "INVALID_MOBILE_APP_ID" | "MOBILE_APP_IS_NOT_ENABLED" | "CANNOT_REGENERATE_SHAREABLE_LINK_ID_FOR_REMOVED_LINK";
  /**
   * The reasons for the time zone error
   */
  timeZoneError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_TIME_ZONE";
  /**
   * An error with a URL field mutate.
   */
  urlFieldError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_TRACKING_URL_TEMPLATE" | "INVALID_TAG_IN_TRACKING_URL_TEMPLATE" | "MISSING_TRACKING_URL_TEMPLATE_TAG" | "MISSING_PROTOCOL_IN_TRACKING_URL_TEMPLATE" | "INVALID_PROTOCOL_IN_TRACKING_URL_TEMPLATE" | "MALFORMED_TRACKING_URL_TEMPLATE" | "MISSING_HOST_IN_TRACKING_URL_TEMPLATE" | "INVALID_TLD_IN_TRACKING_URL_TEMPLATE" | "REDUNDANT_NESTED_TRACKING_URL_TEMPLATE_TAG" | "INVALID_FINAL_URL" | "INVALID_TAG_IN_FINAL_URL" | "REDUNDANT_NESTED_FINAL_URL_TAG" | "MISSING_PROTOCOL_IN_FINAL_URL" | "INVALID_PROTOCOL_IN_FINAL_URL" | "MALFORMED_FINAL_URL" | "MISSING_HOST_IN_FINAL_URL" | "INVALID_TLD_IN_FINAL_URL" | "INVALID_FINAL_MOBILE_URL" | "INVALID_TAG_IN_FINAL_MOBILE_URL" | "REDUNDANT_NESTED_FINAL_MOBILE_URL_TAG" | "MISSING_PROTOCOL_IN_FINAL_MOBILE_URL" | "INVALID_PROTOCOL_IN_FINAL_MOBILE_URL" | "MALFORMED_FINAL_MOBILE_URL" | "MISSING_HOST_IN_FINAL_MOBILE_URL" | "INVALID_TLD_IN_FINAL_MOBILE_URL" | "INVALID_FINAL_APP_URL" | "INVALID_TAG_IN_FINAL_APP_URL" | "REDUNDANT_NESTED_FINAL_APP_URL_TAG" | "MULTIPLE_APP_URLS_FOR_OSTYPE" | "INVALID_OSTYPE" | "INVALID_PROTOCOL_FOR_APP_URL" | "INVALID_PACKAGE_ID_FOR_APP_URL" | "URL_CUSTOM_PARAMETERS_COUNT_EXCEEDS_LIMIT" | "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_KEY" | "INVALID_CHARACTERS_IN_URL_CUSTOM_PARAMETER_VALUE" | "INVALID_TAG_IN_URL_CUSTOM_PARAMETER_VALUE" | "REDUNDANT_NESTED_URL_CUSTOM_PARAMETER_TAG" | "MISSING_PROTOCOL" | "INVALID_PROTOCOL" | "INVALID_URL" | "DESTINATION_URL_DEPRECATED" | "INVALID_TAG_IN_URL" | "MISSING_URL_TAG" | "DUPLICATE_URL_ID" | "INVALID_URL_ID" | "FINAL_URL_SUFFIX_MALFORMED" | "INVALID_TAG_IN_FINAL_URL_SUFFIX" | "INVALID_TOP_LEVEL_DOMAIN" | "MALFORMED_TOP_LEVEL_DOMAIN" | "MALFORMED_URL" | "MISSING_HOST" | "NULL_CUSTOM_PARAMETER_VALUE" | "VALUE_TRACK_PARAMETER_NOT_SUPPORTED" | "UNSUPPORTED_APP_STORE";
  /**
   * The reasons for the user data error.
   */
  userDataError?:  | "UNSPECIFIED" | "UNKNOWN" | "OPERATIONS_FOR_CUSTOMER_MATCH_NOT_ALLOWED" | "TOO_MANY_USER_IDENTIFIERS" | "USER_LIST_NOT_APPLICABLE";
  /**
   * The reasons for a user list customer type error.
   */
  userListCustomerTypeError?:  | "UNSPECIFIED" | "UNKNOWN" | "CONFLICTING_CUSTOMER_TYPES" | "NO_ACCESS_TO_USER_LIST" | "USERLIST_NOT_ELIGIBLE" | "CONVERSION_TRACKING_NOT_ENABLED_OR_NOT_MCC_MANAGER_ACCOUNT" | "TOO_MANY_USER_LISTS_FOR_THE_CUSTOMER_TYPE";
  /**
   * The reasons for the user list error
   */
  userListError?:  | "UNSPECIFIED" | "UNKNOWN" | "EXTERNAL_REMARKETING_USER_LIST_MUTATE_NOT_SUPPORTED" | "CONCRETE_TYPE_REQUIRED" | "CONVERSION_TYPE_ID_REQUIRED" | "DUPLICATE_CONVERSION_TYPES" | "INVALID_CONVERSION_TYPE" | "INVALID_DESCRIPTION" | "INVALID_NAME" | "INVALID_TYPE" | "CAN_NOT_ADD_LOGICAL_LIST_AS_LOGICAL_LIST_OPERAND" | "INVALID_USER_LIST_LOGICAL_RULE_OPERAND" | "NAME_ALREADY_USED" | "NEW_CONVERSION_TYPE_NAME_REQUIRED" | "CONVERSION_TYPE_NAME_ALREADY_USED" | "OWNERSHIP_REQUIRED_FOR_SET" | "USER_LIST_MUTATE_NOT_SUPPORTED" | "INVALID_RULE" | "INVALID_DATE_RANGE" | "CAN_NOT_MUTATE_SENSITIVE_USERLIST" | "MAX_NUM_RULEBASED_USERLISTS" | "CANNOT_MODIFY_BILLABLE_RECORD_COUNT" | "APP_ID_NOT_SET" | "USERLIST_NAME_IS_RESERVED_FOR_SYSTEM_LIST" | "ADVERTISER_NOT_ON_ALLOWLIST_FOR_USING_UPLOADED_DATA" | "RULE_TYPE_IS_NOT_SUPPORTED" | "CAN_NOT_ADD_A_SIMILAR_USERLIST_AS_LOGICAL_LIST_OPERAND" | "CAN_NOT_MIX_CRM_BASED_IN_LOGICAL_LIST_WITH_OTHER_LISTS" | "APP_ID_NOT_ALLOWED" | "CANNOT_MUTATE_SYSTEM_LIST" | "MOBILE_APP_IS_SENSITIVE" | "SEED_LIST_DOES_NOT_EXIST" | "INVALID_SEED_LIST_ACCESS_REASON" | "INVALID_SEED_LIST_TYPE" | "INVALID_COUNTRY_CODES" | "PARTNER_AUDIENCE_SOURCE_NOT_SUPPORTED_FOR_USER_LIST_TYPE" | "COMMERCE_PARTNER_NOT_ALLOWED" | "PARTNER_AUDIENCE_INFO_NOT_SUPPORTED_FOR_USER_LIST_TYPE" | "PARTNER_MANAGER_ACCOUNT_DISALLOWED" | "PARTNER_NOT_ALLOWLISTED_FOR_THIRD_PARTY_PARTNER_DATA" | "ADVERTISER_TOS_NOT_ACCEPTED" | "ADVERTISER_PARTNER_LINK_MISSING" | "ADVERTISER_NOT_ALLOWLISTED_FOR_THIRD_PARTY_PARTNER_DATA" | "ACCOUNT_SETTING_TYPE_NOT_ALLOWED";
  /**
   * An error with a Video Campaign mutate.
   */
  videoCampaignError?:  | "UNSPECIFIED" | "UNKNOWN" | "MUTATE_REQUIRES_RESERVATION";
  /**
   * The reasons for YouTube video registration errors.
   */
  youtubeVideoRegistrationError?:  | "UNSPECIFIED" | "UNKNOWN" | "VIDEO_NOT_FOUND" | "VIDEO_NOT_ACCESSIBLE" | "VIDEO_NOT_ELIGIBLE";
}

/**
 * Additional error details.
 */
export interface GoogleAdsSearchads360V23Errors__ErrorDetails {
  /**
   * Details for a budget below per-day minimum error.
   */
  budgetPerDayMinimumErrorDetails?: GoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails;
  /**
   * Describes policy violation findings.
   */
  policyFindingDetails?: GoogleAdsSearchads360V23Errors__PolicyFindingDetails;
  /**
   * Describes an ad policy violation.
   */
  policyViolationDetails?: GoogleAdsSearchads360V23Errors__PolicyViolationDetails;
  /**
   * Details on the quota error, including the scope (account or developer),
   * the rate bucket name and the retry delay.
   */
  quotaErrorDetails?: GoogleAdsSearchads360V23Errors__QuotaErrorDetails;
  /**
   * Details for a resource count limit exceeded error.
   */
  resourceCountDetails?: GoogleAdsSearchads360V23Errors__ResourceCountDetails;
  /**
   * The error code that should have been returned, but wasn't. This is used
   * when the error code is not published in the client specified version.
   */
  unpublishedErrorCode?: string;
}

function serializeGoogleAdsSearchads360V23Errors__ErrorDetails(data: any): GoogleAdsSearchads360V23Errors__ErrorDetails {
  return {
    ...data,
    budgetPerDayMinimumErrorDetails: data["budgetPerDayMinimumErrorDetails"] !== undefined ? serializeGoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails(data["budgetPerDayMinimumErrorDetails"]) : undefined,
    policyFindingDetails: data["policyFindingDetails"] !== undefined ? serializeGoogleAdsSearchads360V23Errors__PolicyFindingDetails(data["policyFindingDetails"]) : undefined,
    quotaErrorDetails: data["quotaErrorDetails"] !== undefined ? serializeGoogleAdsSearchads360V23Errors__QuotaErrorDetails(data["quotaErrorDetails"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__ErrorDetails(data: any): GoogleAdsSearchads360V23Errors__ErrorDetails {
  return {
    ...data,
    budgetPerDayMinimumErrorDetails: data["budgetPerDayMinimumErrorDetails"] !== undefined ? deserializeGoogleAdsSearchads360V23Errors__BudgetPerDayMinimumErrorDetails(data["budgetPerDayMinimumErrorDetails"]) : undefined,
    policyFindingDetails: data["policyFindingDetails"] !== undefined ? deserializeGoogleAdsSearchads360V23Errors__PolicyFindingDetails(data["policyFindingDetails"]) : undefined,
    quotaErrorDetails: data["quotaErrorDetails"] !== undefined ? deserializeGoogleAdsSearchads360V23Errors__QuotaErrorDetails(data["quotaErrorDetails"]) : undefined,
  };
}

/**
 * Describes the part of the request proto that caused the error.
 */
export interface GoogleAdsSearchads360V23Errors__ErrorLocation {
  /**
   * A field path that indicates which field was invalid in the request.
   */
  fieldPathElements?: GoogleAdsSearchads360V23Errors_ErrorLocation_FieldPathElement[];
}

/**
 * Error returned as part of a mutate response. This error indicates one or
 * more policy findings in the fields of a resource.
 */
export interface GoogleAdsSearchads360V23Errors__PolicyFindingDetails {
  /**
   * The list of policy topics for the resource. Contains the PROHIBITED or
   * FULLY_LIMITED policy topic entries that prevented the resource from being
   * saved (among any other entries the resource may also have).
   */
  policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
}

function serializeGoogleAdsSearchads360V23Errors__PolicyFindingDetails(data: any): GoogleAdsSearchads360V23Errors__PolicyFindingDetails {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__PolicyFindingDetails(data: any): GoogleAdsSearchads360V23Errors__PolicyFindingDetails {
  return {
    ...data,
    policyTopicEntries: data["policyTopicEntries"] !== undefined ? data["policyTopicEntries"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__PolicyTopicEntry(item))) : undefined,
  };
}

/**
 * Error returned as part of a mutate response. This error indicates single
 * policy violation by some text in one of the fields.
 */
export interface GoogleAdsSearchads360V23Errors__PolicyViolationDetails {
  /**
   * Human readable description of policy violation.
   */
  externalPolicyDescription?: string;
  /**
   * Human readable name of the policy.
   */
  externalPolicyName?: string;
  /**
   * Whether user can file an exemption request for this violation.
   */
  isExemptible?: boolean;
  /**
   * Unique identifier for this violation. If policy is exemptible, this key
   * may be used to request exemption.
   */
  key?: GoogleAdsSearchads360V23Common__PolicyViolationKey;
}

/**
 * Additional quota error details when there is QuotaError.
 */
export interface GoogleAdsSearchads360V23Errors__QuotaErrorDetails {
  /**
   * The high level description of the quota bucket. Examples are "Get requests
   * for standard access" or "Requests per account".
   */
  rateName?: string;
  /**
   * The rate scope of the quota limit.
   */
  rateScope?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCOUNT" | "DEVELOPER";
  /**
   * Backoff period that customers should wait before sending next request.
   */
  retryDelay?: number /* Duration */;
}

function serializeGoogleAdsSearchads360V23Errors__QuotaErrorDetails(data: any): GoogleAdsSearchads360V23Errors__QuotaErrorDetails {
  return {
    ...data,
    retryDelay: data["retryDelay"] !== undefined ? data["retryDelay"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__QuotaErrorDetails(data: any): GoogleAdsSearchads360V23Errors__QuotaErrorDetails {
  return {
    ...data,
    retryDelay: data["retryDelay"] !== undefined ? data["retryDelay"] : undefined,
  };
}

/**
 * Error details returned when an resource count limit was exceeded.
 */
export interface GoogleAdsSearchads360V23Errors__ResourceCountDetails {
  /**
   * The ID of the resource whose limit was exceeded. External customer ID if
   * the limit is for a customer.
   */
  enclosingId?: string;
  /**
   * The name of the resource ( etc.) whose limit was exceeded.
   */
  enclosingResource?: string;
  /**
   * The count of existing entities.
   */
  existingCount?: number;
  /**
   * The limit which was exceeded.
   */
  limit?: number;
  /**
   * The resource limit type which was exceeded.
   */
  limitType?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGNS_PER_CUSTOMER" | "BASE_CAMPAIGNS_PER_CUSTOMER" | "EXPERIMENT_CAMPAIGNS_PER_CUSTOMER" | "HOTEL_CAMPAIGNS_PER_CUSTOMER" | "SMART_SHOPPING_CAMPAIGNS_PER_CUSTOMER" | "AD_GROUPS_PER_CAMPAIGN" | "AD_GROUPS_PER_SHOPPING_CAMPAIGN" | "AD_GROUPS_PER_HOTEL_CAMPAIGN" | "REPORTING_AD_GROUPS_PER_LOCAL_CAMPAIGN" | "REPORTING_AD_GROUPS_PER_APP_CAMPAIGN" | "MANAGED_AD_GROUPS_PER_SMART_CAMPAIGN" | "AD_GROUP_CRITERIA_PER_CUSTOMER" | "BASE_AD_GROUP_CRITERIA_PER_CUSTOMER" | "EXPERIMENT_AD_GROUP_CRITERIA_PER_CUSTOMER" | "AD_GROUP_CRITERIA_PER_CAMPAIGN" | "CAMPAIGN_CRITERIA_PER_CUSTOMER" | "BASE_CAMPAIGN_CRITERIA_PER_CUSTOMER" | "EXPERIMENT_CAMPAIGN_CRITERIA_PER_CUSTOMER" | "WEBPAGE_CRITERIA_PER_CUSTOMER" | "BASE_WEBPAGE_CRITERIA_PER_CUSTOMER" | "EXPERIMENT_WEBPAGE_CRITERIA_PER_CUSTOMER" | "COMBINED_AUDIENCE_CRITERIA_PER_AD_GROUP" | "CUSTOMER_NEGATIVE_PLACEMENT_CRITERIA_PER_CUSTOMER" | "CUSTOMER_NEGATIVE_YOUTUBE_CHANNEL_CRITERIA_PER_CUSTOMER" | "CRITERIA_PER_AD_GROUP" | "LISTING_GROUPS_PER_AD_GROUP" | "EXPLICITLY_SHARED_BUDGETS_PER_CUSTOMER" | "IMPLICITLY_SHARED_BUDGETS_PER_CUSTOMER" | "COMBINED_AUDIENCE_CRITERIA_PER_CAMPAIGN" | "NEGATIVE_KEYWORDS_PER_CAMPAIGN" | "NEGATIVE_PLACEMENTS_PER_CAMPAIGN" | "GEO_TARGETS_PER_CAMPAIGN" | "NEGATIVE_IP_BLOCKS_PER_CAMPAIGN" | "PROXIMITIES_PER_CAMPAIGN" | "LISTING_SCOPES_PER_SHOPPING_CAMPAIGN" | "LISTING_SCOPES_PER_NON_SHOPPING_CAMPAIGN" | "NEGATIVE_KEYWORDS_PER_SHARED_SET" | "NEGATIVE_PLACEMENTS_PER_SHARED_SET" | "SHARED_SETS_PER_CUSTOMER_FOR_TYPE_DEFAULT" | "SHARED_SETS_PER_CUSTOMER_FOR_NEGATIVE_PLACEMENT_LIST_LOWER" | "HOTEL_ADVANCE_BOOKING_WINDOW_BID_MODIFIERS_PER_AD_GROUP" | "BIDDING_STRATEGIES_PER_CUSTOMER" | "BASIC_USER_LISTS_PER_CUSTOMER" | "LOGICAL_USER_LISTS_PER_CUSTOMER" | "RULE_BASED_USER_LISTS_PER_CUSTOMER" | "BASE_AD_GROUP_ADS_PER_CUSTOMER" | "EXPERIMENT_AD_GROUP_ADS_PER_CUSTOMER" | "AD_GROUP_ADS_PER_CAMPAIGN" | "TEXT_AND_OTHER_ADS_PER_AD_GROUP" | "IMAGE_ADS_PER_AD_GROUP" | "SHOPPING_SMART_ADS_PER_AD_GROUP" | "RESPONSIVE_SEARCH_ADS_PER_AD_GROUP" | "APP_ADS_PER_AD_GROUP" | "APP_ENGAGEMENT_ADS_PER_AD_GROUP" | "LOCAL_ADS_PER_AD_GROUP" | "VIDEO_ADS_PER_AD_GROUP" | "LEAD_FORM_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "PROMOTION_CUSTOMER_ASSETS_PER_CUSTOMER" | "PROMOTION_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "PROMOTION_AD_GROUP_ASSETS_PER_AD_GROUP" | "CALLOUT_CUSTOMER_ASSETS_PER_CUSTOMER" | "CALLOUT_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "CALLOUT_AD_GROUP_ASSETS_PER_AD_GROUP" | "SITELINK_CUSTOMER_ASSETS_PER_CUSTOMER" | "SITELINK_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "SITELINK_AD_GROUP_ASSETS_PER_AD_GROUP" | "STRUCTURED_SNIPPET_CUSTOMER_ASSETS_PER_CUSTOMER" | "STRUCTURED_SNIPPET_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "STRUCTURED_SNIPPET_AD_GROUP_ASSETS_PER_AD_GROUP" | "MOBILE_APP_CUSTOMER_ASSETS_PER_CUSTOMER" | "MOBILE_APP_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "MOBILE_APP_AD_GROUP_ASSETS_PER_AD_GROUP" | "HOTEL_CALLOUT_CUSTOMER_ASSETS_PER_CUSTOMER" | "HOTEL_CALLOUT_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "HOTEL_CALLOUT_AD_GROUP_ASSETS_PER_AD_GROUP" | "CALL_CUSTOMER_ASSETS_PER_CUSTOMER" | "CALL_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "CALL_AD_GROUP_ASSETS_PER_AD_GROUP" | "PRICE_CUSTOMER_ASSETS_PER_CUSTOMER" | "PRICE_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "PRICE_AD_GROUP_ASSETS_PER_AD_GROUP" | "AD_IMAGE_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "AD_IMAGE_AD_GROUP_ASSETS_PER_AD_GROUP" | "PAGE_FEED_ASSET_SETS_PER_CUSTOMER" | "DYNAMIC_EDUCATION_FEED_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_PAGE_FEED_ASSET_SET" | "ASSETS_PER_DYNAMIC_EDUCATION_FEED_ASSET_SET" | "DYNAMIC_REAL_ESTATE_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_REAL_ESTATE_ASSET_SET" | "DYNAMIC_CUSTOM_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_CUSTOM_ASSET_SET" | "DYNAMIC_HOTELS_AND_RENTALS_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_HOTELS_AND_RENTALS_ASSET_SET" | "DYNAMIC_LOCAL_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_LOCAL_ASSET_SET" | "DYNAMIC_FLIGHTS_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_FLIGHTS_ASSET_SET" | "DYNAMIC_TRAVEL_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_TRAVEL_ASSET_SET" | "DYNAMIC_JOBS_ASSET_SETS_PER_CUSTOMER" | "ASSETS_PER_DYNAMIC_JOBS_ASSET_SET" | "BUSINESS_NAME_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "BUSINESS_LOGO_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "VERSIONS_PER_AD" | "USER_FEEDS_PER_CUSTOMER" | "SYSTEM_FEEDS_PER_CUSTOMER" | "FEED_ATTRIBUTES_PER_FEED" | "FEED_ITEMS_PER_CUSTOMER" | "CAMPAIGN_FEEDS_PER_CUSTOMER" | "BASE_CAMPAIGN_FEEDS_PER_CUSTOMER" | "EXPERIMENT_CAMPAIGN_FEEDS_PER_CUSTOMER" | "AD_GROUP_FEEDS_PER_CUSTOMER" | "BASE_AD_GROUP_FEEDS_PER_CUSTOMER" | "EXPERIMENT_AD_GROUP_FEEDS_PER_CUSTOMER" | "AD_GROUP_FEEDS_PER_CAMPAIGN" | "FEED_ITEM_SETS_PER_CUSTOMER" | "FEED_ITEMS_PER_FEED_ITEM_SET" | "CAMPAIGN_EXPERIMENTS_PER_CUSTOMER" | "EXPERIMENT_ARMS_PER_VIDEO_EXPERIMENT" | "OWNED_LABELS_PER_CUSTOMER" | "LABELS_PER_CAMPAIGN" | "LABELS_PER_AD_GROUP" | "LABELS_PER_AD_GROUP_AD" | "LABELS_PER_AD_GROUP_CRITERION" | "TARGET_CUSTOMERS_PER_LABEL" | "KEYWORD_PLANS_PER_USER_PER_CUSTOMER" | "KEYWORD_PLAN_AD_GROUP_KEYWORDS_PER_KEYWORD_PLAN" | "KEYWORD_PLAN_AD_GROUPS_PER_KEYWORD_PLAN" | "KEYWORD_PLAN_NEGATIVE_KEYWORDS_PER_KEYWORD_PLAN" | "KEYWORD_PLAN_CAMPAIGNS_PER_KEYWORD_PLAN" | "CONVERSION_ACTIONS_PER_CUSTOMER" | "BATCH_JOB_OPERATIONS_PER_JOB" | "BATCH_JOBS_PER_CUSTOMER" | "HOTEL_CHECK_IN_DATE_RANGE_BID_MODIFIERS_PER_AD_GROUP" | "SHARED_SETS_PER_ACCOUNT_FOR_ACCOUNT_LEVEL_NEGATIVE_KEYWORDS" | "ACCOUNT_LEVEL_NEGATIVE_KEYWORDS_PER_SHARED_SET" | "ENABLED_ASSET_PER_HOTEL_PROPERTY_ASSET_SET" | "ENABLED_HOTEL_PROPERTY_ASSET_LINKS_PER_ASSET_GROUP" | "BRANDS_PER_SHARED_SET" | "ENABLED_BRAND_LIST_CRITERIA_PER_CAMPAIGN" | "SHARED_SETS_PER_ACCOUNT_FOR_BRAND" | "LOOKALIKE_USER_LISTS_PER_CUSTOMER" | "LOGO_CAMPAIGN_ASSETS_PER_CAMPAIGN" | "BUSINESS_MESSAGE_ASSET_LINKS_PER_CUSTOMER" | "WHATSAPP_BUSINESS_MESSAGE_ASSET_LINKS_PER_CAMPAIGN" | "WHATSAPP_BUSINESS_MESSAGE_ASSET_LINKS_PER_AD_GROUP" | "BRAND_LIST_CRITERIA_PER_AD_GROUP";
}

/**
 * Search Ads 360-specific error.
 */
export interface GoogleAdsSearchads360V23Errors__SearchAds360Error {
  /**
   * Additional error details, which are returned by certain error codes. Most
   * error codes do not include details.
   */
  details?: GoogleAdsSearchads360V23Errors__ErrorDetails;
  /**
   * An enum value that indicates which error occurred.
   */
  errorCode?: GoogleAdsSearchads360V23Errors__ErrorCode;
  /**
   * Describes the part of the request proto that caused the error.
   */
  location?: GoogleAdsSearchads360V23Errors__ErrorLocation;
  /**
   * A human-readable description of the error.
   */
  message?: string;
  /**
   * The value that triggered the error.
   */
  trigger?: GoogleAdsSearchads360V23Common__Value;
}

function serializeGoogleAdsSearchads360V23Errors__SearchAds360Error(data: any): GoogleAdsSearchads360V23Errors__SearchAds360Error {
  return {
    ...data,
    details: data["details"] !== undefined ? serializeGoogleAdsSearchads360V23Errors__ErrorDetails(data["details"]) : undefined,
    trigger: data["trigger"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Value(data["trigger"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__SearchAds360Error(data: any): GoogleAdsSearchads360V23Errors__SearchAds360Error {
  return {
    ...data,
    details: data["details"] !== undefined ? deserializeGoogleAdsSearchads360V23Errors__ErrorDetails(data["details"]) : undefined,
    trigger: data["trigger"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Value(data["trigger"]) : undefined,
  };
}

/**
 * Describes how a Search Ads 360 API call failed. It's returned inside
 * google.rpc.Status.details when a call fails.
 */
export interface GoogleAdsSearchads360V23Errors__SearchAds360Failure {
  /**
   * The list of errors that occurred.
   */
  errors?: GoogleAdsSearchads360V23Errors__SearchAds360Error[];
  /**
   * The unique ID of the request that is used for debugging purposes.
   */
  requestId?: string;
}

function serializeGoogleAdsSearchads360V23Errors__SearchAds360Failure(data: any): GoogleAdsSearchads360V23Errors__SearchAds360Failure {
  return {
    ...data,
    errors: data["errors"] !== undefined ? data["errors"].map((item: any) => (serializeGoogleAdsSearchads360V23Errors__SearchAds360Error(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Errors__SearchAds360Failure(data: any): GoogleAdsSearchads360V23Errors__SearchAds360Failure {
  return {
    ...data,
    errors: data["errors"] !== undefined ? data["errors"].map((item: any) => (deserializeGoogleAdsSearchads360V23Errors__SearchAds360Error(item))) : undefined,
  };
}

/**
 * A part of a field path.
 */
export interface GoogleAdsSearchads360V23Errors_ErrorLocation_FieldPathElement {
  /**
   * The name of a field or a oneof
   */
  fieldName?: string;
  /**
   * If field_name is a repeated field, this is the element that failed
   */
  index?: number;
}

/**
 * Represents a view of BiddingStrategies owned by and shared with the
 * customer. In contrast to BiddingStrategy, this resource includes strategies
 * owned by managers of the customer and shared with this customer - in addition
 * to strategies owned by this customer. This resource does not provide metrics
 * and only exposes a limited subset of the BiddingStrategy attributes.
 */
export interface GoogleAdsSearchads360V23Resources__AccessibleBiddingStrategy {
  /**
   * Output only. The ID of the bidding strategy.
   */
  readonly id?: bigint;
  /**
   * Output only. An automated bidding strategy to help get the most
   * conversions for your campaigns while spending your budget.
   */
  readonly maximizeConversions?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_MaximizeConversions;
  /**
   * Output only. An automated bidding strategy to help get the most conversion
   * value for your campaigns while spending your budget.
   */
  readonly maximizeConversionValue?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_MaximizeConversionValue;
  /**
   * Output only. The name of the bidding strategy.
   */
  readonly name?: string;
  /**
   * Output only. The ID of the Customer which owns the bidding strategy.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Output only. descriptive_name of the Customer which owns the bidding
   * strategy.
   */
  readonly ownerDescriptiveName?: string;
  /**
   * Output only. The resource name of the accessible bidding strategy.
   * AccessibleBiddingStrategy resource names have the form:
   * `customers/{customer_id}/accessibleBiddingStrategies/{bidding_strategy_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. A bidding strategy that sets bids to help get as many
   * conversions as possible at the target cost-per-acquisition (CPA) you set.
   */
  readonly targetCpa?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetCpa;
  /**
   * Output only. A bidding strategy that automatically optimizes towards a
   * chosen percentage of impressions.
   */
  readonly targetImpressionShare?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare;
  /**
   * Output only. A bidding strategy that helps you maximize revenue while
   * averaging a specific target Return On Ad Spend (ROAS).
   */
  readonly targetRoas?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetRoas;
  /**
   * Output only. A bid strategy that sets your bids to help get as many clicks
   * as possible within your budget.
   */
  readonly targetSpend?: GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetSpend;
  /**
   * Output only. The type of the bidding strategy.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "COMMISSION" | "ENHANCED_CPC" | "INVALID" | "MANUAL_CPA" | "MANUAL_CPC" | "MANUAL_CPM" | "MANUAL_CPV" | "MAXIMIZE_CONVERSIONS" | "MAXIMIZE_CONVERSION_VALUE" | "PAGE_ONE_PROMOTED" | "PERCENT_CPC" | "TARGET_CPA" | "TARGET_CPC" | "TARGET_CPM" | "TARGET_IMPRESSION_SHARE" | "TARGET_OUTRANK_SHARE" | "TARGET_ROAS" | "TARGET_SPEND";
}

/**
 * An account-level budget. It contains information about the budget itself, as
 * well as the most recently approved changes to the budget and proposed changes
 * that are pending approval. The proposed changes that are pending approval, if
 * any, are found in 'pending_proposal'. Effective details about the budget are
 * found in fields prefixed 'approved_', 'adjusted_' and those without a prefix.
 * Since some effective details may differ from what the user had originally
 * requested (for example, spending limit), these differences are juxtaposed
 * through 'proposed_', 'approved_', and possibly 'adjusted_' fields. This
 * resource is mutated using AccountBudgetProposal and cannot be mutated
 * directly. A budget may have at most one pending proposal at any given time.
 * It is read through pending_proposal. Once approved, a budget may be subject
 * to adjustments, such as credit adjustments. Adjustments create differences
 * between the 'approved' and 'adjusted' fields, which would otherwise be
 * identical.
 */
export interface GoogleAdsSearchads360V23Resources__AccountBudget {
  /**
   * Output only. The adjusted spending limit in micros. One million is
   * equivalent to one unit. If the approved spending limit is finite, the
   * adjusted spending limit may vary depending on the types of adjustments
   * applied to this budget, if applicable. The different kinds of adjustments
   * are described here: https://support.google.com/google-ads/answer/1704323
   * For example, a debit adjustment reduces how much the account is allowed to
   * spend.
   */
  readonly adjustedSpendingLimitMicros?: bigint;
  /**
   * Output only. The adjusted spending limit as a well-defined type, for
   * example, INFINITE. This will only be populated if the adjusted spending
   * limit is INFINITE, which is guaranteed to be true if the approved spending
   * limit is INFINITE.
   */
  readonly adjustedSpendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Output only. The value of Ads that have been served, in micros. This
   * includes overdelivery costs, in which case a credit might be automatically
   * applied to the budget (see total_adjustments_micros).
   */
  readonly amountServedMicros?: bigint;
  /**
   * Output only. The approved end time in yyyy-MM-dd HH:mm:ss format.
   */
  readonly approvedEndDateTime?: string;
  /**
   * Output only. The approved end time as a well-defined type, for example,
   * FOREVER.
   */
  readonly approvedEndTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The approved spending limit in micros. One million is
   * equivalent to one unit. This will only be populated if the proposed
   * spending limit is finite, and will always be greater than or equal to the
   * proposed spending limit.
   */
  readonly approvedSpendingLimitMicros?: bigint;
  /**
   * Output only. The approved spending limit as a well-defined type, for
   * example, INFINITE. This will only be populated if the approved spending
   * limit is INFINITE.
   */
  readonly approvedSpendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Output only. The approved start time of the account-level budget in
   * yyyy-MM-dd HH:mm:ss format. For example, if a new budget is approved after
   * the proposed start time, the approved start time is the time of approval.
   */
  readonly approvedStartDateTime?: string;
  /**
   * Output only. The resource name of the billing setup associated with this
   * account-level budget. BillingSetup resource names have the form:
   * `customers/{customer_id}/billingSetups/{billing_setup_id}`
   */
  readonly billingSetup?: string;
  /**
   * Output only. The ID of the account-level budget.
   */
  readonly id?: bigint;
  /**
   * Output only. The name of the account-level budget.
   */
  readonly name?: string;
  /**
   * Output only. Notes associated with the budget.
   */
  readonly notes?: string;
  /**
   * Output only. The pending proposal to modify this budget, if applicable.
   */
  readonly pendingProposal?: GoogleAdsSearchads360V23Resources_AccountBudget_PendingAccountBudgetProposal;
  /**
   * Output only. The proposed end time in yyyy-MM-dd HH:mm:ss format.
   */
  readonly proposedEndDateTime?: string;
  /**
   * Output only. The proposed end time as a well-defined type, for example,
   * FOREVER.
   */
  readonly proposedEndTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The proposed spending limit in micros. One million is
   * equivalent to one unit.
   */
  readonly proposedSpendingLimitMicros?: bigint;
  /**
   * Output only. The proposed spending limit as a well-defined type, for
   * example, INFINITE.
   */
  readonly proposedSpendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Output only. The proposed start time of the account-level budget in
   * yyyy-MM-dd HH:mm:ss format. If a start time type of NOW was proposed, this
   * is the time of request.
   */
  readonly proposedStartDateTime?: string;
  /**
   * Output only. A purchase order number is a value that helps users reference
   * this budget in their monthly invoices.
   */
  readonly purchaseOrderNumber?: string;
  /**
   * Output only. The resource name of the account-level budget. AccountBudget
   * resource names have the form:
   * `customers/{customer_id}/accountBudgets/{account_budget_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The status of this account-level budget.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "APPROVED" | "CANCELLED";
  /**
   * Output only. The total adjustments amount. An example of an adjustment is
   * courtesy credits.
   */
  readonly totalAdjustmentsMicros?: bigint;
}

/**
 * An account-level budget proposal. All fields prefixed with 'proposed' may
 * not necessarily be applied directly. For example, proposed spending limits
 * may be adjusted before their application. This is true if the 'proposed'
 * field has an 'approved' counterpart, for example, spending limits. Note that
 * the proposal type (proposal_type) changes which fields are required and which
 * must remain empty.
 */
export interface GoogleAdsSearchads360V23Resources__AccountBudgetProposal {
  /**
   * Immutable. The resource name of the account-level budget associated with
   * this proposal.
   */
  accountBudget?: string;
  /**
   * Output only. The date time when this account-level budget was approved, if
   * applicable.
   */
  readonly approvalDateTime?: string;
  /**
   * Output only. The approved end date time in yyyy-mm-dd hh:mm:ss format.
   */
  readonly approvedEndDateTime?: string;
  /**
   * Output only. The approved end date time as a well-defined type, for
   * example, FOREVER.
   */
  readonly approvedEndTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The approved spending limit in micros. One million is
   * equivalent to one unit.
   */
  readonly approvedSpendingLimitMicros?: bigint;
  /**
   * Output only. The approved spending limit as a well-defined type, for
   * example, INFINITE.
   */
  readonly approvedSpendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Output only. The approved start date time in yyyy-mm-dd hh:mm:ss format.
   */
  readonly approvedStartDateTime?: string;
  /**
   * Immutable. The resource name of the billing setup associated with this
   * proposal.
   */
  billingSetup?: string;
  /**
   * Output only. The date time when this account-level budget proposal was
   * created, which is not the same as its approval date time, if applicable.
   */
  readonly creationDateTime?: string;
  /**
   * Output only. The ID of the proposal.
   */
  readonly id?: bigint;
  /**
   * Immutable. The type of this proposal, for example, END to end the budget
   * associated with this proposal.
   */
  proposalType?:  | "UNSPECIFIED" | "UNKNOWN" | "CREATE" | "UPDATE" | "END" | "REMOVE";
  /**
   * Immutable. The proposed end date time in yyyy-mm-dd hh:mm:ss format.
   */
  proposedEndDateTime?: string;
  /**
   * Immutable. The proposed end date time as a well-defined type, for example,
   * FOREVER.
   */
  proposedEndTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Immutable. The name to assign to the account-level budget.
   */
  proposedName?: string;
  /**
   * Immutable. Notes associated with this budget.
   */
  proposedNotes?: string;
  /**
   * Immutable. A purchase order number is a value that enables the user to
   * help them reference this budget in their monthly invoices.
   */
  proposedPurchaseOrderNumber?: string;
  /**
   * Immutable. The proposed spending limit in micros. One million is
   * equivalent to one unit.
   */
  proposedSpendingLimitMicros?: bigint;
  /**
   * Immutable. The proposed spending limit as a well-defined type, for
   * example, INFINITE.
   */
  proposedSpendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Immutable. The proposed start date time in yyyy-mm-dd hh:mm:ss format.
   */
  proposedStartDateTime?: string;
  /**
   * Immutable. The proposed start date time as a well-defined type, for
   * example, NOW.
   */
  proposedStartTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Immutable. The resource name of the proposal. AccountBudgetProposal
   * resource names have the form:
   * `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of this proposal. When a new proposal is created,
   * the status defaults to PENDING.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "APPROVED_HELD" | "APPROVED" | "CANCELLED" | "REJECTED";
}

function serializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data: any): GoogleAdsSearchads360V23Resources__AccountBudgetProposal {
  return {
    ...data,
    proposedSpendingLimitMicros: data["proposedSpendingLimitMicros"] !== undefined ? String(data["proposedSpendingLimitMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data: any): GoogleAdsSearchads360V23Resources__AccountBudgetProposal {
  return {
    ...data,
    approvedSpendingLimitMicros: data["approvedSpendingLimitMicros"] !== undefined ? BigInt(data["approvedSpendingLimitMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    proposedSpendingLimitMicros: data["proposedSpendingLimitMicros"] !== undefined ? BigInt(data["proposedSpendingLimitMicros"]) : undefined,
  };
}

/**
 * Represents the data sharing connection between a Google Ads account and
 * another account
 */
export interface GoogleAdsSearchads360V23Resources__AccountLink {
  /**
   * Output only. The ID of the link. This field is read only.
   */
  readonly accountLinkId?: bigint;
  /**
   * Immutable. Resource name of the account link. AccountLink resource names
   * have the form: `customers/{customer_id}/accountLinks/{account_link_id}`
   */
  resourceName?: string;
  /**
   * The status of the link.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "REQUESTED" | "PENDING_APPROVAL" | "REJECTED" | "REVOKED";
  /**
   * Immutable. A third party app analytics link.
   */
  thirdPartyAppAnalytics?: GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier;
  /**
   * Output only. The type of the linked account.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "THIRD_PARTY_APP_ANALYTICS";
}

function serializeGoogleAdsSearchads360V23Resources__AccountLink(data: any): GoogleAdsSearchads360V23Resources__AccountLink {
  return {
    ...data,
    thirdPartyAppAnalytics: data["thirdPartyAppAnalytics"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier(data["thirdPartyAppAnalytics"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AccountLink(data: any): GoogleAdsSearchads360V23Resources__AccountLink {
  return {
    ...data,
    accountLinkId: data["accountLinkId"] !== undefined ? BigInt(data["accountLinkId"]) : undefined,
    thirdPartyAppAnalytics: data["thirdPartyAppAnalytics"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier(data["thirdPartyAppAnalytics"]) : undefined,
  };
}

/**
 * An ad.
 */
export interface GoogleAdsSearchads360V23Resources__Ad {
  /**
   * Output only. Indicates if this ad was automatically added by Google Ads
   * and not by a user. For example, this could happen when ads are
   * automatically created as suggestions for new ads based on knowledge of how
   * existing ads are performing.
   */
  readonly addedByGoogleAds?: boolean;
  /**
   * Details pertaining to an app ad.
   */
  appAd?: GoogleAdsSearchads360V23Common__AppAdInfo;
  /**
   * Details pertaining to an app engagement ad.
   */
  appEngagementAd?: GoogleAdsSearchads360V23Common__AppEngagementAdInfo;
  /**
   * Details pertaining to an app pre-registration ad.
   */
  appPreRegistrationAd?: GoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo;
  /**
   * Details pertaining to a Demand Gen carousel ad.
   */
  demandGenCarouselAd?: GoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo;
  /**
   * Details pertaining to a Demand Gen multi asset ad.
   */
  demandGenMultiAssetAd?: GoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo;
  /**
   * Details pertaining to a Demand Gen product ad.
   */
  demandGenProductAd?: GoogleAdsSearchads360V23Common__DemandGenProductAdInfo;
  /**
   * Details pertaining to a Demand Gen video responsive ad.
   */
  demandGenVideoResponsiveAd?: GoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo;
  /**
   * The device preference for the ad. You can only specify a preference for
   * mobile devices. When this preference is set the ad will be preferred over
   * other ads when being displayed on a mobile device. The ad can still be
   * displayed on other device types, for example, if no other ads are
   * available. If unspecified (no device preference), all devices are targeted.
   * This is only supported by some ad types.
   */
  devicePreference?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER";
  /**
   * Details pertaining to a display upload ad.
   */
  displayUploadAd?: GoogleAdsSearchads360V23Common__DisplayUploadAdInfo;
  /**
   * The URL that appears in the ad description for some ad formats.
   */
  displayUrl?: string;
  /**
   * Immutable. Details pertaining to an Expanded Dynamic Search Ad. This type
   * of ad has its headline, final URLs, and display URL auto-generated at
   * serving time according to domain name specific information provided by
   * `dynamic_search_ads_setting` linked at the campaign level.
   */
  expandedDynamicSearchAd?: GoogleAdsSearchads360V23Common__ExpandedDynamicSearchAdInfo;
  /**
   * Details pertaining to an expanded text ad.
   */
  expandedTextAd?: GoogleAdsSearchads360V23Common__ExpandedTextAdInfo;
  /**
   * A list of final app URLs that will be used on mobile if the user has the
   * specific app installed.
   */
  finalAppUrls?: GoogleAdsSearchads360V23Common__FinalAppUrl[];
  /**
   * The list of possible final mobile URLs after all cross-domain redirects
   * for the ad.
   */
  finalMobileUrls?: string[];
  /**
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   */
  finalUrls?: string[];
  /**
   * The suffix to use when constructing a final URL.
   */
  finalUrlSuffix?: string;
  /**
   * Details pertaining to a hotel ad.
   */
  hotelAd?: GoogleAdsSearchads360V23Common__HotelAdInfo;
  /**
   * Output only. The ID of the ad.
   */
  readonly id?: bigint;
  /**
   * Immutable. Details pertaining to an Image ad.
   */
  imageAd?: GoogleAdsSearchads360V23Common__ImageAdInfo;
  /**
   * Immutable. Details pertaining to a legacy app install ad.
   */
  legacyAppInstallAd?: GoogleAdsSearchads360V23Common__LegacyAppInstallAdInfo;
  /**
   * Details pertaining to a legacy responsive display ad.
   */
  legacyResponsiveDisplayAd?: GoogleAdsSearchads360V23Common__LegacyResponsiveDisplayAdInfo;
  /**
   * Details pertaining to a local ad.
   */
  localAd?: GoogleAdsSearchads360V23Common__LocalAdInfo;
  /**
   * Immutable. The name of the ad. This is only used to be able to identify
   * the ad. It does not need to be unique and does not affect the served ad.
   */
  name?: string;
  /**
   * Immutable. Details pertaining to a product ad.
   */
  productAd?: GoogleAdsSearchads360V23Common__SearchAds360ProductAdInfo;
  /**
   * Immutable. The resource name of the ad. Ad resource names have the form:
   * `customers/{customer_id}/ads/{ad_id}`
   */
  resourceName?: string;
  /**
   * Details pertaining to a responsive display ad.
   */
  responsiveDisplayAd?: GoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo;
  /**
   * Details pertaining to a responsive search ad.
   */
  responsiveSearchAd?: GoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo;
  /**
   * Immutable. Details pertaining to an expanded dynamic search ad.
   */
  searchAds360ExpandedDynamicSearchAd?: GoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo;
  /**
   * Immutable. Details pertaining to an expanded text ad.
   */
  searchAds360ExpandedTextAd?: GoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo;
  /**
   * Immutable. Details pertaining to a responsive search ad.
   */
  searchAds360ResponsiveSearchAd?: GoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo;
  /**
   * Immutable. Details pertaining to a text ad.
   */
  searchAds360TextAd?: GoogleAdsSearchads360V23Common__SearchAds360TextAdInfo;
  /**
   * Details pertaining to a Shopping Comparison Listing ad.
   */
  shoppingComparisonListingAd?: GoogleAdsSearchads360V23Common__ShoppingComparisonListingAdInfo;
  /**
   * Details pertaining to a Shopping product ad.
   */
  shoppingProductAd?: GoogleAdsSearchads360V23Common__ShoppingProductAdInfo;
  /**
   * Details pertaining to a Smart Shopping ad.
   */
  shoppingSmartAd?: GoogleAdsSearchads360V23Common__ShoppingSmartAdInfo;
  /**
   * Details pertaining to a Smart campaign ad.
   */
  smartCampaignAd?: GoogleAdsSearchads360V23Common__SmartCampaignAdInfo;
  /**
   * Output only. If this ad is system managed, then this field will indicate
   * the source. This field is read-only.
   */
  readonly systemManagedResourceSource?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_VARIATIONS";
  /**
   * Immutable. Details pertaining to a text ad.
   */
  textAd?: GoogleAdsSearchads360V23Common__TextAdInfo;
  /**
   * The URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Details pertaining to a travel ad.
   */
  travelAd?: GoogleAdsSearchads360V23Common__TravelAdInfo;
  /**
   * Output only. The type of ad.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "TEXT_AD" | "EXPANDED_TEXT_AD" | "EXPANDED_DYNAMIC_SEARCH_AD" | "HOTEL_AD" | "SHOPPING_SMART_AD" | "SHOPPING_PRODUCT_AD" | "VIDEO_AD" | "IMAGE_AD" | "RESPONSIVE_SEARCH_AD" | "LEGACY_RESPONSIVE_DISPLAY_AD" | "APP_AD" | "LEGACY_APP_INSTALL_AD" | "RESPONSIVE_DISPLAY_AD" | "LOCAL_AD" | "HTML5_UPLOAD_AD" | "DYNAMIC_HTML5_AD" | "APP_ENGAGEMENT_AD" | "SHOPPING_COMPARISON_LISTING_AD" | "VIDEO_BUMPER_AD" | "VIDEO_NON_SKIPPABLE_IN_STREAM_AD" | "VIDEO_TRUEVIEW_IN_STREAM_AD" | "VIDEO_RESPONSIVE_AD" | "SMART_CAMPAIGN_AD" | "CALL_AD" | "APP_PRE_REGISTRATION_AD" | "DEMAND_GEN_MULTI_ASSET_AD" | "DEMAND_GEN_CAROUSEL_AD" | "TRAVEL_AD" | "DEMAND_GEN_VIDEO_RESPONSIVE_AD" | "DEMAND_GEN_PRODUCT_AD" | "MULTIMEDIA_AD";
  /**
   * Additional URLs for the ad that are tagged with a unique identifier that
   * can be referenced from other fields in the ad.
   */
  urlCollections?: GoogleAdsSearchads360V23Common__UrlCollection[];
  /**
   * The list of mappings that can be used to substitute custom parameter tags
   * in a `tracking_url_template`, `final_urls`, or `mobile_final_urls`. For
   * mutates, use url custom parameter operations.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
}

function serializeGoogleAdsSearchads360V23Resources__Ad(data: any): GoogleAdsSearchads360V23Resources__Ad {
  return {
    ...data,
    appAd: data["appAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AppAdInfo(data["appAd"]) : undefined,
    appEngagementAd: data["appEngagementAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AppEngagementAdInfo(data["appEngagementAd"]) : undefined,
    appPreRegistrationAd: data["appPreRegistrationAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo(data["appPreRegistrationAd"]) : undefined,
    demandGenCarouselAd: data["demandGenCarouselAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo(data["demandGenCarouselAd"]) : undefined,
    demandGenMultiAssetAd: data["demandGenMultiAssetAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo(data["demandGenMultiAssetAd"]) : undefined,
    demandGenProductAd: data["demandGenProductAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DemandGenProductAdInfo(data["demandGenProductAd"]) : undefined,
    demandGenVideoResponsiveAd: data["demandGenVideoResponsiveAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo(data["demandGenVideoResponsiveAd"]) : undefined,
    imageAd: data["imageAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ImageAdInfo(data["imageAd"]) : undefined,
    localAd: data["localAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LocalAdInfo(data["localAd"]) : undefined,
    responsiveDisplayAd: data["responsiveDisplayAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo(data["responsiveDisplayAd"]) : undefined,
    responsiveSearchAd: data["responsiveSearchAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo(data["responsiveSearchAd"]) : undefined,
    searchAds360ExpandedDynamicSearchAd: data["searchAds360ExpandedDynamicSearchAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo(data["searchAds360ExpandedDynamicSearchAd"]) : undefined,
    searchAds360ExpandedTextAd: data["searchAds360ExpandedTextAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo(data["searchAds360ExpandedTextAd"]) : undefined,
    searchAds360ResponsiveSearchAd: data["searchAds360ResponsiveSearchAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo(data["searchAds360ResponsiveSearchAd"]) : undefined,
    searchAds360TextAd: data["searchAds360TextAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SearchAds360TextAdInfo(data["searchAds360TextAd"]) : undefined,
    smartCampaignAd: data["smartCampaignAd"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data["smartCampaignAd"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__Ad(data: any): GoogleAdsSearchads360V23Resources__Ad {
  return {
    ...data,
    appAd: data["appAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AppAdInfo(data["appAd"]) : undefined,
    appEngagementAd: data["appEngagementAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AppEngagementAdInfo(data["appEngagementAd"]) : undefined,
    appPreRegistrationAd: data["appPreRegistrationAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AppPreRegistrationAdInfo(data["appPreRegistrationAd"]) : undefined,
    demandGenCarouselAd: data["demandGenCarouselAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DemandGenCarouselAdInfo(data["demandGenCarouselAd"]) : undefined,
    demandGenMultiAssetAd: data["demandGenMultiAssetAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DemandGenMultiAssetAdInfo(data["demandGenMultiAssetAd"]) : undefined,
    demandGenProductAd: data["demandGenProductAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DemandGenProductAdInfo(data["demandGenProductAd"]) : undefined,
    demandGenVideoResponsiveAd: data["demandGenVideoResponsiveAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DemandGenVideoResponsiveAdInfo(data["demandGenVideoResponsiveAd"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    imageAd: data["imageAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ImageAdInfo(data["imageAd"]) : undefined,
    localAd: data["localAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LocalAdInfo(data["localAd"]) : undefined,
    responsiveDisplayAd: data["responsiveDisplayAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ResponsiveDisplayAdInfo(data["responsiveDisplayAd"]) : undefined,
    responsiveSearchAd: data["responsiveSearchAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ResponsiveSearchAdInfo(data["responsiveSearchAd"]) : undefined,
    searchAds360ExpandedDynamicSearchAd: data["searchAds360ExpandedDynamicSearchAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedDynamicSearchAdInfo(data["searchAds360ExpandedDynamicSearchAd"]) : undefined,
    searchAds360ExpandedTextAd: data["searchAds360ExpandedTextAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SearchAds360ExpandedTextAdInfo(data["searchAds360ExpandedTextAd"]) : undefined,
    searchAds360ResponsiveSearchAd: data["searchAds360ResponsiveSearchAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SearchAds360ResponsiveSearchAdInfo(data["searchAds360ResponsiveSearchAd"]) : undefined,
    searchAds360TextAd: data["searchAds360TextAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SearchAds360TextAdInfo(data["searchAds360TextAd"]) : undefined,
    smartCampaignAd: data["smartCampaignAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data["smartCampaignAd"]) : undefined,
  };
}

/**
 * An ad group.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroup {
  /**
   * The ad rotation mode of the ad group.
   */
  adRotationMode?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTIMIZE" | "ROTATE_FOREVER";
  /**
   * Settings for AI Max feature in standard search adgroups.
   */
  aiMaxAdGroupSetting?: GoogleAdsSearchads360V23Resources_AdGroup_AiMaxAdGroupSetting;
  /**
   * Immutable. Setting for audience related features.
   */
  audienceSetting?: GoogleAdsSearchads360V23Resources_AdGroup_AudienceSetting;
  /**
   * Output only. For draft or experiment ad groups, this field is the resource
   * name of the base ad group from which this ad group was created. If a draft
   * or experiment ad group does not have a base ad group, then this field is
   * null. For base ad groups, this field equals the ad group resource name.
   * This field is read-only.
   */
  readonly baseAdGroup?: string;
  /**
   * Immutable. The campaign to which the ad group belongs.
   */
  campaign?: string;
  /**
   * The maximum CPC (cost-per-click) bid. This field is used when the ad
   * group's effective bidding strategy is Manual CPC. This field is not
   * applicable and will be ignored if the ad group's campaign is using a
   * portfolio bidding strategy.
   */
  cpcBidMicros?: bigint;
  /**
   * The maximum CPM (cost-per-thousand viewable impressions) bid.
   */
  cpmBidMicros?: bigint;
  /**
   * The CPV (cost-per-view) bid.
   */
  cpvBidMicros?: bigint;
  /**
   * Output only. The timestamp when this ad_group was created. The timestamp
   * is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss" format.
   */
  readonly creationTime?: string;
  /**
   * Settings for Demand Gen ad groups.
   */
  demandGenAdGroupSettings?: GoogleAdsSearchads360V23Resources_AdGroup_DemandGenAdGroupSettings;
  /**
   * Lets advertisers specify a targeting dimension on which to place absolute
   * bids. This is only applicable for campaigns that target only the display
   * network and not search.
   */
  displayCustomBidDimension?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "AUDIENCE" | "TOPIC" | "GENDER" | "AGE_RANGE" | "PLACEMENT" | "PARENTAL_STATUS" | "INCOME_RANGE";
  /**
   * Output only. Value will be same as that of the CPC (cost-per-click) bid
   * value when the bidding strategy is one of manual cpc, enhanced cpc, page
   * one promoted or target outrank share, otherwise the value will be null.
   */
  readonly effectiveCpcBidMicros?: bigint;
  /**
   * Output only. The resource names of effective labels attached to this ad
   * group. An effective label is a label inherited or directly assigned to this
   * ad group.
   */
  readonly effectiveLabels?: string[];
  /**
   * Output only. The effective target CPA (cost-per-acquisition). This field
   * is read-only.
   */
  readonly effectiveTargetCpaMicros?: bigint;
  /**
   * Output only. Source of the effective target CPA. This field is read-only.
   */
  readonly effectiveTargetCpaSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. The effective target CPC (cost-per-click). This field is
   * read-only.
   */
  readonly effectiveTargetCpc?: bigint;
  /**
   * Output only. Source of the effective target CPC. This field is read-only.
   */
  readonly effectiveTargetCpcSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. The effective target ROAS (return-on-ad-spend). This field is
   * read-only.
   */
  readonly effectiveTargetRoas?: number;
  /**
   * Output only. Source of the effective target ROAS. This field is read-only.
   */
  readonly effectiveTargetRoasSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. Date when the ad group ends serving ads. By default, the ad
   * group ends on the ad group's end date. If this field is set, then the ad
   * group ends at the end of the specified date in the customer's time zone.
   * This field is only available for Microsoft Advertising and Facebook gateway
   * accounts. Format: YYYY-MM-DD Example: 2019-03-14
   */
  readonly endDate?: string;
  /**
   * Output only. ID of the ad group in the external engine account. This field
   * is for non-Google Ads account only, for example, Yahoo Japan, Microsoft,
   * Baidu etc. For Google Ads entity, use "ad_group.id" instead.
   */
  readonly engineId?: string;
  /**
   * Output only. The Engine Status for ad group.
   */
  readonly engineStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_ELIGIBLE" | "AD_GROUP_EXPIRED" | "AD_GROUP_REMOVED" | "AD_GROUP_DRAFT" | "AD_GROUP_PAUSED" | "AD_GROUP_SERVING" | "AD_GROUP_SUBMITTED" | "CAMPAIGN_PAUSED" | "ACCOUNT_PAUSED";
  /**
   * When this value is true, demographics will be excluded from the types of
   * targeting which are expanded when optimized_targeting_enabled is true. When
   * optimized_targeting_enabled is false, this field is ignored. Default is
   * false.
   */
  excludeDemographicExpansion?: boolean;
  /**
   * The asset field types that should be excluded from this ad group. Asset
   * links with these field types will not be inherited by this ad group from
   * the upper levels.
   */
  excludedParentAssetFieldTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION"[];
  /**
   * The asset set types that should be excluded from this ad group. Asset set
   * links with these types will not be inherited by this ad group from the
   * upper levels. Location group types (GMB_DYNAMIC_LOCATION_GROUP,
   * CHAIN_DYNAMIC_LOCATION_GROUP, and STATIC_LOCATION_GROUP) are child types of
   * LOCATION_SYNC. Therefore, if LOCATION_SYNC is set for this field, all
   * location group asset sets are not allowed to be linked to this ad group,
   * and all Location Extension (LE) and Affiliate Location Extensions (ALE)
   * will not be served under this ad group. Only LOCATION_SYNC is currently
   * supported.
   */
  excludedParentAssetSetTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MERCHANT_CENTER_FEED" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION_SYNC" | "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP" | "CHAIN_DYNAMIC_LOCATION_GROUP" | "STATIC_LOCATION_GROUP" | "HOTEL_PROPERTY" | "TRAVEL_FEED"[];
  /**
   * URL template for appending params to Final URL.
   */
  finalUrlSuffix?: string;
  /**
   * The fixed amount in micros that the advertiser pays for every thousand
   * impressions of the ad.
   */
  fixedCpmMicros?: bigint;
  /**
   * Output only. The ID of the ad group.
   */
  readonly id?: bigint;
  /**
   * Output only. The resource names of labels attached to this ad group.
   */
  readonly labels?: string[];
  /**
   * Output only. The language of the ads and keywords in an ad group. This
   * field is only available for Microsoft Advertising accounts. More details:
   * https://docs.microsoft.com/en-us/advertising/guides/ad-languages?view=bingads-13#adlanguage
   */
  readonly languageCode?: string;
  /**
   * Output only. The datetime when this ad group was last modified. The
   * datetime is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss"
   * format.
   */
  readonly lastModifiedTime?: string;
  /**
   * The name of the ad group. This field is required and should not be empty
   * when creating new ad groups. It must contain fewer than 255 UTF-8
   * full-width characters. It must not contain any null (code point 0x0), NL
   * line feed (code point 0xA) or carriage return (code point 0xD) characters.
   */
  name?: string;
  /**
   * True if optimized targeting is enabled. Optimized Targeting is the
   * replacement for Audience Expansion.
   */
  optimizedTargetingEnabled?: boolean;
  /**
   * The percent cpc bid amount, expressed as a fraction of the advertised
   * price for some good or service. The valid range for the fraction is [0,1)
   * and the value stored here is 1,000,000 * [fraction].
   */
  percentCpcBidMicros?: bigint;
  /**
   * Output only. Provides aggregated view into why an ad group is not serving
   * or not serving optimally.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "NOT_ELIGIBLE" | "LIMITED";
  /**
   * Output only. Provides reasons for why an ad group is not serving or not
   * serving optimally.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_REMOVED" | "CAMPAIGN_PAUSED" | "CAMPAIGN_PENDING" | "CAMPAIGN_ENDED" | "AD_GROUP_PAUSED" | "AD_GROUP_REMOVED" | "AD_GROUP_INCOMPLETE" | "KEYWORDS_PAUSED" | "NO_KEYWORDS" | "AD_GROUP_ADS_PAUSED" | "NO_AD_GROUP_ADS" | "HAS_ADS_DISAPPROVED" | "HAS_ADS_LIMITED_BY_POLICY" | "MOST_ADS_UNDER_REVIEW" | "CAMPAIGN_DRAFT" | "AD_GROUP_PAUSED_DUE_TO_LOW_ACTIVITY"[];
  /**
   * Immutable. The resource name of the ad group. Ad group resource names have
   * the form: `customers/{customer_id}/adGroups/{ad_group_id}`
   */
  resourceName?: string;
  /**
   * Output only. Date when this ad group starts serving ads. By default, the
   * ad group starts now or the ad group's start date, whichever is later. If
   * this field is set, then the ad group starts at the beginning of the
   * specified date in the customer's time zone. This field is only available
   * for Microsoft Advertising and Facebook gateway accounts. Format: YYYY-MM-DD
   * Example: 2019-03-14
   */
  readonly startDate?: string;
  /**
   * The status of the ad group.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
  /**
   * The target CPA (cost-per-acquisition). If the ad group's campaign bidding
   * strategy is TargetCpa or MaximizeConversions (with its target_cpa field
   * set), then this field overrides the target CPA specified in the campaign's
   * bidding strategy. Otherwise, this value is ignored.
   */
  targetCpaMicros?: bigint;
  /**
   * Average amount in micros that the advertiser is willing to pay for every
   * ad click. Overrides the target CPC configured at the campaign level.
   */
  targetCpcMicros?: bigint;
  /**
   * Average amount in micros that the advertiser is willing to pay for every
   * thousand times the ad is shown.
   */
  targetCpmMicros?: bigint;
  /**
   * Average amount in micros that the advertiser is willing to pay for every
   * ad view.
   */
  targetCpvMicros?: bigint;
  /**
   * Setting for targeting related features.
   */
  targetingSetting?: GoogleAdsSearchads360V23Common__TargetingSetting;
  /**
   * The target ROAS (return-on-ad-spend) for this ad group. This field lets
   * you override the target ROAS specified in the campaign's bidding strategy,
   * but only if the campaign is using a standard (not portfolio) `TargetRoas`
   * strategy or a standard `MaximizeConversionValue` strategy with its
   * `target_roas` field set. If the campaign is using a portfolio bidding
   * strategy, this field cannot be set and attempting to do so will result in
   * an error. For any other bidding strategies, this value is ignored. To see
   * the actual target ROAS being used by the ad group, considering potential
   * overrides, query the `effective_target_roas` and
   * `effective_target_roas_source` fields.
   */
  targetRoas?: number;
  /**
   * The URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Immutable. The type of the ad group.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH_STANDARD" | "DISPLAY_STANDARD" | "SHOPPING_PRODUCT_ADS" | "HOTEL_ADS" | "SHOPPING_SMART_ADS" | "VIDEO_BUMPER" | "VIDEO_TRUE_VIEW_IN_STREAM" | "VIDEO_TRUE_VIEW_IN_DISPLAY" | "VIDEO_NON_SKIPPABLE_IN_STREAM" | "SEARCH_DYNAMIC_ADS" | "SHOPPING_COMPARISON_LISTING_ADS" | "PROMOTED_HOTEL_ADS" | "VIDEO_RESPONSIVE" | "VIDEO_EFFICIENT_REACH" | "SMART_CAMPAIGN_ADS" | "TRAVEL_ADS";
  /**
   * The list of mappings used to substitute custom parameter tags in a
   * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
  /**
   * Vertical ads setting feature to enable/disable ad group format controls in
   * search campaigns. This setting requires AiMaxAdGroupSetting to be enabled
   * and a travel feed to be attached to the campaign.
   */
  verticalAdsFormatSetting?: GoogleAdsSearchads360V23Resources_AdGroup_VerticalAdsFormatSetting;
}

function serializeGoogleAdsSearchads360V23Resources__AdGroup(data: any): GoogleAdsSearchads360V23Resources__AdGroup {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
    cpmBidMicros: data["cpmBidMicros"] !== undefined ? String(data["cpmBidMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? String(data["cpvBidMicros"]) : undefined,
    fixedCpmMicros: data["fixedCpmMicros"] !== undefined ? String(data["fixedCpmMicros"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? String(data["percentCpcBidMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
    targetCpcMicros: data["targetCpcMicros"] !== undefined ? String(data["targetCpcMicros"]) : undefined,
    targetCpmMicros: data["targetCpmMicros"] !== undefined ? String(data["targetCpmMicros"]) : undefined,
    targetCpvMicros: data["targetCpvMicros"] !== undefined ? String(data["targetCpvMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AdGroup(data: any): GoogleAdsSearchads360V23Resources__AdGroup {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    cpmBidMicros: data["cpmBidMicros"] !== undefined ? BigInt(data["cpmBidMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? BigInt(data["cpvBidMicros"]) : undefined,
    effectiveCpcBidMicros: data["effectiveCpcBidMicros"] !== undefined ? BigInt(data["effectiveCpcBidMicros"]) : undefined,
    effectiveTargetCpaMicros: data["effectiveTargetCpaMicros"] !== undefined ? BigInt(data["effectiveTargetCpaMicros"]) : undefined,
    effectiveTargetCpc: data["effectiveTargetCpc"] !== undefined ? BigInt(data["effectiveTargetCpc"]) : undefined,
    fixedCpmMicros: data["fixedCpmMicros"] !== undefined ? BigInt(data["fixedCpmMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? BigInt(data["percentCpcBidMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
    targetCpcMicros: data["targetCpcMicros"] !== undefined ? BigInt(data["targetCpcMicros"]) : undefined,
    targetCpmMicros: data["targetCpmMicros"] !== undefined ? BigInt(data["targetCpmMicros"]) : undefined,
    targetCpvMicros: data["targetCpvMicros"] !== undefined ? BigInt(data["targetCpvMicros"]) : undefined,
  };
}

/**
 * An ad group ad.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAd {
  /**
   * Output only. A list of recommendations to improve the ad strength. For
   * example, a recommendation could be "Try adding a few more unique headlines
   * or unpinning some assets.".
   */
  readonly actionItems?: string[];
  /**
   * Immutable. The ad.
   */
  ad?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * Immutable. The ad group to which the ad belongs.
   */
  adGroup?: string;
  /**
   * Settings that control the types of asset automation. See the
   * AssetAutomationTypeEnum documentation for the default opt in/out behavior
   * of each type.
   */
  adGroupAdAssetAutomationSettings?: GoogleAdsSearchads360V23Resources__AdGroupAdAssetAutomationSetting[];
  /**
   * Output only. Overall ad strength for this ad group ad.
   */
  readonly adStrength?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "NO_ADS" | "POOR" | "AVERAGE" | "GOOD" | "EXCELLENT";
  /**
   * Output only. The timestamp when this ad_group_ad was created. The datetime
   * is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss" format.
   */
  readonly creationTime?: string;
  /**
   * Output only. The resource names of effective labels attached to this ad.
   * An effective label is a label inherited or directly assigned to this ad.
   */
  readonly effectiveLabels?: string[];
  /**
   * Output only. ID of the ad in the external engine account. This field is
   * for Search Ads 360 account only, for example, Yahoo Japan, Microsoft, Baidu
   * etc. For non-Search Ads 360 entity, use "ad_group_ad.ad.id" instead.
   */
  readonly engineId?: string;
  /**
   * Output only. Additional status of the ad in the external engine account.
   * Possible statuses (depending on the type of external account) include
   * active, eligible, pending review, etc.
   */
  readonly engineStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_AD_ELIGIBLE" | "AD_GROUP_AD_INAPPROPRIATE_FOR_CAMPAIGN" | "AD_GROUP_AD_MOBILE_URL_UNDER_REVIEW" | "AD_GROUP_AD_PARTIALLY_INVALID" | "AD_GROUP_AD_TO_BE_ACTIVATED" | "AD_GROUP_AD_NOT_REVIEWED" | "AD_GROUP_AD_ON_HOLD" | "AD_GROUP_AD_PAUSED" | "AD_GROUP_AD_REMOVED" | "AD_GROUP_AD_PENDING_REVIEW" | "AD_GROUP_AD_UNDER_REVIEW" | "AD_GROUP_AD_APPROVED" | "AD_GROUP_AD_DISAPPROVED" | "AD_GROUP_AD_SERVING" | "AD_GROUP_AD_ACCOUNT_PAUSED" | "AD_GROUP_AD_CAMPAIGN_PAUSED" | "AD_GROUP_AD_AD_GROUP_PAUSED";
  /**
   * Output only. The resource names of labels attached to this ad group ad.
   */
  readonly labels?: string[];
  /**
   * Output only. The datetime when this ad group ad was last modified. The
   * datetime is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss"
   * format.
   */
  readonly lastModifiedTime?: string;
  /**
   * Output only. Policy information for the ad.
   */
  readonly policySummary?: GoogleAdsSearchads360V23Resources__AdGroupAdPolicySummary;
  /**
   * Output only. Provides aggregated view into why an ad group ad is not
   * serving or not serving optimally.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
  /**
   * Output only. Provides reasons for why an ad group ad is not serving or not
   * serving optimally.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_REMOVED" | "CAMPAIGN_PAUSED" | "CAMPAIGN_PENDING" | "CAMPAIGN_ENDED" | "AD_GROUP_PAUSED" | "AD_GROUP_REMOVED" | "AD_GROUP_AD_PAUSED" | "AD_GROUP_AD_REMOVED" | "AD_GROUP_AD_DISAPPROVED" | "AD_GROUP_AD_UNDER_REVIEW" | "AD_GROUP_AD_POOR_QUALITY" | "AD_GROUP_AD_NO_ADS" | "AD_GROUP_AD_APPROVED_LABELED" | "AD_GROUP_AD_AREA_OF_INTEREST_ONLY" | "AD_GROUP_AD_UNDER_APPEAL"[];
  /**
   * Immutable. The resource name of the ad. Ad group ad resource names have
   * the form: `customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}`
   */
  resourceName?: string;
  /**
   * The status of the ad.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
}

function serializeGoogleAdsSearchads360V23Resources__AdGroupAd(data: any): GoogleAdsSearchads360V23Resources__AdGroupAd {
  return {
    ...data,
    ad: data["ad"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AdGroupAd(data: any): GoogleAdsSearchads360V23Resources__AdGroupAd {
  return {
    ...data,
    ad: data["ad"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

/**
 * Asset automation setting for an AdGroupAd.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdAssetAutomationSetting {
  /**
   * The opt-in/out status for the specified asset automation type.
   */
  assetAutomationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTED_IN" | "OPTED_OUT";
  /**
   * The asset automation type that this setting configures.
   */
  assetAutomationType?:  | "UNSPECIFIED" | "UNKNOWN" | "TEXT_ASSET_AUTOMATION" | "GENERATE_VERTICAL_YOUTUBE_VIDEOS" | "GENERATE_SHORTER_YOUTUBE_VIDEOS" | "GENERATE_LANDING_PAGE_PREVIEW" | "GENERATE_ENHANCED_YOUTUBE_VIDEOS" | "GENERATE_IMAGE_ENHANCEMENT" | "GENERATE_IMAGE_EXTRACTION" | "GENERATE_DESIGN_VERSIONS_FOR_IMAGES" | "FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION" | "GENERATE_VIDEOS_FROM_OTHER_ASSETS";
}

/**
 * A view on the usage of ad group ad asset combination. Now we only support
 * AdGroupAdAssetCombinationView for Responsive Search Ads, with more ad types
 * planned for the future.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdAssetCombinationView {
  /**
   * Output only. The status between the asset combination and the latest
   * version of the ad. If true, the asset combination is linked to the latest
   * version of the ad. If false, it means the link once existed but has been
   * removed and is no longer present in the latest version of the ad.
   */
  readonly enabled?: boolean;
  /**
   * Output only. The resource name of the ad group ad asset combination view.
   * The combination ID is 128 bits long, where the upper 64 bits are stored in
   * asset_combination_id_high, and the lower 64 bits are stored in
   * asset_combination_id_low. AdGroupAd Asset Combination view resource names
   * have the form:
   * `customers/{customer_id}/adGroupAdAssetCombinationViews/{AdGroupAd.ad_group_id}~{AdGroupAd.ad.ad_id}~{AssetCombination.asset_combination_id_low}~{AssetCombination.asset_combination_id_high}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Served assets.
   */
  readonly servedAssets?: GoogleAdsSearchads360V23Common__AssetUsage[];
}

/**
 * Contains policy information for an ad group ad asset.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdAssetPolicySummary {
  /**
   * Output only. The overall approval status of this ad group ad asset,
   * calculated based on the status of its individual policy topic entries.
   */
  readonly approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "DISAPPROVED" | "APPROVED_LIMITED" | "APPROVED" | "AREA_OF_INTEREST_ONLY";
  /**
   * Output only. The list of policy findings for the ad group ad asset.
   */
  readonly policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
  /**
   * Output only. Where in the review process this ad group ad asset is.
   */
  readonly reviewStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REVIEW_IN_PROGRESS" | "REVIEWED" | "UNDER_APPEAL" | "ELIGIBLE_MAY_SERVE";
}

/**
 * Represents a link between an AdGroupAd and an Asset. This view provides
 * insights into the performance of assets within specific ads.
 * AdGroupAdAssetView supports the following ad types: * App Ads * Demand Gen
 * campaigns * Responsive Search Ads It does not support Responsive Display Ads.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdAssetView {
  /**
   * Output only. The ad group ad to which the asset is linked.
   */
  readonly adGroupAd?: string;
  /**
   * Output only. The asset which is linked to the ad group ad.
   */
  readonly asset?: string;
  /**
   * Output only. The status between the asset and the latest version of the
   * ad. If true, the asset is linked to the latest version of the ad. If false,
   * it means the link once existed but has been removed and is no longer
   * present in the latest version of the ad.
   */
  readonly enabled?: boolean;
  /**
   * Output only. Role that the asset takes in the ad.
   */
  readonly fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Performance of an asset linkage.
   */
  readonly performanceLabel?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "LEARNING" | "LOW" | "GOOD" | "BEST" | "NOT_APPLICABLE";
  /**
   * Output only. Pinned field.
   */
  readonly pinnedField?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE_1" | "HEADLINE_2" | "HEADLINE_3" | "DESCRIPTION_1" | "DESCRIPTION_2" | "HEADLINE" | "HEADLINE_IN_PORTRAIT" | "LONG_HEADLINE" | "DESCRIPTION" | "DESCRIPTION_IN_PORTRAIT" | "BUSINESS_NAME_IN_PORTRAIT" | "BUSINESS_NAME" | "MARKETING_IMAGE" | "MARKETING_IMAGE_IN_PORTRAIT" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "CALL_TO_ACTION" | "YOU_TUBE_VIDEO" | "SITELINK" | "CALL" | "MOBILE_APP" | "CALLOUT" | "STRUCTURED_SNIPPET" | "PRICE" | "PROMOTION" | "AD_IMAGE" | "LEAD_FORM" | "BUSINESS_LOGO" | "DESCRIPTION_PREFIX" | "HEADLINE_AS_SITELINK_POSITION_ONE" | "HEADLINE_AS_SITELINK_POSITION_TWO" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_ONE" | "DESCRIPTION_LINE_HEADLINE_AS_SITELINK_POSITION_TWO";
  /**
   * Output only. Policy information for the ad group ad asset.
   */
  readonly policySummary?: GoogleAdsSearchads360V23Resources__AdGroupAdAssetPolicySummary;
  /**
   * Output only. The resource name of the ad group ad asset view. Ad group ad
   * asset view resource names have the form (Before V4):
   * `customers/{customer_id}/adGroupAdAssets/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.field_type}`
   * Ad group ad asset view resource names have the form (Beginning from V4):
   * `customers/{customer_id}/adGroupAdAssetViews/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.field_type}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Source of the ad group ad asset.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
}

/**
 * A relationship between an ad group ad and an effective label. An effective
 * label is a label inherited or directly assigned to this ad group ad.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdEffectiveLabel {
  /**
   * Immutable. The ad group ad to which the effective label is attached.
   */
  adGroupAd?: string;
  /**
   * Immutable. The effective label assigned to the ad group ad.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the effective label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group ad effective label. Ad group
   * ad effective label resource names have the form:
   * `customers/{owner_customer_id}/adGroupAdEffectiveLabels/{ad_group_id}~{ad_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * A relationship between an ad group ad and a label.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdLabel {
  /**
   * Immutable. The ad group ad to which the label is attached.
   */
  adGroupAd?: string;
  /**
   * Immutable. The label assigned to the ad group ad.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group ad label. Ad group ad label
   * resource names have the form:
   * `customers/{owner_customer_id}/adGroupAdLabels/{ad_group_id}~{ad_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * Contains policy information for an ad.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAdPolicySummary {
  /**
   * Output only. The overall approval status of this ad, calculated based on
   * the status of its individual policy topic entries.
   */
  readonly approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "DISAPPROVED" | "APPROVED_LIMITED" | "APPROVED" | "AREA_OF_INTEREST_ONLY";
  /**
   * Output only. The list of policy findings for this ad.
   */
  readonly policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
  /**
   * Output only. Where in the review process this ad is.
   */
  readonly reviewStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REVIEW_IN_PROGRESS" | "REVIEWED" | "UNDER_APPEAL" | "ELIGIBLE_MAY_SERVE";
}

/**
 * A link between an ad group and an asset.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAsset {
  /**
   * Required. Immutable. The ad group to which the asset is linked.
   */
  adGroup?: string;
  /**
   * Required. Immutable. The asset which is linked to the ad group.
   */
  asset?: string;
  /**
   * Required. Immutable. Role that the asset takes under the linked ad group.
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Provides the PrimaryStatus of this asset link. Primary status
   * is meant essentially to differentiate between the plain "status" field,
   * which has advertiser set values of enabled, paused, or removed. The primary
   * status takes into account other signals (for assets its mainly policy and
   * quality approvals) to come up with a more comprehensive status to indicate
   * its serving state.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
  /**
   * Output only. Provides the details of the primary status and its associated
   * reasons.
   */
  readonly primaryStatusDetails?: GoogleAdsSearchads360V23Common__AssetLinkPrimaryStatusDetails[];
  /**
   * Output only. Provides a list of reasons for why an asset is not serving or
   * not serving at full capacity.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_LINK_PAUSED" | "ASSET_LINK_REMOVED" | "ASSET_DISAPPROVED" | "ASSET_UNDER_REVIEW" | "ASSET_APPROVED_LABELED"[];
  /**
   * Immutable. The resource name of the ad group asset. AdGroupAsset resource
   * names have the form:
   * `customers/{customer_id}/adGroupAssets/{ad_group_id}~{asset_id}~{field_type}`
   */
  resourceName?: string;
  /**
   * Output only. Source of the adgroup asset link.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * Status of the ad group asset.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * AdGroupAssetSet is the linkage between an ad group and an asset set.
 * Creating an AdGroupAssetSet links an asset set with an ad group.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAssetSet {
  /**
   * Immutable. The ad group to which this asset set is linked.
   */
  adGroup?: string;
  /**
   * Immutable. The asset set which is linked to the ad group.
   */
  assetSet?: string;
  /**
   * Immutable. The resource name of the ad group asset set. Ad group asset set
   * resource names have the form:
   * `customers/{customer_id}/adGroupAssetSets/{ad_group_id}~{asset_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the ad group asset set. Read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * An ad group audience view. Includes performance data from interests and
 * remarketing lists for Display Network and YouTube Network ads, and
 * remarketing lists for search ads (RLSA), aggregated at the audience level.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupAudienceView {
  /**
   * Output only. The resource name of the ad group audience view. Ad group
   * audience view resource names have the form:
   * `customers/{customer_id}/adGroupAudienceViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * Represents an ad group bid modifier.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupBidModifier {
  /**
   * Immutable. The ad group to which this criterion belongs.
   */
  adGroup?: string;
  /**
   * Output only. The base ad group from which this draft/trial adgroup bid
   * modifier was created. If ad_group is a base ad group then this field will
   * be equal to ad_group. If the ad group was created in the draft or trial and
   * has no corresponding base ad group, then this field will be null. This
   * field is readonly.
   */
  readonly baseAdGroup?: string;
  /**
   * The modifier for the bid when the criterion matches. The modifier must be
   * in the range: 0.1 - 10.0. Use 0 to opt out of a Device type.
   */
  bidModifier?: number;
  /**
   * Output only. Bid modifier source.
   */
  readonly bidModifierSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN" | "AD_GROUP";
  /**
   * Output only. The ID of the criterion to bid modify. This field is ignored
   * for mutates.
   */
  readonly criterionId?: bigint;
  /**
   * Immutable. A device criterion.
   */
  device?: GoogleAdsSearchads360V23Common__DeviceInfo;
  /**
   * Immutable. Criterion for number of days prior to the stay the booking is
   * being made.
   */
  hotelAdvanceBookingWindow?: GoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo;
  /**
   * Immutable. Criterion for a hotel check-in date range.
   */
  hotelCheckInDateRange?: GoogleAdsSearchads360V23Common__HotelCheckInDateRangeInfo;
  /**
   * Immutable. Criterion for day of the week the booking is for.
   */
  hotelCheckInDay?: GoogleAdsSearchads360V23Common__HotelCheckInDayInfo;
  /**
   * Immutable. Criterion for hotel date selection (default dates versus user
   * selected).
   */
  hotelDateSelectionType?: GoogleAdsSearchads360V23Common__HotelDateSelectionTypeInfo;
  /**
   * Immutable. Criterion for length of hotel stay in nights.
   */
  hotelLengthOfStay?: GoogleAdsSearchads360V23Common__HotelLengthOfStayInfo;
  /**
   * Immutable. The resource name of the ad group bid modifier. Ad group bid
   * modifier resource names have the form:
   * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}~{criterion_id}`
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data: any): GoogleAdsSearchads360V23Resources__AdGroupBidModifier {
  return {
    ...data,
    hotelAdvanceBookingWindow: data["hotelAdvanceBookingWindow"] !== undefined ? serializeGoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo(data["hotelAdvanceBookingWindow"]) : undefined,
    hotelLengthOfStay: data["hotelLengthOfStay"] !== undefined ? serializeGoogleAdsSearchads360V23Common__HotelLengthOfStayInfo(data["hotelLengthOfStay"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data: any): GoogleAdsSearchads360V23Resources__AdGroupBidModifier {
  return {
    ...data,
    criterionId: data["criterionId"] !== undefined ? BigInt(data["criterionId"]) : undefined,
    hotelAdvanceBookingWindow: data["hotelAdvanceBookingWindow"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__HotelAdvanceBookingWindowInfo(data["hotelAdvanceBookingWindow"]) : undefined,
    hotelLengthOfStay: data["hotelLengthOfStay"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__HotelLengthOfStayInfo(data["hotelLengthOfStay"]) : undefined,
  };
}

/**
 * An ad group criterion. The ad_group_criterion report only returns criteria
 * that were explicitly added to the ad group.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCriterion {
  /**
   * Immutable. The ad group to which the criterion belongs.
   */
  adGroup?: string;
  /**
   * Immutable. Age range.
   */
  ageRange?: GoogleAdsSearchads360V23Common__AgeRangeInfo;
  /**
   * Immutable. App Payment Model.
   */
  appPaymentModel?: GoogleAdsSearchads360V23Common__AppPaymentModelInfo;
  /**
   * Output only. Approval status of the criterion.
   */
  readonly approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "APPROVED" | "DISAPPROVED" | "PENDING_REVIEW" | "UNDER_REVIEW";
  /**
   * Immutable. Audience.
   */
  audience?: GoogleAdsSearchads360V23Common__AudienceInfo;
  /**
   * The modifier for the bid when the criterion matches. The modifier must be
   * in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
   */
  bidModifier?: number;
  /**
   * Immutable. Brand list criterion.
   */
  brandList?: GoogleAdsSearchads360V23Common__BrandListInfo;
  /**
   * Immutable. Combined Audience.
   */
  combinedAudience?: GoogleAdsSearchads360V23Common__CombinedAudienceInfo;
  /**
   * The CPC (cost-per-click) bid.
   */
  cpcBidMicros?: bigint;
  /**
   * The CPM (cost-per-thousand viewable impressions) bid.
   */
  cpmBidMicros?: bigint;
  /**
   * The CPV (cost-per-view) bid.
   */
  cpvBidMicros?: bigint;
  /**
   * Output only. The timestamp when this ad group criterion was created. The
   * timestamp is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss"
   * format.
   */
  readonly creationTime?: string;
  /**
   * Output only. The ID of the criterion.
   */
  readonly criterionId?: bigint;
  /**
   * Immutable. Custom Affinity.
   */
  customAffinity?: GoogleAdsSearchads360V23Common__CustomAffinityInfo;
  /**
   * Immutable. Custom Audience.
   */
  customAudience?: GoogleAdsSearchads360V23Common__CustomAudienceInfo;
  /**
   * Immutable. Custom Intent.
   */
  customIntent?: GoogleAdsSearchads360V23Common__CustomIntentInfo;
  /**
   * Output only. List of disapproval reasons of the criterion. The different
   * reasons for disapproving a criterion can be found here:
   * https://support.google.com/adspolicy/answer/6008942 This field is
   * read-only.
   */
  readonly disapprovalReasons?: string[];
  /**
   * Output only. The display name of the criterion.
   */
  readonly displayName?: string;
  /**
   * Output only. The effective CPC (cost-per-click) bid.
   */
  readonly effectiveCpcBidMicros?: bigint;
  /**
   * Output only. Source of the effective CPC bid.
   */
  readonly effectiveCpcBidSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. The effective CPM (cost-per-thousand viewable impressions)
   * bid.
   */
  readonly effectiveCpmBidMicros?: bigint;
  /**
   * Output only. Source of the effective CPM bid.
   */
  readonly effectiveCpmBidSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. The effective CPV (cost-per-view) bid.
   */
  readonly effectiveCpvBidMicros?: bigint;
  /**
   * Output only. Source of the effective CPV bid.
   */
  readonly effectiveCpvBidSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. The resource names of effective labels attached to this ad
   * group criterion. An effective label is a label inherited or directly
   * assigned to this ad group criterion.
   */
  readonly effectiveLabels?: string[];
  /**
   * Output only. The effective Percent CPC bid amount.
   */
  readonly effectivePercentCpcBidMicros?: bigint;
  /**
   * Output only. Source of the effective Percent CPC bid.
   */
  readonly effectivePercentCpcBidSource?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BIDDING_STRATEGY" | "AD_GROUP" | "AD_GROUP_CRITERION";
  /**
   * Output only. ID of the ad group criterion in the external engine account.
   * This field is for non-Google Ads account only, for example, Yahoo Japan,
   * Microsoft, Baidu etc. For Google Ads entity, use
   * "ad_group_criterion.criterion_id" instead.
   */
  readonly engineId?: string;
  /**
   * Output only. The Engine Status for ad group criterion.
   */
  readonly engineStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP_CRITERION_ELIGIBLE" | "AD_GROUP_CRITERION_INAPPROPRIATE_FOR_CAMPAIGN" | "AD_GROUP_CRITERION_INVALID_MOBILE_SEARCH" | "AD_GROUP_CRITERION_INVALID_PC_SEARCH" | "AD_GROUP_CRITERION_INVALID_SEARCH" | "AD_GROUP_CRITERION_LOW_SEARCH_VOLUME" | "AD_GROUP_CRITERION_MOBILE_URL_UNDER_REVIEW" | "AD_GROUP_CRITERION_PARTIALLY_INVALID" | "AD_GROUP_CRITERION_TO_BE_ACTIVATED" | "AD_GROUP_CRITERION_UNDER_REVIEW" | "AD_GROUP_CRITERION_NOT_REVIEWED" | "AD_GROUP_CRITERION_ON_HOLD" | "AD_GROUP_CRITERION_PENDING_REVIEW" | "AD_GROUP_CRITERION_PAUSED" | "AD_GROUP_CRITERION_REMOVED" | "AD_GROUP_CRITERION_APPROVED" | "AD_GROUP_CRITERION_DISAPPROVED" | "AD_GROUP_CRITERION_SERVING" | "AD_GROUP_CRITERION_ACCOUNT_PAUSED";
  /**
   * Immutable. Extended demographic criterion.
   */
  extendedDemographic?: GoogleAdsSearchads360V23Common__ExtendedDemographicInfo;
  /**
   * The list of possible final mobile URLs after all cross-domain redirects.
   */
  finalMobileUrls?: string[];
  /**
   * The list of possible final URLs after all cross-domain redirects for the
   * ad.
   */
  finalUrls?: string[];
  /**
   * URL template for appending params to final URL.
   */
  finalUrlSuffix?: string;
  /**
   * Immutable. Gender.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderInfo;
  /**
   * Immutable. Income range.
   */
  incomeRange?: GoogleAdsSearchads360V23Common__IncomeRangeInfo;
  /**
   * Immutable. Keyword.
   */
  keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Output only. The resource names of labels attached to this ad group
   * criterion.
   */
  readonly labels?: string[];
  /**
   * Immutable. Language.
   */
  language?: GoogleAdsSearchads360V23Common__LanguageInfo;
  /**
   * Output only. The datetime when this ad group criterion was last modified.
   * The datetime is in the customer's time zone and in "yyyy-MM-dd
   * HH:mm:ss.ssssss" format.
   */
  readonly lastModifiedTime?: string;
  /**
   * Immutable. Life event campaign criterion.
   */
  lifeEvent?: GoogleAdsSearchads360V23Common__LifeEventInfo;
  /**
   * Immutable. Listing group.
   */
  listingGroup?: GoogleAdsSearchads360V23Common__ListingGroupInfo;
  /**
   * Immutable. Location.
   */
  location?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * Immutable. Mobile app category.
   */
  mobileAppCategory?: GoogleAdsSearchads360V23Common__MobileAppCategoryInfo;
  /**
   * Immutable. Mobile application.
   */
  mobileApplication?: GoogleAdsSearchads360V23Common__MobileApplicationInfo;
  /**
   * Immutable. Whether to target (`false`) or exclude (`true`) the criterion.
   * This field is immutable. To switch a criterion from positive to negative,
   * remove then re-add it.
   */
  negative?: boolean;
  /**
   * Immutable. Parental status.
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusInfo;
  /**
   * The CPC bid amount, expressed as a fraction of the advertised price for
   * some good or service. The valid range for the fraction is [0,1) and the
   * value stored here is 1,000,000 * [fraction].
   */
  percentCpcBidMicros?: bigint;
  /**
   * Immutable. Placement.
   */
  placement?: GoogleAdsSearchads360V23Common__PlacementInfo;
  /**
   * Output only. Estimates for criterion bids at various positions.
   */
  readonly positionEstimates?: GoogleAdsSearchads360V23Resources_AdGroupCriterion_PositionEstimates;
  /**
   * Output only. The primary status for the ad group criterion.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "NOT_ELIGIBLE";
  /**
   * Output only. The primary status reasons for the ad group criterion.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_PENDING" | "CAMPAIGN_CRITERION_NEGATIVE" | "CAMPAIGN_PAUSED" | "CAMPAIGN_REMOVED" | "CAMPAIGN_ENDED" | "AD_GROUP_PAUSED" | "AD_GROUP_REMOVED" | "AD_GROUP_CRITERION_DISAPPROVED" | "AD_GROUP_CRITERION_RARELY_SERVED" | "AD_GROUP_CRITERION_LOW_QUALITY" | "AD_GROUP_CRITERION_UNDER_REVIEW" | "AD_GROUP_CRITERION_PENDING_REVIEW" | "AD_GROUP_CRITERION_BELOW_FIRST_PAGE_BID" | "AD_GROUP_CRITERION_NEGATIVE" | "AD_GROUP_CRITERION_RESTRICTED" | "AD_GROUP_CRITERION_PAUSED" | "AD_GROUP_CRITERION_PAUSED_DUE_TO_LOW_ACTIVITY" | "AD_GROUP_CRITERION_REMOVED"[];
  /**
   * Output only. Information regarding the quality of the criterion.
   */
  readonly qualityInfo?: GoogleAdsSearchads360V23Resources_AdGroupCriterion_QualityInfo;
  /**
   * Immutable. The resource name of the ad group criterion. Ad group criterion
   * resource names have the form:
   * `customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id}`
   */
  resourceName?: string;
  /**
   * The status of the criterion. This is the status of the ad group criterion
   * entity, set by the client. Note: UI reports may incorporate additional
   * information that affects whether a criterion is eligible to run. In some
   * cases a criterion that's REMOVED in the API can still show as enabled in
   * the UI. For example, campaigns by default show to users of all age ranges
   * unless excluded. The UI will show each age range as "enabled", since
   * they're eligible to see the ads; but AdGroupCriterion.status will show
   * "removed", since no positive criterion was added.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
  /**
   * Output only. Serving status of the criterion.
   */
  readonly systemServingStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "RARELY_SERVED";
  /**
   * Immutable. Topic.
   */
  topic?: GoogleAdsSearchads360V23Common__TopicInfo;
  /**
   * The URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Output only. The type of the criterion.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "PLACEMENT" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "DEVICE" | "LOCATION" | "LISTING_GROUP" | "AD_SCHEDULE" | "AGE_RANGE" | "GENDER" | "INCOME_RANGE" | "PARENTAL_STATUS" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "USER_LIST" | "PROXIMITY" | "TOPIC" | "LISTING_SCOPE" | "LANGUAGE" | "IP_BLOCK" | "CONTENT_LABEL" | "CARRIER" | "USER_INTEREST" | "WEBPAGE" | "OPERATING_SYSTEM_VERSION" | "APP_PAYMENT_MODEL" | "MOBILE_DEVICE" | "CUSTOM_AFFINITY" | "CUSTOM_INTENT" | "LOCATION_GROUP" | "CUSTOM_AUDIENCE" | "COMBINED_AUDIENCE" | "KEYWORD_THEME" | "AUDIENCE" | "NEGATIVE_KEYWORD_LIST" | "LOCAL_SERVICE_ID" | "SEARCH_THEME" | "BRAND" | "BRAND_LIST" | "LIFE_EVENT" | "WEBPAGE_LIST" | "VIDEO_LINEUP" | "PLACEMENT_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE";
  /**
   * The list of mappings used to substitute custom parameter tags in a
   * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
  /**
   * Immutable. User Interest.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestInfo;
  /**
   * Immutable. User List.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListInfo;
  /**
   * Immutable. Vertical ads item group rule list criterion.
   */
  verticalAdsItemGroupRuleList?: GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleListInfo;
  /**
   * Immutable. Video lineup criterion.
   */
  videoLineup?: GoogleAdsSearchads360V23Common__VideoLineupInfo;
  /**
   * Immutable. Webpage
   */
  webpage?: GoogleAdsSearchads360V23Common__WebpageInfo;
  /**
   * Immutable. YouTube Channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * Immutable. YouTube Video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Common__YouTubeVideoInfo;
}

function serializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data: any): GoogleAdsSearchads360V23Resources__AdGroupCriterion {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
    cpmBidMicros: data["cpmBidMicros"] !== undefined ? String(data["cpmBidMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? String(data["cpvBidMicros"]) : undefined,
    extendedDemographic: data["extendedDemographic"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data["extendedDemographic"]) : undefined,
    lifeEvent: data["lifeEvent"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LifeEventInfo(data["lifeEvent"]) : undefined,
    listingGroup: data["listingGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ListingGroupInfo(data["listingGroup"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? String(data["percentCpcBidMicros"]) : undefined,
    videoLineup: data["videoLineup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data["videoLineup"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data: any): GoogleAdsSearchads360V23Resources__AdGroupCriterion {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    cpmBidMicros: data["cpmBidMicros"] !== undefined ? BigInt(data["cpmBidMicros"]) : undefined,
    cpvBidMicros: data["cpvBidMicros"] !== undefined ? BigInt(data["cpvBidMicros"]) : undefined,
    criterionId: data["criterionId"] !== undefined ? BigInt(data["criterionId"]) : undefined,
    effectiveCpcBidMicros: data["effectiveCpcBidMicros"] !== undefined ? BigInt(data["effectiveCpcBidMicros"]) : undefined,
    effectiveCpmBidMicros: data["effectiveCpmBidMicros"] !== undefined ? BigInt(data["effectiveCpmBidMicros"]) : undefined,
    effectiveCpvBidMicros: data["effectiveCpvBidMicros"] !== undefined ? BigInt(data["effectiveCpvBidMicros"]) : undefined,
    effectivePercentCpcBidMicros: data["effectivePercentCpcBidMicros"] !== undefined ? BigInt(data["effectivePercentCpcBidMicros"]) : undefined,
    extendedDemographic: data["extendedDemographic"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data["extendedDemographic"]) : undefined,
    lifeEvent: data["lifeEvent"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LifeEventInfo(data["lifeEvent"]) : undefined,
    listingGroup: data["listingGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ListingGroupInfo(data["listingGroup"]) : undefined,
    percentCpcBidMicros: data["percentCpcBidMicros"] !== undefined ? BigInt(data["percentCpcBidMicros"]) : undefined,
    videoLineup: data["videoLineup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data["videoLineup"]) : undefined,
  };
}

/**
 * A customizer value for the associated CustomizerAttribute at the
 * AdGroupCriterion level.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCriterionCustomizer {
  /**
   * Immutable. The ad group criterion to which the customizer attribute is
   * linked. It must be a keyword criterion.
   */
  adGroupCriterion?: string;
  /**
   * Required. Immutable. The customizer attribute which is linked to the ad
   * group criterion.
   */
  customizerAttribute?: string;
  /**
   * Immutable. The resource name of the ad group criterion customizer. Ad
   * group criterion customizer resource names have the form:
   * `customers/{customer_id}/adGroupCriterionCustomizers/{ad_group_id}~{criterion_id}~{customizer_attribute_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the ad group criterion customizer.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Required. The value to associate with the customizer attribute at this
   * level. The value must be of the type specified for the CustomizerAttribute.
   */
  value?: GoogleAdsSearchads360V23Common__CustomizerValue;
}

/**
 * A relationship between an ad group criterion and an effective label. An
 * effective label is a label inherited or directly assigned to this ad group
 * criterion.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCriterionEffectiveLabel {
  /**
   * Immutable. The ad group criterion to which the effective label is
   * attached.
   */
  adGroupCriterion?: string;
  /**
   * Immutable. The effective label assigned to the ad group criterion.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the effective label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group criterion effective label. Ad
   * group criterion effective label resource names have the form:
   * `customers/{owner_customer_id}/adGroupCriterionEffectiveLabels/{ad_group_id}~{criterion_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * A relationship between an ad group criterion and a label.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCriterionLabel {
  /**
   * Immutable. The ad group criterion to which the label is attached.
   */
  adGroupCriterion?: string;
  /**
   * Immutable. The label assigned to the ad group criterion.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group criterion label. Ad group
   * criterion label resource names have the form:
   * `customers/{owner_customer_id}/adGroupCriterionLabels/{ad_group_id}~{criterion_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * An ad group criterion simulation. Supported combinations of advertising
 * channel type, criterion type, simulation type, and simulation modification
 * method are detailed below respectively. Hotel AdGroupCriterion simulation
 * operations starting in V5. 1. DISPLAY - KEYWORD - CPC_BID - UNIFORM 2. SEARCH
 * - KEYWORD - CPC_BID - UNIFORM 3. SHOPPING - LISTING_GROUP - CPC_BID - UNIFORM
 * 4. HOTEL - LISTING_GROUP - CPC_BID - UNIFORM 5. HOTEL - LISTING_GROUP -
 * PERCENT_CPC_BID - UNIFORM
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCriterionSimulation {
  /**
   * Output only. AdGroup ID of the simulation.
   */
  readonly adGroupId?: bigint;
  /**
   * Output only. Simulation points if the simulation type is CPC_BID.
   */
  readonly cpcBidPointList?: GoogleAdsSearchads360V23Common__CpcBidSimulationPointList;
  /**
   * Output only. Criterion ID of the simulation.
   */
  readonly criterionId?: bigint;
  /**
   * Output only. Last day on which the simulation is based, in YYYY-MM-DD
   * format.
   */
  readonly endDate?: string;
  /**
   * Output only. How the simulation modifies the field.
   */
  readonly modificationMethod?:  | "UNSPECIFIED" | "UNKNOWN" | "UNIFORM" | "DEFAULT" | "SCALING";
  /**
   * Output only. Simulation points if the simulation type is PERCENT_CPC_BID.
   */
  readonly percentCpcBidPointList?: GoogleAdsSearchads360V23Common__PercentCpcBidSimulationPointList;
  /**
   * Output only. The resource name of the ad group criterion simulation. Ad
   * group criterion simulation resource names have the form:
   * `customers/{customer_id}/adGroupCriterionSimulations/{ad_group_id}~{criterion_id}~{type}~{modification_method}~{start_date}~{end_date}`
   */
  readonly resourceName?: string;
  /**
   * Output only. First day on which the simulation is based, in YYYY-MM-DD
   * format.
   */
  readonly startDate?: string;
  /**
   * Output only. The field that the simulation modifies.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CPC_BID" | "CPV_BID" | "TARGET_CPA" | "BID_MODIFIER" | "TARGET_ROAS" | "PERCENT_CPC_BID" | "TARGET_IMPRESSION_SHARE" | "BUDGET";
}

/**
 * A customizer value for the associated CustomizerAttribute at the AdGroup
 * level.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupCustomizer {
  /**
   * Immutable. The ad group to which the customizer attribute is linked.
   */
  adGroup?: string;
  /**
   * Required. Immutable. The customizer attribute which is linked to the ad
   * group.
   */
  customizerAttribute?: string;
  /**
   * Immutable. The resource name of the ad group customizer. Ad group
   * customizer resource names have the form:
   * `customers/{customer_id}/adGroupCustomizers/{ad_group_id}~{customizer_attribute_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the ad group customizer.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Required. The value to associate with the customizer attribute at this
   * level. The value must be of the type specified for the CustomizerAttribute.
   */
  value?: GoogleAdsSearchads360V23Common__CustomizerValue;
}

/**
 * A relationship between an ad group and an effective label. An effective
 * label is a label inherited or directly assigned to this ad group.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupEffectiveLabel {
  /**
   * Immutable. The ad group to which the effective label is attached.
   */
  adGroup?: string;
  /**
   * Immutable. The effective label assigned to the ad group.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the effective label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group effective label. Ad group
   * effective label resource names have the form:
   * `customers/{owner_customer_id}/adGroupEffectiveLabels/{ad_group_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * A relationship between an ad group and a label.
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupLabel {
  /**
   * Immutable. The ad group to which the label is attached.
   */
  adGroup?: string;
  /**
   * Immutable. The label assigned to the ad group.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. The resource name of the ad group label. Ad group label
   * resource names have the form:
   * `customers/{owner_customer_id}/adGroupLabels/{ad_group_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * An ad group simulation. Supported combinations of advertising channel type,
 * simulation type and simulation modification method is detailed below
 * respectively. 1. SEARCH - CPC_BID - DEFAULT 2. SEARCH - CPC_BID - UNIFORM 3.
 * SEARCH - TARGET_CPA - UNIFORM 4. SEARCH - TARGET_ROAS - UNIFORM 5. DISPLAY -
 * CPC_BID - DEFAULT 6. DISPLAY - CPC_BID - UNIFORM 7. DISPLAY - TARGET_CPA -
 * UNIFORM
 */
export interface GoogleAdsSearchads360V23Resources__AdGroupSimulation {
  /**
   * Output only. Ad group id of the simulation.
   */
  readonly adGroupId?: bigint;
  /**
   * Output only. Simulation points if the simulation type is CPC_BID.
   */
  readonly cpcBidPointList?: GoogleAdsSearchads360V23Common__CpcBidSimulationPointList;
  /**
   * Output only. Simulation points if the simulation type is CPV_BID.
   */
  readonly cpvBidPointList?: GoogleAdsSearchads360V23Common__CpvBidSimulationPointList;
  /**
   * Output only. Last day on which the simulation is based, in YYYY-MM-DD
   * format
   */
  readonly endDate?: string;
  /**
   * Output only. How the simulation modifies the field.
   */
  readonly modificationMethod?:  | "UNSPECIFIED" | "UNKNOWN" | "UNIFORM" | "DEFAULT" | "SCALING";
  /**
   * Output only. The resource name of the ad group simulation. Ad group
   * simulation resource names have the form:
   * `customers/{customer_id}/adGroupSimulations/{ad_group_id}~{type}~{modification_method}~{start_date}~{end_date}`
   */
  readonly resourceName?: string;
  /**
   * Output only. First day on which the simulation is based, in YYYY-MM-DD
   * format.
   */
  readonly startDate?: string;
  /**
   * Output only. Simulation points if the simulation type is TARGET_CPA.
   */
  readonly targetCpaPointList?: GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList;
  /**
   * Output only. Simulation points if the simulation type is TARGET_ROAS.
   */
  readonly targetRoasPointList?: GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList;
  /**
   * Output only. The field that the simulation modifies.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CPC_BID" | "CPV_BID" | "TARGET_CPA" | "BID_MODIFIER" | "TARGET_ROAS" | "PERCENT_CPC_BID" | "TARGET_IMPRESSION_SHARE" | "BUDGET";
}

/**
 * An ad parameter that is used to update numeric values (such as prices or
 * inventory levels) in any text line of an ad (including URLs). There can be a
 * maximum of two AdParameters per ad group criterion. (One with parameter_index
 * = 1 and one with parameter_index = 2.) In the ad the parameters are
 * referenced by a placeholder of the form "{param#:value}". For example,
 * "{param1:$17}"
 */
export interface GoogleAdsSearchads360V23Resources__AdParameter {
  /**
   * Immutable. The ad group criterion that this ad parameter belongs to.
   */
  adGroupCriterion?: string;
  /**
   * Numeric value to insert into the ad text. The following restrictions
   * apply: - Can use comma or period as a separator, with an optional period or
   * comma (respectively) for fractional values. For example, 1,000,000.00 and
   * 2.000.000,10 are valid. - Can be prepended or appended with a currency
   * symbol. For example, $99.99 is valid. - Can be prepended or appended with a
   * currency code. For example, 99.99USD and EUR200 are valid. - Can use '%'.
   * For example, 1.0% and 1,0% are valid. - Can use plus or minus. For example,
   * -10.99 and 25+ are valid. - Can use '/' between two numbers. For example
   * 4/1 and 0.95/0.45 are valid.
   */
  insertionText?: string;
  /**
   * Immutable. The unique index of this ad parameter. Must be either 1 or 2.
   */
  parameterIndex?: bigint;
  /**
   * Immutable. The resource name of the ad parameter. Ad parameter resource
   * names have the form:
   * `customers/{customer_id}/adParameters/{ad_group_id}~{criterion_id}~{parameter_index}`
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Resources__AdParameter(data: any): GoogleAdsSearchads360V23Resources__AdParameter {
  return {
    ...data,
    parameterIndex: data["parameterIndex"] !== undefined ? String(data["parameterIndex"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AdParameter(data: any): GoogleAdsSearchads360V23Resources__AdParameter {
  return {
    ...data,
    parameterIndex: data["parameterIndex"] !== undefined ? BigInt(data["parameterIndex"]) : undefined,
  };
}

/**
 * An ad schedule view summarizes the performance of campaigns by AdSchedule
 * criteria.
 */
export interface GoogleAdsSearchads360V23Resources__AdScheduleView {
  /**
   * Output only. The resource name of the ad schedule view. AdSchedule view
   * resource names have the form:
   * `customers/{customer_id}/adScheduleViews/{campaign_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * An action item to improve the ad strength of an asset group.
 */
export interface GoogleAdsSearchads360V23Resources__AdStrengthActionItem {
  /**
   * Output only. The action item type.
   */
  readonly actionItemType?:  | "UNSPECIFIED" | "UNKNOWN" | "ADD_ASSET";
  /**
   * Output only. The action item details for action item type ADD_ASSET.
   */
  readonly addAssetDetails?: GoogleAdsSearchads360V23Resources_AdStrengthActionItem_AddAssetDetails;
}

/**
 * The identifier for the Advertising Partner Google Ads account.
 */
export interface GoogleAdsSearchads360V23Resources__AdvertisingPartnerIdentifier {
  /**
   * Output only. The resource name of the advertising partner Google Ads
   * account. This field is required and should not be empty when creating a new
   * Advertising Partner link. It is unable to be modified after the creation of
   * the link.
   */
  readonly customer?: string;
}

/**
 * The identifier for the Advertising Partner Google Ads account.
 */
export interface GoogleAdsSearchads360V23Resources__AdvertisingPartnerLinkInvitationIdentifier {
  /**
   * Immutable. The resource name of the advertising partner Google Ads
   * account. This field is read only.
   */
  customer?: string;
}

/**
 * An age range view.
 */
export interface GoogleAdsSearchads360V23Resources__AgeRangeView {
  /**
   * Output only. The resource name of the age range view. Age range view
   * resource names have the form:
   * `customers/{customer_id}/ageRangeViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * AiMaxSearchTermAdCombinationView Resource.
 */
export interface GoogleAdsSearchads360V23Resources__AiMaxSearchTermAdCombinationView {
  /**
   * Output only. Ad group where the search term served.
   */
  readonly adGroup?: string;
  /**
   * Output only. The concatenated string containing headline assets for the
   * ad. Up to three headline assets are concatenated, separated by " | ". This
   * field is read-only.
   */
  readonly headline?: string;
  /**
   * Output only. The destination URL, which was dynamically generated. This
   * field is read-only.
   */
  readonly landingPage?: string;
  /**
   * Output only. The resource name of the AI Max Search Term Ad Combination
   * view AI Max Search Term Ad Combination view resource names have the form:
   * `customers/{customer_id}/aiMaxSearchTermAdCombinationViews/{ad_group_id}~{URL-base64_search_term}~{URL-base64_landing_page}~{URL-base64_headline}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The search term that triggered the ad. This field is
   * read-only.
   */
  readonly searchTerm?: string;
}

/**
 * An Android privacy shared key view for Google ad group key.
 */
export interface GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleAdGroup {
  /**
   * Output only. The ad group ID used in the share key encoding.
   */
  readonly adGroupId?: bigint;
  /**
   * Output only. The interaction date used in the shared key encoding in the
   * format of "YYYY-MM-DD" in UTC timezone.
   */
  readonly androidPrivacyInteractionDate?: string;
  /**
   * Output only. The interaction type enum used in the share key encoding.
   */
  readonly androidPrivacyInteractionType?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICK" | "ENGAGED_VIEW" | "VIEW";
  /**
   * Output only. The network type enum used in the share key encoding.
   */
  readonly androidPrivacyNetworkType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "YOUTUBE";
  /**
   * Output only. The campaign ID used in the share key encoding.
   */
  readonly campaignId?: bigint;
  /**
   * Output only. The resource name of the Android privacy shared key. Android
   * privacy shared key resource names have the form:
   * `customers/{customer_id}/androidPrivacySharedKeyGoogleAdGroups/{campaign_id}~{ad_group_id}~{android_privacy_interaction_type}~{android_privacy_network_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`
   */
  readonly resourceName?: string;
  /**
   * Output only. 128 bit hex string of the encoded shared ad group key,
   * including a '0x' prefix. This key can be used to do a bitwise OR operator
   * with the aggregate conversion key to create a full aggregation key to
   * retrieve the Aggregate API Report in Android Privacy Sandbox.
   */
  readonly sharedAdGroupKey?: string;
}

/**
 * An Android privacy shared key view for Google campaign key.
 */
export interface GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleCampaign {
  /**
   * Output only. The interaction date used in the shared key encoding in the
   * format of "YYYY-MM-DD" in UTC timezone.
   */
  readonly androidPrivacyInteractionDate?: string;
  /**
   * Output only. The interaction type enum used in the share key encoding.
   */
  readonly androidPrivacyInteractionType?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICK" | "ENGAGED_VIEW" | "VIEW";
  /**
   * Output only. The campaign ID used in the share key encoding.
   */
  readonly campaignId?: bigint;
  /**
   * Output only. The resource name of the Android privacy shared key. Android
   * privacy shared key resource names have the form:
   * `customers/{customer_id}/androidPrivacySharedKeyGoogleCampaigns/{campaign_id}~{android_privacy_interaction_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`
   */
  readonly resourceName?: string;
  /**
   * Output only. 128 bit hex string of the encoded shared campaign key,
   * including a '0x' prefix. This key can be used to do a bitwise OR operator
   * with the aggregate conversion key to create a full aggregation key to
   * retrieve the Aggregate API Report in Android Privacy Sandbox.
   */
  readonly sharedCampaignKey?: string;
}

/**
 * An Android privacy shared key view for Google network type key.
 */
export interface GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleNetworkType {
  /**
   * Output only. The interaction date used in the shared key encoding in the
   * format of "YYYY-MM-DD" in UTC timezone.
   */
  readonly androidPrivacyInteractionDate?: string;
  /**
   * Output only. The interaction type enum used in the share key encoding.
   */
  readonly androidPrivacyInteractionType?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICK" | "ENGAGED_VIEW" | "VIEW";
  /**
   * Output only. The network type enum used in the share key encoding.
   */
  readonly androidPrivacyNetworkType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "YOUTUBE";
  /**
   * Output only. The campaign ID used in the share key encoding.
   */
  readonly campaignId?: bigint;
  /**
   * Output only. The resource name of the Android privacy shared key. Android
   * privacy shared key resource names have the form:
   * `customers/{customer_id}/androidPrivacySharedKeyGoogleNetworkTypes/{campaign_id}~{android_privacy_interaction_type}~{android_privacy_network_type}~{android_privacy_interaction_date(yyyy-mm-dd)}`
   */
  readonly resourceName?: string;
  /**
   * Output only. 128 bit hex string of the encoded shared network type key,
   * including a '0x' prefix. This key can be used to do a bitwise OR operator
   * with the aggregate conversion key to create a full aggregation key to
   * retrieve the Aggregate API Report in Android Privacy Sandbox.
   */
  readonly sharedNetworkTypeKey?: string;
}

/**
 * Asset is a part of an ad which can be shared across multiple ads. It can be
 * an image (ImageAsset), a video (YoutubeVideoAsset), etc. Assets are immutable
 * and cannot be removed. To stop an asset from serving, remove the asset from
 * the entity that is using it.
 */
export interface GoogleAdsSearchads360V23Resources__Asset {
  /**
   * Immutable. An app deep link asset.
   */
  appDeepLinkAsset?: GoogleAdsSearchads360V23Common__AppDeepLinkAsset;
  /**
   * A book on google asset.
   */
  bookOnGoogleAsset?: GoogleAdsSearchads360V23Common__BookOnGoogleAsset;
  /**
   * A business message asset.
   */
  businessMessageAsset?: GoogleAdsSearchads360V23Common__BusinessMessageAsset;
  /**
   * A call asset.
   */
  callAsset?: GoogleAdsSearchads360V23Common__CallAsset;
  /**
   * A callout asset.
   */
  calloutAsset?: GoogleAdsSearchads360V23Common__CalloutAsset;
  /**
   * Immutable. A call to action asset.
   */
  callToActionAsset?: GoogleAdsSearchads360V23Common__CallToActionAsset;
  /**
   * Output only. The timestamp when this asset was created. The timestamp is
   * in the customer's time zone and in "yyyy-MM-dd HH:mm:ss" format.
   */
  readonly creationTime?: string;
  /**
   * Immutable. A Demand Gen carousel card asset.
   */
  demandGenCarouselCardAsset?: GoogleAdsSearchads360V23Common__DemandGenCarouselCardAsset;
  /**
   * A dynamic custom asset.
   */
  dynamicCustomAsset?: GoogleAdsSearchads360V23Common__DynamicCustomAsset;
  /**
   * A dynamic education asset.
   */
  dynamicEducationAsset?: GoogleAdsSearchads360V23Common__DynamicEducationAsset;
  /**
   * A dynamic flights asset.
   */
  dynamicFlightsAsset?: GoogleAdsSearchads360V23Common__DynamicFlightsAsset;
  /**
   * A dynamic hotels and rentals asset.
   */
  dynamicHotelsAndRentalsAsset?: GoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset;
  /**
   * A dynamic jobs asset.
   */
  dynamicJobsAsset?: GoogleAdsSearchads360V23Common__DynamicJobsAsset;
  /**
   * A dynamic local asset.
   */
  dynamicLocalAsset?: GoogleAdsSearchads360V23Common__DynamicLocalAsset;
  /**
   * A dynamic real estate asset.
   */
  dynamicRealEstateAsset?: GoogleAdsSearchads360V23Common__DynamicRealEstateAsset;
  /**
   * A dynamic travel asset.
   */
  dynamicTravelAsset?: GoogleAdsSearchads360V23Common__DynamicTravelAsset;
  /**
   * Output only. The Engine Status for an asset.
   */
  readonly engineStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "SERVING" | "SERVING_LIMITED" | "DISAPPROVED" | "DISABLED" | "REMOVED";
  /**
   * Output only. Policy information for the asset for each FieldType.
   */
  readonly fieldTypePolicySummaries?: GoogleAdsSearchads360V23Resources__AssetFieldTypePolicySummary[];
  /**
   * A list of possible final mobile URLs after all cross domain redirects.
   */
  finalMobileUrls?: string[];
  /**
   * A list of possible final URLs after all cross domain redirects.
   */
  finalUrls?: string[];
  /**
   * URL template for appending params to landing page URLs served with
   * parallel tracking.
   */
  finalUrlSuffix?: string;
  /**
   * A hotel callout asset.
   */
  hotelCalloutAsset?: GoogleAdsSearchads360V23Common__HotelCalloutAsset;
  /**
   * Immutable. A hotel property asset.
   */
  hotelPropertyAsset?: GoogleAdsSearchads360V23Common__HotelPropertyAsset;
  /**
   * Output only. The ID of the asset.
   */
  readonly id?: bigint;
  /**
   * Output only. An image asset.
   */
  readonly imageAsset?: GoogleAdsSearchads360V23Common__ImageAsset;
  /**
   * Output only. The datetime when this asset was last modified. The datetime
   * is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss" format.
   */
  readonly lastModifiedTime?: string;
  /**
   * A lead form asset.
   */
  leadFormAsset?: GoogleAdsSearchads360V23Common__LeadFormAsset;
  /**
   * Output only. A location asset.
   */
  readonly locationAsset?: GoogleAdsSearchads360V23Common__LocationAsset;
  /**
   * Immutable. A media bundle asset.
   */
  mediaBundleAsset?: GoogleAdsSearchads360V23Common__MediaBundleAsset;
  /**
   * A mobile app asset.
   */
  mobileAppAsset?: GoogleAdsSearchads360V23Common__MobileAppAsset;
  /**
   * Optional name of the asset.
   */
  name?: string;
  /**
   * Output only. Orientation of the asset. This is only supported for image
   * and video assets.
   */
  readonly orientation?:  | "UNSPECIFIED" | "UNKNOWN" | "LANDSCAPE" | "PORTRAIT" | "SQUARE";
  /**
   * A page feed asset.
   */
  pageFeedAsset?: GoogleAdsSearchads360V23Common__PageFeedAsset;
  /**
   * Output only. Policy information for the asset.
   */
  readonly policySummary?: GoogleAdsSearchads360V23Resources__AssetPolicySummary;
  /**
   * A price asset.
   */
  priceAsset?: GoogleAdsSearchads360V23Common__PriceAsset;
  /**
   * A promotion asset.
   */
  promotionAsset?: GoogleAdsSearchads360V23Common__PromotionAsset;
  /**
   * Immutable. The resource name of the asset. Asset resource names have the
   * form: `customers/{customer_id}/assets/{asset_id}`
   */
  resourceName?: string;
  /**
   * Output only. A unified call asset.
   */
  readonly searchAds360CallAsset?: GoogleAdsSearchads360V23Common__UnifiedCallAsset;
  /**
   * Output only. A unified callout asset.
   */
  readonly searchAds360CalloutAsset?: GoogleAdsSearchads360V23Common__UnifiedCalloutAsset;
  /**
   * Output only. A unified location asset.
   */
  readonly searchAds360LocationAsset?: GoogleAdsSearchads360V23Common__UnifiedLocationAsset;
  /**
   * Output only. A unified page feed asset.
   */
  readonly searchAds360PageFeedAsset?: GoogleAdsSearchads360V23Common__UnifiedPageFeedAsset;
  /**
   * Output only. A unified sitelink asset.
   */
  readonly searchAds360SitelinkAsset?: GoogleAdsSearchads360V23Common__UnifiedSitelinkAsset;
  /**
   * A sitelink asset.
   */
  sitelinkAsset?: GoogleAdsSearchads360V23Common__SitelinkAsset;
  /**
   * Output only. Source of the asset.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * Output only. The status of the asset.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "ARCHIVED" | "PENDING_SYSTEM_GENERATED";
  /**
   * A structured snippet asset.
   */
  structuredSnippetAsset?: GoogleAdsSearchads360V23Common__StructuredSnippetAsset;
  /**
   * Immutable. A text asset.
   */
  textAsset?: GoogleAdsSearchads360V23Common__TextAsset;
  /**
   * URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Output only. Type of the asset.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "YOUTUBE_VIDEO" | "MEDIA_BUNDLE" | "IMAGE" | "TEXT" | "LEAD_FORM" | "BOOK_ON_GOOGLE" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "CALL_TO_ACTION" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "APP_DEEP_LINK";
  /**
   * A list of mappings to be used for substituting URL custom parameter tags
   * in the tracking_url_template, final_urls, and/or final_mobile_urls.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
  /**
   * Immutable. A YouTube video asset.
   */
  youtubeVideoAsset?: GoogleAdsSearchads360V23Common__YoutubeVideoAsset;
}

function serializeGoogleAdsSearchads360V23Resources__Asset(data: any): GoogleAdsSearchads360V23Resources__Asset {
  return {
    ...data,
    businessMessageAsset: data["businessMessageAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__BusinessMessageAsset(data["businessMessageAsset"]) : undefined,
    dynamicCustomAsset: data["dynamicCustomAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicCustomAsset(data["dynamicCustomAsset"]) : undefined,
    dynamicEducationAsset: data["dynamicEducationAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicEducationAsset(data["dynamicEducationAsset"]) : undefined,
    dynamicFlightsAsset: data["dynamicFlightsAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicFlightsAsset(data["dynamicFlightsAsset"]) : undefined,
    dynamicHotelsAndRentalsAsset: data["dynamicHotelsAndRentalsAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset(data["dynamicHotelsAndRentalsAsset"]) : undefined,
    dynamicJobsAsset: data["dynamicJobsAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicJobsAsset(data["dynamicJobsAsset"]) : undefined,
    dynamicLocalAsset: data["dynamicLocalAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicLocalAsset(data["dynamicLocalAsset"]) : undefined,
    dynamicRealEstateAsset: data["dynamicRealEstateAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicRealEstateAsset(data["dynamicRealEstateAsset"]) : undefined,
    dynamicTravelAsset: data["dynamicTravelAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__DynamicTravelAsset(data["dynamicTravelAsset"]) : undefined,
    leadFormAsset: data["leadFormAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LeadFormAsset(data["leadFormAsset"]) : undefined,
    mediaBundleAsset: data["mediaBundleAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__MediaBundleAsset(data["mediaBundleAsset"]) : undefined,
    priceAsset: data["priceAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__PriceAsset(data["priceAsset"]) : undefined,
    promotionAsset: data["promotionAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Common__PromotionAsset(data["promotionAsset"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__Asset(data: any): GoogleAdsSearchads360V23Resources__Asset {
  return {
    ...data,
    businessMessageAsset: data["businessMessageAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__BusinessMessageAsset(data["businessMessageAsset"]) : undefined,
    dynamicCustomAsset: data["dynamicCustomAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicCustomAsset(data["dynamicCustomAsset"]) : undefined,
    dynamicEducationAsset: data["dynamicEducationAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicEducationAsset(data["dynamicEducationAsset"]) : undefined,
    dynamicFlightsAsset: data["dynamicFlightsAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicFlightsAsset(data["dynamicFlightsAsset"]) : undefined,
    dynamicHotelsAndRentalsAsset: data["dynamicHotelsAndRentalsAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicHotelsAndRentalsAsset(data["dynamicHotelsAndRentalsAsset"]) : undefined,
    dynamicJobsAsset: data["dynamicJobsAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicJobsAsset(data["dynamicJobsAsset"]) : undefined,
    dynamicLocalAsset: data["dynamicLocalAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicLocalAsset(data["dynamicLocalAsset"]) : undefined,
    dynamicRealEstateAsset: data["dynamicRealEstateAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicRealEstateAsset(data["dynamicRealEstateAsset"]) : undefined,
    dynamicTravelAsset: data["dynamicTravelAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__DynamicTravelAsset(data["dynamicTravelAsset"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    imageAsset: data["imageAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ImageAsset(data["imageAsset"]) : undefined,
    leadFormAsset: data["leadFormAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LeadFormAsset(data["leadFormAsset"]) : undefined,
    locationAsset: data["locationAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LocationAsset(data["locationAsset"]) : undefined,
    mediaBundleAsset: data["mediaBundleAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__MediaBundleAsset(data["mediaBundleAsset"]) : undefined,
    priceAsset: data["priceAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__PriceAsset(data["priceAsset"]) : undefined,
    promotionAsset: data["promotionAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__PromotionAsset(data["promotionAsset"]) : undefined,
    searchAds360LocationAsset: data["searchAds360LocationAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UnifiedLocationAsset(data["searchAds360LocationAsset"]) : undefined,
    searchAds360SitelinkAsset: data["searchAds360SitelinkAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UnifiedSitelinkAsset(data["searchAds360SitelinkAsset"]) : undefined,
  };
}

/**
 * Information about the asset coverage of an asset group.
 */
export interface GoogleAdsSearchads360V23Resources__AssetCoverage {
  /**
   * Output only. A list of action items to improve the ad strength of an asset
   * group.
   */
  readonly adStrengthActionItems?: GoogleAdsSearchads360V23Resources__AdStrengthActionItem[];
}

/**
 * Contains policy information for an asset under AssetFieldType context.
 */
export interface GoogleAdsSearchads360V23Resources__AssetFieldTypePolicySummary {
  /**
   * Output only. FieldType of this asset.
   */
  readonly assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Source of this asset.
   */
  readonly assetSource?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * Output only. Policy summary.
   */
  readonly policySummaryInfo?: GoogleAdsSearchads360V23Resources__AssetPolicySummary;
}

/**
 * An asset field type view. This view reports non-overcounted metrics for each
 * asset field type when the asset is used as extension.
 */
export interface GoogleAdsSearchads360V23Resources__AssetFieldTypeView {
  /**
   * Output only. The asset field type of the asset field type view.
   */
  readonly fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. The resource name of the asset field type view. Asset field
   * type view resource names have the form:
   * `customers/{customer_id}/assetFieldTypeViews/{field_type}`
   */
  readonly resourceName?: string;
}

/**
 * An asset group. AssetGroupAsset is used to link an asset to the asset group.
 * AssetGroupSignal is used to associate a signal to an asset group.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroup {
  /**
   * Output only. Overall ad strength of this asset group.
   */
  readonly adStrength?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "NO_ADS" | "POOR" | "AVERAGE" | "GOOD" | "EXCELLENT";
  /**
   * Output only. The asset coverage of this asset group.
   */
  readonly assetCoverage?: GoogleAdsSearchads360V23Resources__AssetCoverage;
  /**
   * Immutable. The campaign with which this asset group is associated. The
   * asset which is linked to the asset group.
   */
  campaign?: string;
  /**
   * A list of final mobile URLs after all cross domain redirects. In
   * performance max, by default, the urls are eligible for expansion unless
   * opted out.
   */
  finalMobileUrls?: string[];
  /**
   * A list of final URLs after all cross domain redirects. In performance max,
   * by default, the urls are eligible for expansion unless opted out.
   */
  finalUrls?: string[];
  /**
   * Output only. The ID of the asset group.
   */
  readonly id?: bigint;
  /**
   * Required. Name of the asset group. Required. It must have a minimum length
   * of 1 and maximum length of 128. It must be unique under a campaign.
   */
  name?: string;
  /**
   * First part of text that may appear appended to the url displayed in the
   * ad.
   */
  path1?: string;
  /**
   * Second part of text that may appear appended to the url displayed in the
   * ad. This field can only be set when path1 is set.
   */
  path2?: string;
  /**
   * Output only. The primary status of the asset group. Provides insights into
   * why an asset group is not serving or not serving optimally.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "NOT_ELIGIBLE" | "LIMITED" | "PENDING";
  /**
   * Output only. Provides reasons into why an asset group is not serving or
   * not serving optimally. It will be empty when the asset group is serving
   * without issues.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_GROUP_PAUSED" | "ASSET_GROUP_REMOVED" | "CAMPAIGN_REMOVED" | "CAMPAIGN_PAUSED" | "CAMPAIGN_PENDING" | "CAMPAIGN_ENDED" | "ASSET_GROUP_LIMITED" | "ASSET_GROUP_DISAPPROVED" | "ASSET_GROUP_UNDER_REVIEW"[];
  /**
   * Immutable. The resource name of the asset group. Asset group resource
   * names have the form: `customers/{customer_id}/assetGroups/{asset_group_id}`
   */
  resourceName?: string;
  /**
   * The status of the asset group.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
}

/**
 * AssetGroupAsset is the link between an asset and an asset group. Adding an
 * AssetGroupAsset links an asset with an asset group.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupAsset {
  /**
   * Immutable. The asset which this asset group asset is linking.
   */
  asset?: string;
  /**
   * Immutable. The asset group which this asset group asset is linking.
   */
  assetGroup?: string;
  /**
   * The description of the placement of the asset within the asset group. For
   * example: HEADLINE, YOUTUBE_VIDEO etc
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. The policy information for this asset group asset.
   */
  readonly policySummary?: GoogleAdsSearchads360V23Common__PolicySummary;
  /**
   * Output only. Provides the PrimaryStatus of this asset link. Primary status
   * is meant essentially to differentiate between the plain "status" field,
   * which has advertiser set values of enabled, paused, or removed. The primary
   * status takes into account other signals (for assets its mainly policy and
   * quality approvals) to come up with a more comprehensive status to indicate
   * its serving state.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
  /**
   * Output only. Provides the details of the primary status and its associated
   * reasons.
   */
  readonly primaryStatusDetails?: GoogleAdsSearchads360V23Common__AssetLinkPrimaryStatusDetails[];
  /**
   * Output only. Provides a list of reasons for why an asset is not serving or
   * not serving at full capacity.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_LINK_PAUSED" | "ASSET_LINK_REMOVED" | "ASSET_DISAPPROVED" | "ASSET_UNDER_REVIEW" | "ASSET_APPROVED_LABELED"[];
  /**
   * Immutable. The resource name of the asset group asset. Asset group asset
   * resource name have the form:
   * `customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}`
   */
  resourceName?: string;
  /**
   * Output only. Source of the asset group asset.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * The status of the link between an asset and asset group.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * Asset group asset combination data
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupAssetCombinationData {
  /**
   * Output only. Served assets.
   */
  readonly assetCombinationServedAssets?: GoogleAdsSearchads360V23Common__AssetUsage[];
}

/**
 * AssetGroupListingGroupFilter represents a listing group filter tree node in
 * an asset group.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter {
  /**
   * Immutable. The asset group which this asset group listing group filter is
   * part of.
   */
  assetGroup?: string;
  /**
   * Dimension value with which this listing group is refining its parent.
   * Undefined for the root group.
   */
  caseValue?: GoogleAdsSearchads360V23Resources__ListingGroupFilterDimension;
  /**
   * Output only. The ID of the ListingGroupFilter.
   */
  readonly id?: bigint;
  /**
   * Immutable. The source of listings filtered by this listing group filter.
   */
  listingSource?:  | "UNSPECIFIED" | "UNKNOWN" | "SHOPPING" | "WEBPAGE";
  /**
   * Immutable. Resource name of the parent listing group subdivision. Null for
   * the root listing group filter node.
   */
  parentListingGroupFilter?: string;
  /**
   * Output only. The path of dimensions defining this listing group filter.
   */
  readonly path?: GoogleAdsSearchads360V23Resources__ListingGroupFilterDimensionPath;
  /**
   * Immutable. The resource name of the asset group listing group filter.
   * Asset group listing group filter resource name have the form:
   * `customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}`
   */
  resourceName?: string;
  /**
   * Immutable. Type of a listing group filter node.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "SUBDIVISION" | "UNIT_INCLUDED" | "UNIT_EXCLUDED";
}

function serializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data: any): GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter {
  return {
    ...data,
    caseValue: data["caseValue"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ListingGroupFilterDimension(data["caseValue"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data: any): GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter {
  return {
    ...data,
    caseValue: data["caseValue"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ListingGroupFilterDimension(data["caseValue"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * An asset group product group view.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupProductGroupView {
  /**
   * Output only. The asset group associated with the listing group filter.
   */
  readonly assetGroup?: string;
  /**
   * Output only. The resource name of the asset group listing group filter.
   */
  readonly assetGroupListingGroupFilter?: string;
  /**
   * Output only. The resource name of the asset group product group view.
   * Asset group product group view resource names have the form:
   * `customers/{customer_id}/assetGroupProductGroupViews/{asset_group_id}~{listing_group_filter_id}`
   */
  readonly resourceName?: string;
}

/**
 * AssetGroupSignal represents a signal in an asset group. The existence of a
 * signal tells the performance max campaign who's most likely to convert.
 * Performance Max uses the signal to look for new people with similar or
 * stronger intent to find conversions across Search, Display, Video, and more.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupSignal {
  /**
   * Output only. Approval status is the output value for search theme signal
   * after Google ads policy review. When using Audience signal, this field is
   * not used and will be absent.
   */
  readonly approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "APPROVED" | "LIMITED" | "DISAPPROVED" | "UNDER_REVIEW";
  /**
   * Immutable. The asset group which this asset group signal belongs to.
   */
  assetGroup?: string;
  /**
   * Immutable. The audience signal to be used by the performance max campaign.
   */
  audience?: GoogleAdsSearchads360V23Common__AudienceInfo;
  /**
   * Output only. Computed for SearchTheme signals. When using Audience signal,
   * this field is not used and will be absent.
   */
  readonly disapprovalReasons?: string[];
  /**
   * Immutable. The resource name of the asset group signal. Asset group signal
   * resource name have the form:
   * `customers/{customer_id}/assetGroupSignals/{asset_group_id}~{signal_id}`
   */
  resourceName?: string;
  /**
   * Immutable. The search_theme signal to be used by the performance max
   * campaign. Mutate errors of search_theme criterion includes
   * AssetGroupSignalError.UNSPECIFIED AssetGroupSignalError.UNKNOWN
   * AssetGroupSignalError.TOO_MANY_WORDS
   * AssetGroupSignalError.SEARCH_THEME_POLICY_VIOLATION FieldError.REQUIRED
   * StringFormatError.ILLEGAL_CHARS StringLengthError.TOO_LONG
   * ResourceCountLimitExceededError.RESOURCE_LIMIT
   */
  searchTheme?: GoogleAdsSearchads360V23Common__SearchThemeInfo;
}

/**
 * A view on the usage of asset group asset top combinations.
 */
export interface GoogleAdsSearchads360V23Resources__AssetGroupTopCombinationView {
  /**
   * Output only. The top combinations of assets that served together.
   */
  readonly assetGroupTopCombinations?: GoogleAdsSearchads360V23Resources__AssetGroupAssetCombinationData[];
  /**
   * Output only. The resource name of the asset group top combination view.
   * AssetGroup Top Combination view resource names have the form:
   * `"customers/{customer_id}/assetGroupTopCombinationViews/{asset_group_id}~{asset_combination_category}"
   */
  readonly resourceName?: string;
}

/**
 * Contains policy information for an asset.
 */
export interface GoogleAdsSearchads360V23Resources__AssetPolicySummary {
  /**
   * Output only. The overall approval status of this asset, calculated based
   * on the status of its individual policy topic entries.
   */
  readonly approvalStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "DISAPPROVED" | "APPROVED_LIMITED" | "APPROVED" | "AREA_OF_INTEREST_ONLY";
  /**
   * Output only. The list of policy findings for this asset.
   */
  readonly policyTopicEntries?: GoogleAdsSearchads360V23Common__PolicyTopicEntry[];
  /**
   * Output only. Where in the review process this asset is.
   */
  readonly reviewStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REVIEW_IN_PROGRESS" | "REVIEWED" | "UNDER_APPEAL" | "ELIGIBLE_MAY_SERVE";
}

/**
 * An asset set representing a collection of assets. Use AssetSetAsset to link
 * an asset to the asset set.
 */
export interface GoogleAdsSearchads360V23Resources__AssetSet {
  /**
   * Business Profile location group asset set data.
   */
  businessProfileLocationGroup?: GoogleAdsSearchads360V23Common__BusinessProfileLocationGroup;
  /**
   * Represents information about a Chain dynamic location group. Only
   * applicable if the sync level AssetSet's type is LOCATION_SYNC and sync
   * source is chain.
   */
  chainLocationGroup?: GoogleAdsSearchads360V23Common__ChainLocationGroup;
  /**
   * Output only. For Performance Max for travel goals campaigns with a Hotel
   * Center account link. Read-only.
   */
  readonly hotelPropertyData?: GoogleAdsSearchads360V23Resources_AssetSet_HotelPropertyData;
  /**
   * Output only. The ID of the asset set.
   */
  readonly id?: bigint;
  /**
   * Immutable. Parent asset set ID for the asset set where the elements of
   * this asset set come from. For example: the sync level location AssetSet id
   * where the elements in LocationGroup AssetSet come from. This field is
   * required and only applicable for Location Group typed AssetSet.
   */
  locationGroupParentAssetSetId?: bigint;
  /**
   * Location asset set data. This will be used for sync level location set.
   * This can only be set if AssetSet's type is LOCATION_SYNC.
   */
  locationSet?: GoogleAdsSearchads360V23Common__LocationSet;
  /**
   * Merchant ID and Feed Label from Google Merchant Center.
   */
  merchantCenterFeed?: GoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed;
  /**
   * Required. Name of the asset set. Required. It must have a minimum length
   * of 1 and maximum length of 128.
   */
  name?: string;
  /**
   * Immutable. The resource name of the asset set. Asset set resource names
   * have the form: `customers/{customer_id}/assetSets/{asset_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the asset set. Read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Required. Immutable. The type of the asset set. Required.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MERCHANT_CENTER_FEED" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION_SYNC" | "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP" | "CHAIN_DYNAMIC_LOCATION_GROUP" | "STATIC_LOCATION_GROUP" | "HOTEL_PROPERTY" | "TRAVEL_FEED";
}

function serializeGoogleAdsSearchads360V23Resources__AssetSet(data: any): GoogleAdsSearchads360V23Resources__AssetSet {
  return {
    ...data,
    businessProfileLocationGroup: data["businessProfileLocationGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__BusinessProfileLocationGroup(data["businessProfileLocationGroup"]) : undefined,
    chainLocationGroup: data["chainLocationGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ChainLocationGroup(data["chainLocationGroup"]) : undefined,
    locationGroupParentAssetSetId: data["locationGroupParentAssetSetId"] !== undefined ? String(data["locationGroupParentAssetSetId"]) : undefined,
    locationSet: data["locationSet"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LocationSet(data["locationSet"]) : undefined,
    merchantCenterFeed: data["merchantCenterFeed"] !== undefined ? serializeGoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed(data["merchantCenterFeed"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__AssetSet(data: any): GoogleAdsSearchads360V23Resources__AssetSet {
  return {
    ...data,
    businessProfileLocationGroup: data["businessProfileLocationGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__BusinessProfileLocationGroup(data["businessProfileLocationGroup"]) : undefined,
    chainLocationGroup: data["chainLocationGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ChainLocationGroup(data["chainLocationGroup"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    locationGroupParentAssetSetId: data["locationGroupParentAssetSetId"] !== undefined ? BigInt(data["locationGroupParentAssetSetId"]) : undefined,
    locationSet: data["locationSet"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LocationSet(data["locationSet"]) : undefined,
    merchantCenterFeed: data["merchantCenterFeed"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed(data["merchantCenterFeed"]) : undefined,
  };
}

/**
 * AssetSetAsset is the link between an asset and an asset set. Adding an
 * AssetSetAsset links an asset with an asset set.
 */
export interface GoogleAdsSearchads360V23Resources__AssetSetAsset {
  /**
   * Immutable. The asset which this asset set asset is linking to.
   */
  asset?: string;
  /**
   * Immutable. The asset set which this asset set asset is linking to.
   */
  assetSet?: string;
  /**
   * Immutable. The resource name of the asset set asset. Asset set asset
   * resource names have the form:
   * `customers/{customer_id}/assetSetAssets/{asset_set_id}~{asset_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the asset set asset. Read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * An asset set type view. This view reports non-overcounted metrics for each
 * asset set type. Child asset set types are not included in this report. Their
 * stats are aggregated under the parent asset set type.
 */
export interface GoogleAdsSearchads360V23Resources__AssetSetTypeView {
  /**
   * Output only. The asset set type of the asset set type view.
   */
  readonly assetSetType?:  | "UNSPECIFIED" | "UNKNOWN" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MERCHANT_CENTER_FEED" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION_SYNC" | "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP" | "CHAIN_DYNAMIC_LOCATION_GROUP" | "STATIC_LOCATION_GROUP" | "HOTEL_PROPERTY" | "TRAVEL_FEED";
  /**
   * Output only. The resource name of the asset set type view. Asset set type
   * view resource names have the form:
   * `customers/{customer_id}/assetSetTypeViews/{asset_set_type}`
   */
  readonly resourceName?: string;
}

/**
 * Audience is an effective targeting option that lets you intersect different
 * segment attributes, such as detailed demographics and affinities, to create
 * audiences that represent sections of your target segments.
 */
export interface GoogleAdsSearchads360V23Resources__Audience {
  /**
   * Immutable. The asset group that this audience is scoped under. Must be set
   * if and only if scope is ASSET_GROUP. Immutable after creation. If an
   * audience with ASSET_GROUP scope is upgraded to CUSTOMER scope, this field
   * will automatically be cleared.
   */
  assetGroup?: string;
  /**
   * Description of this audience.
   */
  description?: string;
  /**
   * Positive dimensions specifying the audience composition.
   */
  dimensions?: GoogleAdsSearchads360V23Common__AudienceDimension[];
  /**
   * Negative dimension specifying the audience composition.
   */
  exclusionDimension?: GoogleAdsSearchads360V23Common__AudienceExclusionDimension;
  /**
   * Output only. ID of the audience.
   */
  readonly id?: bigint;
  /**
   * Name of the audience. It should be unique across all audiences within the
   * account. It must have a minimum length of 1 and maximum length of 255.
   * Required when scope is not set or is set to CUSTOMER. Cannot be set or
   * updated when scope is ASSET_GROUP.
   */
  name?: string;
  /**
   * Immutable. The resource name of the audience. Audience names have the
   * form: `customers/{customer_id}/audiences/{audience_id}`
   */
  resourceName?: string;
  /**
   * Defines the scope this audience can be used in. By default, the scope is
   * CUSTOMER. Audiences can be created with a scope of ASSET_GROUP for
   * exclusive use by a single asset_group. Scope may change from ASSET_GROUP to
   * CUSTOMER but not from CUSTOMER to ASSET_GROUP.
   */
  scope?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "ASSET_GROUP";
  /**
   * Output only. Status of this audience. Indicates whether the audience is
   * enabled or removed.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * specific to local services background check.
 */
export interface GoogleAdsSearchads360V23Resources__BackgroundCheckVerificationArtifact {
  /**
   * Output only. URL to access background case.
   */
  readonly caseUrl?: string;
  /**
   * Output only. The timestamp when this background check case result was
   * adjudicated. The format is "YYYY-MM-DD HH:MM:SS" in the Google Ads
   * account's timezone. Examples: "2018-03-05 09:15:00" or "2018-02-01
   * 14:34:30"
   */
  readonly finalAdjudicationDateTime?: string;
}

/**
 * A list of mutates being processed asynchronously. The mutates are uploaded
 * by the user. The mutates themselves aren't readable and the results of the
 * job can only be read using BatchJobService.ListBatchJobResults.
 */
export interface GoogleAdsSearchads360V23Resources__BatchJob {
  /**
   * Output only. ID of this batch job.
   */
  readonly id?: bigint;
  /**
   * Output only. The resource name of the long-running operation that can be
   * used to poll for completion. Only set when the batch job status is RUNNING
   * or DONE.
   */
  readonly longRunningOperation?: string;
  /**
   * Output only. Contains additional information about this batch job.
   */
  readonly metadata?: GoogleAdsSearchads360V23Resources_BatchJob_BatchJobMetadata;
  /**
   * Output only. The next sequence token to use when adding operations. Only
   * set when the batch job status is PENDING.
   */
  readonly nextAddSequenceToken?: string;
  /**
   * Immutable. The resource name of the batch job. Batch job resource names
   * have the form: `customers/{customer_id}/batchJobs/{batch_job_id}`
   */
  resourceName?: string;
  /**
   * Output only. Status of this batch job.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "RUNNING" | "DONE";
}

/**
 * Represents a bidding data exclusion. Bidding data exclusions can be set in
 * client accounts only, and cannot be used in manager accounts. See "About data
 * exclusions" at https://support.google.com/google-ads/answer/10370710. Note: A
 * customer account can have a maximum of 500 active bidding data exclusions.
 */
export interface GoogleAdsSearchads360V23Resources__BiddingDataExclusion {
  /**
   * The data_exclusion will apply to all the campaigns under the listed
   * channels retroactively as well as going forward when the scope of this
   * exclusion is CHANNEL. The supported advertising channel types are DISPLAY,
   * SEARCH and SHOPPING. Note: a data exclusion with both
   * advertising_channel_types and campaign_ids is not supported.
   */
  advertisingChannelTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "SHOPPING" | "HOTEL" | "VIDEO" | "MULTI_CHANNEL" | "LOCAL" | "SMART" | "PERFORMANCE_MAX" | "LOCAL_SERVICES" | "TRAVEL" | "DEMAND_GEN" | "SOCIAL"[];
  /**
   * The data exclusion will apply to the campaigns listed when the scope of
   * this exclusion is CAMPAIGN. The maximum number of campaigns per event is
   * 2000. Note: a data exclusion with both advertising_channel_types and
   * campaign_ids is not supported.
   */
  campaigns?: string[];
  /**
   * Output only. The ID of the data exclusion.
   */
  readonly dataExclusionId?: bigint;
  /**
   * The description of the data exclusion. The description can be at most 2048
   * characters.
   */
  description?: string;
  /**
   * If not specified, all devices will be included in this exclusion.
   * Otherwise, only the specified targeted devices will be included in this
   * exclusion.
   */
  devices?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER"[];
  /**
   * Required. The exclusive end time of the data exclusion in yyyy-MM-dd
   * HH:mm:ss format. The length of [start_date_time, end_date_time) interval
   * must be within (0, 14 days].
   */
  endDateTime?: string;
  /**
   * The name of the data exclusion. The name can be at most 255 characters.
   */
  name?: string;
  /**
   * Immutable. The resource name of the data exclusion. Data exclusion
   * resource names have the form:
   * `customers/{customer_id}/biddingDataExclusions/{data_exclusion_id}`
   */
  resourceName?: string;
  /**
   * The scope of the data exclusion.
   */
  scope?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN" | "CHANNEL";
  /**
   * Required. The inclusive start time of the data exclusion in yyyy-MM-dd
   * HH:mm:ss format. A data exclusion is backward looking and should be used
   * for events that start in the past and end either in the past or future.
   */
  startDateTime?: string;
  /**
   * Output only. The status of the data exclusion.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * Represents a bidding seasonality adjustment. Cannot be used in manager
 * accounts. See "About seasonality adjustments" at
 * https://support.google.com/google-ads/answer/10369906.
 */
export interface GoogleAdsSearchads360V23Resources__BiddingSeasonalityAdjustment {
  /**
   * The seasonality adjustment will apply to all the campaigns under the
   * listed channels retroactively as well as going forward when the scope of
   * this adjustment is CHANNEL. The supported advertising channel types are
   * DISPLAY, SEARCH and SHOPPING. Note: a seasonality adjustment with both
   * advertising_channel_types and campaign_ids is not supported.
   */
  advertisingChannelTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "SHOPPING" | "HOTEL" | "VIDEO" | "MULTI_CHANNEL" | "LOCAL" | "SMART" | "PERFORMANCE_MAX" | "LOCAL_SERVICES" | "TRAVEL" | "DEMAND_GEN" | "SOCIAL"[];
  /**
   * The seasonality adjustment will apply to the campaigns listed when the
   * scope of this adjustment is CAMPAIGN. The maximum number of campaigns per
   * event is 2000. Note: a seasonality adjustment with both
   * advertising_channel_types and campaign_ids is not supported.
   */
  campaigns?: string[];
  /**
   * Conversion rate modifier estimated based on expected conversion rate
   * changes. When this field is unset or set to 1.0 no adjustment will be
   * applied to traffic. The allowed range is 0.1 to 10.0.
   */
  conversionRateModifier?: number;
  /**
   * The description of the seasonality adjustment. The description can be at
   * most 2048 characters.
   */
  description?: string;
  /**
   * If not specified, all devices will be included in this adjustment.
   * Otherwise, only the specified targeted devices will be included in this
   * adjustment.
   */
  devices?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET" | "DESKTOP" | "CONNECTED_TV" | "OTHER"[];
  /**
   * Required. The exclusive end time of the seasonality adjustment in
   * yyyy-MM-dd HH:mm:ss format. The length of [start_date_time, end_date_time)
   * interval must be within (0, 14 days].
   */
  endDateTime?: string;
  /**
   * The name of the seasonality adjustment. The name can be at most 255
   * characters.
   */
  name?: string;
  /**
   * Immutable. The resource name of the seasonality adjustment. Seasonality
   * adjustment resource names have the form:
   * `customers/{customer_id}/biddingSeasonalityAdjustments/{seasonality_adjustment_id}`
   */
  resourceName?: string;
  /**
   * The scope of the seasonality adjustment.
   */
  scope?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN" | "CHANNEL";
  /**
   * Output only. The ID of the seasonality adjustment.
   */
  readonly seasonalityAdjustmentId?: bigint;
  /**
   * Required. The inclusive start time of the seasonality adjustment in
   * yyyy-MM-dd HH:mm:ss format. A seasonality adjustment is forward looking and
   * should be used for events that start and end in the future.
   */
  startDateTime?: string;
  /**
   * Output only. The status of the seasonality adjustment.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * A bidding strategy.
 */
export interface GoogleAdsSearchads360V23Resources__BiddingStrategy {
  /**
   * ID of the campaign budget that this portfolio bidding strategy is aligned
   * with. When a portfolio and a campaign budget are aligned, that means that
   * they are attached to the same set of campaigns. After a bidding strategy is
   * aligned with a campaign budget, campaigns that are added to the bidding
   * strategy must also use the aligned campaign budget.
   */
  alignedCampaignBudgetId?: bigint;
  /**
   * Output only. The number of campaigns attached to this bidding strategy.
   * This field is read-only.
   */
  readonly campaignCount?: bigint;
  /**
   * Immutable. The currency used by the bidding strategy (ISO 4217
   * three-letter code). For bidding strategies in manager customers, this
   * currency can be set on creation and defaults to the manager customer's
   * currency. For serving customers, this field cannot be set; all strategies
   * in a serving customer implicitly use the serving customer's currency. In
   * all cases the effective_currency_code field returns the currency used by
   * the strategy.
   */
  currencyCode?: string;
  /**
   * Output only. The currency used by the bidding strategy (ISO 4217
   * three-letter code). For bidding strategies in manager customers, this is
   * the currency set by the advertiser when creating the strategy. For serving
   * customers, this is the customer's currency_code. Bidding strategy metrics
   * are reported in this currency. This field is read-only.
   */
  readonly effectiveCurrencyCode?: string;
  /**
   * A bidding strategy that raises bids for clicks that seem more likely to
   * lead to a conversion and lowers them for clicks where they seem less
   * likely.
   */
  enhancedCpc?: GoogleAdsSearchads360V23Common__EnhancedCpc;
  /**
   * Output only. The ID of the bidding strategy.
   */
  readonly id?: bigint;
  /**
   * An automated bidding strategy to help get the most conversions for your
   * campaigns while spending your budget.
   */
  maximizeConversions?: GoogleAdsSearchads360V23Common__MaximizeConversions;
  /**
   * An automated bidding strategy to help get the most conversion value for
   * your campaigns while spending your budget.
   */
  maximizeConversionValue?: GoogleAdsSearchads360V23Common__MaximizeConversionValue;
  /**
   * The name of the bidding strategy. All bidding strategies within an account
   * must be named distinctly. The length of this string should be between 1 and
   * 255, inclusive, in UTF-8 bytes, (trimmed).
   */
  name?: string;
  /**
   * Output only. The number of non-removed campaigns attached to this bidding
   * strategy. This field is read-only.
   */
  readonly nonRemovedCampaignCount?: bigint;
  /**
   * Immutable. The resource name of the bidding strategy. Bidding strategy
   * resource names have the form:
   * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the bidding strategy. This field is read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * A bidding strategy that sets bids to help get as many conversions as
   * possible at the target cost-per-acquisition (CPA) you set.
   */
  targetCpa?: GoogleAdsSearchads360V23Common__TargetCpa;
  /**
   * A bidding strategy that automatically optimizes towards a chosen
   * percentage of impressions.
   */
  targetImpressionShare?: GoogleAdsSearchads360V23Common__TargetImpressionShare;
  /**
   * A bidding strategy that helps you maximize revenue while averaging a
   * specific target Return On Ad Spend (ROAS).
   */
  targetRoas?: GoogleAdsSearchads360V23Common__TargetRoas;
  /**
   * A bid strategy that sets your bids to help get as many clicks as possible
   * within your budget.
   */
  targetSpend?: GoogleAdsSearchads360V23Common__TargetSpend;
  /**
   * Output only. The type of the bidding strategy. Create a bidding strategy
   * by setting the bidding scheme. This field is read-only.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "COMMISSION" | "ENHANCED_CPC" | "INVALID" | "MANUAL_CPA" | "MANUAL_CPC" | "MANUAL_CPM" | "MANUAL_CPV" | "MAXIMIZE_CONVERSIONS" | "MAXIMIZE_CONVERSION_VALUE" | "PAGE_ONE_PROMOTED" | "PERCENT_CPC" | "TARGET_CPA" | "TARGET_CPC" | "TARGET_CPM" | "TARGET_IMPRESSION_SHARE" | "TARGET_OUTRANK_SHARE" | "TARGET_ROAS" | "TARGET_SPEND";
}

function serializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data: any): GoogleAdsSearchads360V23Resources__BiddingStrategy {
  return {
    ...data,
    alignedCampaignBudgetId: data["alignedCampaignBudgetId"] !== undefined ? String(data["alignedCampaignBudgetId"]) : undefined,
    maximizeConversions: data["maximizeConversions"] !== undefined ? serializeGoogleAdsSearchads360V23Common__MaximizeConversions(data["maximizeConversions"]) : undefined,
    maximizeConversionValue: data["maximizeConversionValue"] !== undefined ? serializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data["maximizeConversionValue"]) : undefined,
    targetCpa: data["targetCpa"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetCpa(data["targetCpa"]) : undefined,
    targetImpressionShare: data["targetImpressionShare"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data["targetImpressionShare"]) : undefined,
    targetRoas: data["targetRoas"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetRoas(data["targetRoas"]) : undefined,
    targetSpend: data["targetSpend"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetSpend(data["targetSpend"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data: any): GoogleAdsSearchads360V23Resources__BiddingStrategy {
  return {
    ...data,
    alignedCampaignBudgetId: data["alignedCampaignBudgetId"] !== undefined ? BigInt(data["alignedCampaignBudgetId"]) : undefined,
    campaignCount: data["campaignCount"] !== undefined ? BigInt(data["campaignCount"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    maximizeConversions: data["maximizeConversions"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__MaximizeConversions(data["maximizeConversions"]) : undefined,
    maximizeConversionValue: data["maximizeConversionValue"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data["maximizeConversionValue"]) : undefined,
    nonRemovedCampaignCount: data["nonRemovedCampaignCount"] !== undefined ? BigInt(data["nonRemovedCampaignCount"]) : undefined,
    targetCpa: data["targetCpa"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetCpa(data["targetCpa"]) : undefined,
    targetImpressionShare: data["targetImpressionShare"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data["targetImpressionShare"]) : undefined,
    targetRoas: data["targetRoas"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetRoas(data["targetRoas"]) : undefined,
    targetSpend: data["targetSpend"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetSpend(data["targetSpend"]) : undefined,
  };
}

/**
 * A bidding strategy simulation. Supported combinations of simulation type and
 * simulation modification method are detailed below respectively. 1. TARGET_CPA
 * - UNIFORM 2. TARGET_ROAS - UNIFORM
 */
export interface GoogleAdsSearchads360V23Resources__BiddingStrategySimulation {
  /**
   * Output only. Bidding strategy shared set id of the simulation.
   */
  readonly biddingStrategyId?: bigint;
  /**
   * Output only. Last day on which the simulation is based, in YYYY-MM-DD
   * format
   */
  readonly endDate?: string;
  /**
   * Output only. How the simulation modifies the field.
   */
  readonly modificationMethod?:  | "UNSPECIFIED" | "UNKNOWN" | "UNIFORM" | "DEFAULT" | "SCALING";
  /**
   * Output only. The resource name of the bidding strategy simulation. Bidding
   * strategy simulation resource names have the form:
   * `customers/{customer_id}/biddingStrategySimulations/{bidding_strategy_id}~{type}~{modification_method}~{start_date}~{end_date}`
   */
  readonly resourceName?: string;
  /**
   * Output only. First day on which the simulation is based, in YYYY-MM-DD
   * format.
   */
  readonly startDate?: string;
  /**
   * Output only. Simulation points if the simulation type is TARGET_CPA.
   */
  readonly targetCpaPointList?: GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList;
  /**
   * Output only. Simulation points if the simulation type is TARGET_ROAS.
   */
  readonly targetRoasPointList?: GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList;
  /**
   * Output only. The field that the simulation modifies.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CPC_BID" | "CPV_BID" | "TARGET_CPA" | "BID_MODIFIER" | "TARGET_ROAS" | "PERCENT_CPC_BID" | "TARGET_IMPRESSION_SHARE" | "BUDGET";
}

/**
 * A billing setup, which associates a payments account and an advertiser. A
 * billing setup is specific to one advertiser.
 */
export interface GoogleAdsSearchads360V23Resources__BillingSetup {
  /**
   * Output only. The end date time in yyyy-MM-dd or yyyy-MM-dd HH:mm:ss
   * format.
   */
  readonly endDateTime?: string;
  /**
   * Output only. The end time as a type. The only possible value is FOREVER.
   */
  readonly endTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The ID of the billing setup.
   */
  readonly id?: bigint;
  /**
   * Immutable. The resource name of the payments account associated with this
   * billing setup. Payments resource names have the form:
   * `customers/{customer_id}/paymentsAccounts/{payments_account_id}` When
   * setting up billing, this is used to signup with an existing payments
   * account (and then payments_account_info should not be set). When getting a
   * billing setup, this and payments_account_info will be populated.
   */
  paymentsAccount?: string;
  /**
   * Immutable. The payments account information associated with this billing
   * setup. When setting up billing, this is used to signup with a new payments
   * account (and then payments_account should not be set). When getting a
   * billing setup, this and payments_account will be populated.
   */
  paymentsAccountInfo?: GoogleAdsSearchads360V23Resources_BillingSetup_PaymentsAccountInfo;
  /**
   * Immutable. The resource name of the billing setup. BillingSetup resource
   * names have the form:
   * `customers/{customer_id}/billingSetups/{billing_setup_id}`
   */
  resourceName?: string;
  /**
   * Immutable. The start date time in yyyy-MM-dd or yyyy-MM-dd HH:mm:ss
   * format. Only a future time is allowed.
   */
  startDateTime?: string;
  /**
   * Immutable. The start time as a type. Only NOW is allowed.
   */
  startTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The status of the billing setup.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "APPROVED_HELD" | "APPROVED" | "CANCELLED";
}

/**
 * specific to a local services business registration check.
 */
export interface GoogleAdsSearchads360V23Resources__BusinessRegistrationCheckVerificationArtifact {
  /**
   * Output only. The id of the check, such as vat_tax_id, representing "VAT
   * Tax ID" requirement.
   */
  readonly checkId?: string;
  /**
   * Output only. Message storing document info for the business.
   */
  readonly registrationDocument?: GoogleAdsSearchads360V23Resources__BusinessRegistrationDocument;
  /**
   * Output only. Message storing government issued number for the business.
   */
  readonly registrationNumber?: GoogleAdsSearchads360V23Resources__BusinessRegistrationNumber;
  /**
   * Output only. The type of business registration check (number, document).
   */
  readonly registrationType?:  | "UNSPECIFIED" | "UNKNOWN" | "NUMBER" | "DOCUMENT";
  /**
   * Output only. Registration document rejection reason.
   */
  readonly rejectionReason?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_NAME_MISMATCH" | "BUSINESS_DETAILS_MISMATCH" | "ID_NOT_FOUND" | "POOR_DOCUMENT_IMAGE_QUALITY" | "DOCUMENT_EXPIRED" | "DOCUMENT_INVALID" | "DOCUMENT_TYPE_MISMATCH" | "DOCUMENT_UNVERIFIABLE" | "OTHER";
}

/**
 * specific to a local services business registration document.
 */
export interface GoogleAdsSearchads360V23Resources__BusinessRegistrationDocument {
  /**
   * Output only. The readonly field containing the information for an uploaded
   * business registration document.
   */
  readonly documentReadonly?: GoogleAdsSearchads360V23Common__LocalServicesDocumentReadOnly;
}

/**
 * specific to a local services business registration number.
 */
export interface GoogleAdsSearchads360V23Resources__BusinessRegistrationNumber {
  /**
   * Output only. Government-issued number for the business.
   */
  readonly number?: string;
}

/**
 * Call reporting setting for a customer.
 */
export interface GoogleAdsSearchads360V23Resources__CallReportingSetting {
  /**
   * Customer-level call conversion action to attribute a call conversion to.
   * If not set a default conversion action is used. Only in effect when
   * call_conversion_reporting_enabled is set to true.
   */
  callConversionAction?: string;
  /**
   * Whether to enable call conversion reporting.
   */
  callConversionReportingEnabled?: boolean;
  /**
   * Enable reporting of phone call events by redirecting them through Google
   * System.
   */
  callReportingEnabled?: boolean;
}

/**
 * A call view that includes data for call tracking of call-only ads or call
 * extensions.
 */
export interface GoogleAdsSearchads360V23Resources__CallView {
  /**
   * Output only. The advertiser-provided call duration in seconds.
   */
  readonly callDurationSeconds?: bigint;
  /**
   * Output only. Area code of the caller. Null if the call duration is shorter
   * than 15 seconds.
   */
  readonly callerAreaCode?: string;
  /**
   * Output only. code of the caller.
   */
  readonly callerCountryCode?: string;
  /**
   * Output only. The status of the call.
   */
  readonly callStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "MISSED" | "RECEIVED";
  /**
   * Output only. The call tracking display location.
   */
  readonly callTrackingDisplayLocation?:  | "UNSPECIFIED" | "UNKNOWN" | "AD" | "LANDING_PAGE";
  /**
   * Output only. The advertiser-provided call end date time.
   */
  readonly endCallDateTime?: string;
  /**
   * Output only. The resource name of the call view. Call view resource names
   * have the form: `customers/{customer_id}/callViews/{call_detail_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The advertiser-provided call start date time.
   */
  readonly startCallDateTime?: string;
  /**
   * Output only. The type of the call.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "MANUALLY_DIALED" | "HIGH_END_MOBILE_SEARCH";
}

/**
 * A campaign.
 */
export interface GoogleAdsSearchads360V23Resources__Campaign {
  /**
   * Output only. Resource name of AccessibleBiddingStrategy, a read-only view
   * of the unrestricted attributes of the attached portfolio bidding strategy
   * identified by 'bidding_strategy'. Empty, if the campaign does not use a
   * portfolio strategy. Unrestricted strategy attributes are available to all
   * customers with whom the strategy is shared and are read from the
   * AccessibleBiddingStrategy resource. In contrast, restricted attributes are
   * only available to the owner customer of the strategy and their managers.
   * Restricted attributes can only be read from the BiddingStrategy resource.
   */
  readonly accessibleBiddingStrategy?: string;
  /**
   * The ad serving optimization status of the campaign.
   */
  adServingOptimizationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTIMIZE" | "CONVERSION_OPTIMIZE" | "ROTATE" | "ROTATE_INDEFINITELY" | "UNAVAILABLE";
  /**
   * Immutable. Optional refinement to `advertising_channel_type`. Must be a
   * valid sub-type of the parent channel type. Can be set only when creating
   * campaigns. After campaign is created, the field can not be changed.
   */
  advertisingChannelSubType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH_MOBILE_APP" | "DISPLAY_MOBILE_APP" | "SEARCH_EXPRESS" | "DISPLAY_EXPRESS" | "SHOPPING_SMART_ADS" | "DISPLAY_GMAIL_AD" | "DISPLAY_SMART_CAMPAIGN" | "VIDEO_ACTION" | "VIDEO_NON_SKIPPABLE" | "APP_CAMPAIGN" | "APP_CAMPAIGN_FOR_ENGAGEMENT" | "LOCAL_CAMPAIGN" | "SHOPPING_COMPARISON_LISTING_ADS" | "SMART_CAMPAIGN" | "VIDEO_SEQUENCE" | "APP_CAMPAIGN_FOR_PRE_REGISTRATION" | "VIDEO_REACH_TARGET_FREQUENCY" | "TRAVEL_ACTIVITIES" | "SOCIAL_FACEBOOK_TRACKING_ONLY";
  /**
   * Immutable. The primary serving target for ads within the campaign. The
   * targeting options can be refined in `network_settings`. This field is
   * required and should not be empty when creating new campaigns. Can be set
   * only when creating campaigns. After the campaign is created, the field can
   * not be changed.
   */
  advertisingChannelType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "SHOPPING" | "HOTEL" | "VIDEO" | "MULTI_CHANNEL" | "LOCAL" | "SMART" | "PERFORMANCE_MAX" | "LOCAL_SERVICES" | "TRAVEL" | "DEMAND_GEN" | "SOCIAL";
  /**
   * Settings for AI Max in search campaigns.
   */
  aiMaxSetting?: GoogleAdsSearchads360V23Resources_Campaign_AiMaxSetting;
  /**
   * The setting related to App Campaign.
   */
  appCampaignSetting?: GoogleAdsSearchads360V23Resources_Campaign_AppCampaignSetting;
  /**
   * Contains the opt-in/out status of each AssetAutomationType. See
   * documentation of each asset automation type enum for default opt in/out
   * behavior.
   */
  assetAutomationSettings?: GoogleAdsSearchads360V23Resources_Campaign_AssetAutomationSetting[];
  /**
   * Immutable. Setting for audience related features.
   */
  audienceSetting?: GoogleAdsSearchads360V23Resources_Campaign_AudienceSetting;
  /**
   * Output only. The resource name of the base campaign of a draft or
   * experiment campaign. For base campaigns, this is equal to `resource_name`.
   * This field is read-only.
   */
  readonly baseCampaign?: string;
  /**
   * The resource name of the portfolio bidding strategy used by the campaign.
   */
  biddingStrategy?: string;
  /**
   * Output only. The system status of the campaign's bidding strategy.
   */
  readonly biddingStrategySystemStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "LEARNING_NEW" | "LEARNING_SETTING_CHANGE" | "LEARNING_BUDGET_CHANGE" | "LEARNING_COMPOSITION_CHANGE" | "LEARNING_CONVERSION_TYPE_CHANGE" | "LEARNING_CONVERSION_SETTING_CHANGE" | "LIMITED_BY_CPC_BID_CEILING" | "LIMITED_BY_CPC_BID_FLOOR" | "LIMITED_BY_DATA" | "LIMITED_BY_BUDGET" | "LIMITED_BY_LOW_PRIORITY_SPEND" | "LIMITED_BY_LOW_QUALITY" | "LIMITED_BY_INVENTORY" | "MISCONFIGURED_ZERO_ELIGIBILITY" | "MISCONFIGURED_CONVERSION_TYPES" | "MISCONFIGURED_CONVERSION_SETTINGS" | "MISCONFIGURED_SHARED_BUDGET" | "MISCONFIGURED_STRATEGY_TYPE" | "PAUSED" | "UNAVAILABLE" | "MULTIPLE_LEARNING" | "MULTIPLE_LIMITED" | "MULTIPLE_MISCONFIGURED" | "MULTIPLE";
  /**
   * Output only. The type of bidding strategy. A bidding strategy can be
   * created by setting either the bidding scheme to create a standard bidding
   * strategy or the `bidding_strategy` field to create a portfolio bidding
   * strategy. This field is read-only.
   */
  readonly biddingStrategyType?:  | "UNSPECIFIED" | "UNKNOWN" | "COMMISSION" | "ENHANCED_CPC" | "INVALID" | "MANUAL_CPA" | "MANUAL_CPC" | "MANUAL_CPM" | "MANUAL_CPV" | "MAXIMIZE_CONVERSIONS" | "MAXIMIZE_CONVERSION_VALUE" | "PAGE_ONE_PROMOTED" | "PERCENT_CPC" | "TARGET_CPA" | "TARGET_CPC" | "TARGET_CPM" | "TARGET_IMPRESSION_SHARE" | "TARGET_OUTRANK_SHARE" | "TARGET_ROAS" | "TARGET_SPEND";
  brandGuidelines?: GoogleAdsSearchads360V23Resources_Campaign_BrandGuidelines;
  /**
   * Immutable. Whether Brand Guidelines are enabled for this Campaign. Only
   * applicable to Performance Max campaigns. If enabled, business name and logo
   * assets must be linked as CampaignAssets instead of AssetGroupAssets.
   */
  brandGuidelinesEnabled?: boolean;
  /**
   * The resource name of the campaign budget of the campaign.
   */
  campaignBudget?: string;
  /**
   * The resource name of the campaign group that this campaign belongs to.
   */
  campaignGroup?: string;
  /**
   * Commission is an automatic bidding strategy in which the advertiser pays a
   * certain portion of the conversion value.
   */
  commission?: GoogleAdsSearchads360V23Common__Commission;
  /**
   * The advertiser should self-declare whether this campaign contains
   * political advertising content targeted towards the European Union.
   */
  containsEuPoliticalAdvertising?:  | "UNSPECIFIED" | "UNKNOWN" | "CONTAINS_EU_POLITICAL_ADVERTISING" | "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING";
  /**
   * Settings for Demand Gen campaign.
   */
  demandGenCampaignSettings?: GoogleAdsSearchads360V23Resources_Campaign_DemandGenCampaignSettings;
  /**
   * The setting for controlling Dynamic Search Ads (DSA).
   */
  dynamicSearchAdsSetting?: GoogleAdsSearchads360V23Resources_Campaign_DynamicSearchAdsSetting;
  /**
   * Output only. The resource names of effective labels attached to this
   * campaign. An effective label is a label inherited or directly assigned to
   * this campaign.
   */
  readonly effectiveLabels?: string[];
  /**
   * The last day and time of the campaign in serving customer's timezone in
   * "yyyy-MM-dd HH:mm:ss" format. Set the time component to 23:59:59 for daily
   * granularity, time granularity is only supported for some campaign types. On
   * create, defaults to running indefinitely. To set an existing campaign to
   * run indefinitely, clear this field.
   */
  endDateTime?: string;
  /**
   * Output only. ID of the campaign in the external engine account. This field
   * is for non-Google Ads account only, for example, Yahoo Japan, Microsoft,
   * Baidu etc. For Google Ads entity, use "campaign.id" instead.
   */
  readonly engineId?: string;
  /**
   * The asset field types that should be excluded from this campaign. Asset
   * links with these field types will not be inherited by this campaign from
   * the upper level.
   */
  excludedParentAssetFieldTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION"[];
  /**
   * The asset set types that should be excluded from this campaign. Asset set
   * links with these types will not be inherited by this campaign from the
   * upper level. Location group types (GMB_DYNAMIC_LOCATION_GROUP,
   * CHAIN_DYNAMIC_LOCATION_GROUP, and STATIC_LOCATION_GROUP) are child types of
   * LOCATION_SYNC. Therefore, if LOCATION_SYNC is set for this field, all
   * location group asset sets are not allowed to be linked to this campaign,
   * and all Location Extension (LE) and Affiliate Location Extensions (ALE)
   * will not be served under this campaign. Only LOCATION_SYNC is currently
   * supported.
   */
  excludedParentAssetSetTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MERCHANT_CENTER_FEED" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION_SYNC" | "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP" | "CHAIN_DYNAMIC_LOCATION_GROUP" | "STATIC_LOCATION_GROUP" | "HOTEL_PROPERTY" | "TRAVEL_FEED"[];
  /**
   * Output only. The type of campaign: normal, draft, or experiment.
   */
  readonly experimentType?:  | "UNSPECIFIED" | "UNKNOWN" | "BASE" | "DRAFT" | "EXPERIMENT";
  /**
   * Output only. Types of feeds that are attached directly to this campaign.
   */
  readonly feedTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "PAGE_FEED" | "DYNAMIC_EDUCATION" | "MERCHANT_CENTER_FEED" | "DYNAMIC_REAL_ESTATE" | "DYNAMIC_CUSTOM" | "DYNAMIC_HOTELS_AND_RENTALS" | "DYNAMIC_FLIGHTS" | "DYNAMIC_TRAVEL" | "DYNAMIC_LOCAL" | "DYNAMIC_JOBS" | "LOCATION_SYNC" | "BUSINESS_PROFILE_DYNAMIC_LOCATION_GROUP" | "CHAIN_DYNAMIC_LOCATION_GROUP" | "STATIC_LOCATION_GROUP" | "HOTEL_PROPERTY" | "TRAVEL_FEED"[];
  /**
   * Suffix used to append query parameters to landing pages that are served
   * with parallel tracking.
   */
  finalUrlSuffix?: string;
  /**
   * A list that limits how often each user will see this campaign's ads.
   */
  frequencyCaps?: GoogleAdsSearchads360V23Common__FrequencyCapEntry[];
  /**
   * The setting for ads geotargeting.
   */
  geoTargetTypeSetting?: GoogleAdsSearchads360V23Resources_Campaign_GeoTargetTypeSetting;
  /**
   * Immutable. The resource name for a set of hotel properties for Performance
   * Max for travel goals campaigns.
   */
  hotelPropertyAssetSet?: string;
  /**
   * Output only. The hotel setting for the campaign.
   */
  readonly hotelSetting?: GoogleAdsSearchads360V23Resources_Campaign_HotelSettingInfo;
  /**
   * Output only. The ID of the campaign.
   */
  readonly id?: bigint;
  /**
   * Keyword match type of Campaign. Set to BROAD to set broad matching for all
   * keywords in a campaign.
   */
  keywordMatchType?:  | "UNSPECIFIED" | "UNKNOWN" | "BROAD";
  /**
   * Output only. The resource names of labels attached to this campaign.
   */
  readonly labels?: string[];
  /**
   * Output only. The datetime when this campaign was last modified. The
   * datetime is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss"
   * format.
   */
  readonly lastModifiedTime?: string;
  /**
   * Immutable. Listing type of ads served for this campaign. Field is
   * restricted for usage with Performance Max campaigns.
   */
  listingType?:  | "UNSPECIFIED" | "UNKNOWN" | "VEHICLES";
  /**
   * The setting for local campaign.
   */
  localCampaignSetting?: GoogleAdsSearchads360V23Resources_Campaign_LocalCampaignSetting;
  /**
   * The Local Services Campaign related settings.
   */
  localServicesCampaignSettings?: GoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings;
  /**
   * Standard Manual CPA bidding strategy. Manual bidding strategy that allows
   * advertiser to set the bid per advertiser-specified action. Supported only
   * for Local Services campaigns.
   */
  manualCpa?: GoogleAdsSearchads360V23Common__ManualCpa;
  /**
   * Standard Manual CPC bidding strategy. Manual click-based bidding where
   * user pays per click.
   */
  manualCpc?: GoogleAdsSearchads360V23Common__ManualCpc;
  /**
   * Standard Manual CPM bidding strategy. Manual impression-based bidding
   * where user pays per thousand impressions.
   */
  manualCpm?: GoogleAdsSearchads360V23Common__ManualCpm;
  /**
   * A bidding strategy that pays a configurable amount per video view.
   */
  manualCpv?: GoogleAdsSearchads360V23Common__ManualCpv;
  /**
   * Standard Maximize Conversions bidding strategy that automatically
   * maximizes number of conversions while spending your budget.
   */
  maximizeConversions?: GoogleAdsSearchads360V23Common__MaximizeConversions;
  /**
   * Standard Maximize Conversion Value bidding strategy that automatically
   * sets bids to maximize revenue while spending your budget.
   */
  maximizeConversionValue?: GoogleAdsSearchads360V23Common__MaximizeConversionValue;
  /**
   * Output only. Indicates whether this campaign is missing a declaration
   * about whether it contains political advertising targeted towards the EU and
   * is ineligible for any exemptions. If this field is true, use the
   * contains_eu_political_advertising field to add the required declaration.
   * This field is read-only.
   */
  readonly missingEuPoliticalAdvertisingDeclaration?: boolean;
  /**
   * The name of the campaign. This field is required and should not be empty
   * when creating new campaigns. It must not contain any null (code point 0x0),
   * NL line feed (code point 0xA) or carriage return (code point 0xD)
   * characters.
   */
  name?: string;
  /**
   * The network settings for the campaign.
   */
  networkSettings?: GoogleAdsSearchads360V23Resources_Campaign_NetworkSettings;
  /**
   * Optimization goal setting for this campaign, which includes a set of
   * optimization goal types.
   */
  optimizationGoalSetting?: GoogleAdsSearchads360V23Resources_Campaign_OptimizationGoalSetting;
  /**
   * Output only. Optimization score of the campaign. Optimization score is an
   * estimate of how well a campaign is set to perform. It ranges from 0% (0.0)
   * to 100% (1.0), with 100% indicating that the campaign is performing at full
   * potential. This field is null for unscored campaigns. See "About
   * optimization score" at
   * https://support.google.com/google-ads/answer/9061546. This field is
   * read-only.
   */
  readonly optimizationScore?: number;
  /**
   * Payment mode for the campaign.
   */
  paymentMode?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICKS" | "CONVERSION_VALUE" | "CONVERSIONS" | "GUEST_STAY";
  /**
   * Standard Percent Cpc bidding strategy where bids are a fraction of the
   * advertised price for some good or service.
   */
  percentCpc?: GoogleAdsSearchads360V23Common__PercentCpc;
  /**
   * Output only. Information about campaigns being upgraded to Performance
   * Max.
   */
  readonly performanceMaxUpgrade?: GoogleAdsSearchads360V23Resources_Campaign_PerformanceMaxUpgrade;
  /**
   * Settings for Performance Max campaign.
   */
  pmaxCampaignSettings?: GoogleAdsSearchads360V23Resources_Campaign_PmaxCampaignSettings;
  /**
   * Output only. The primary status of the campaign. Provides insight into why
   * a campaign is not serving or not serving optimally. Modification to the
   * campaign and its related entities might take a while to be reflected in
   * this status.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "ENDED" | "PENDING" | "MISCONFIGURED" | "LIMITED" | "LEARNING" | "NOT_ELIGIBLE";
  /**
   * Output only. The primary status reasons of the campaign. Provides insight
   * into why a campaign is not serving or not serving optimally. These reasons
   * are aggregated to determine an overall CampaignPrimaryStatus.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_REMOVED" | "CAMPAIGN_PAUSED" | "CAMPAIGN_PENDING" | "CAMPAIGN_ENDED" | "CAMPAIGN_DRAFT" | "BIDDING_STRATEGY_MISCONFIGURED" | "BIDDING_STRATEGY_LIMITED" | "BIDDING_STRATEGY_LEARNING" | "BIDDING_STRATEGY_CONSTRAINED" | "BUDGET_CONSTRAINED" | "BUDGET_MISCONFIGURED" | "SEARCH_VOLUME_LIMITED" | "AD_GROUPS_PAUSED" | "NO_AD_GROUPS" | "KEYWORDS_PAUSED" | "NO_KEYWORDS" | "AD_GROUP_ADS_PAUSED" | "NO_AD_GROUP_ADS" | "HAS_ADS_LIMITED_BY_POLICY" | "HAS_ADS_DISAPPROVED" | "MOST_ADS_UNDER_REVIEW" | "MISSING_LEAD_FORM_EXTENSION" | "MISSING_CALL_EXTENSION" | "LEAD_FORM_EXTENSION_UNDER_REVIEW" | "LEAD_FORM_EXTENSION_DISAPPROVED" | "CALL_EXTENSION_UNDER_REVIEW" | "CALL_EXTENSION_DISAPPROVED" | "NO_MOBILE_APPLICATION_AD_GROUP_CRITERIA" | "CAMPAIGN_GROUP_PAUSED" | "CAMPAIGN_GROUP_ALL_GROUP_BUDGETS_ENDED" | "APP_NOT_RELEASED" | "APP_PARTIALLY_RELEASED" | "HAS_ASSET_GROUPS_DISAPPROVED" | "HAS_ASSET_GROUPS_LIMITED_BY_POLICY" | "MOST_ASSET_GROUPS_UNDER_REVIEW" | "NO_ASSET_GROUPS" | "ASSET_GROUPS_PAUSED" | "MISSING_LOCATION_TARGETING"[];
  /**
   * Settings for Real-Time Bidding, a feature only available for campaigns
   * targeting the Ad Exchange network.
   */
  realTimeBiddingSetting?: GoogleAdsSearchads360V23Common__RealTimeBiddingSetting;
  /**
   * Immutable. The resource name of the campaign. Campaign resource names have
   * the form: `customers/{customer_id}/campaigns/{campaign_id}`
   */
  resourceName?: string;
  /**
   * Selective optimization setting for this campaign, which includes a set of
   * conversion actions to optimize this campaign towards. This feature only
   * applies to app campaigns that use MULTI_CHANNEL as AdvertisingChannelType
   * and APP_CAMPAIGN or APP_CAMPAIGN_FOR_ENGAGEMENT as
   * AdvertisingChannelSubType.
   */
  selectiveOptimization?: GoogleAdsSearchads360V23Resources_Campaign_SelectiveOptimization;
  /**
   * Selective optimization mode for this campaign.
   */
  selectiveOptimizationMode?:  | "UNSPECIFIED" | "UNKNOWN" | "UNCONSTRAINED" | "MATCHES_SEARCH_ADS360_EFFECTIVE_CAMPAIGN_LEVEL_CONFIG";
  /**
   * Output only. The ad serving status of the campaign.
   */
  readonly servingStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "SERVING" | "NONE" | "ENDED" | "PENDING" | "SUSPENDED";
  /**
   * The setting for controlling Shopping campaigns.
   */
  shoppingSetting?: GoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting;
  /**
   * The date and time when campaign started in serving. The timestamp is in
   * the customer's time zone and in "yyyy-MM-dd HH:mm:ss" format. Set the time
   * component to 00:00:00 for daily granularity, time granularity is only
   * supported for some campaign types.
   */
  startDateTime?: string;
  /**
   * The status of the campaign. When a new campaign is added, the status
   * defaults to ENABLED.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
  /**
   * Standard Target CPA bidding strategy that automatically sets bids to help
   * get as many conversions as possible at the target cost-per-acquisition
   * (CPA) you set.
   */
  targetCpa?: GoogleAdsSearchads360V23Common__TargetCpa;
  /**
   * An automated bidding strategy that sets bids to help get as many clicks as
   * possible at the target cost-per-click (CPC) you set.
   */
  targetCpc?: GoogleAdsSearchads360V23Common__TargetCpc;
  /**
   * A bidding strategy that automatically optimizes cost per thousand
   * impressions.
   */
  targetCpm?: GoogleAdsSearchads360V23Common__TargetCpm;
  /**
   * Target Impression Share bidding strategy. An automated bidding strategy
   * that sets bids to achieve a chosen percentage of impressions.
   */
  targetImpressionShare?: GoogleAdsSearchads360V23Common__TargetImpressionShare;
  /**
   * Setting for targeting related features.
   */
  targetingSetting?: GoogleAdsSearchads360V23Common__TargetingSetting;
  /**
   * Standard Target ROAS bidding strategy that automatically maximizes revenue
   * while averaging a specific target return on ad spend (ROAS).
   */
  targetRoas?: GoogleAdsSearchads360V23Common__TargetRoas;
  /**
   * Standard Target Spend bidding strategy that automatically sets your bids
   * to help get as many clicks as possible within your budget.
   */
  targetSpend?: GoogleAdsSearchads360V23Common__TargetSpend;
  /**
   * Third-Party integration partners.
   */
  thirdPartyIntegrationPartners?: GoogleAdsSearchads360V23Common__CampaignThirdPartyIntegrationPartners;
  /**
   * Output only. Campaign-level settings for tracking information.
   */
  readonly trackingSetting?: GoogleAdsSearchads360V23Resources_Campaign_TrackingSetting;
  /**
   * The URL template for constructing a tracking URL.
   */
  trackingUrlTemplate?: string;
  /**
   * Settings for Travel campaign.
   */
  travelCampaignSettings?: GoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings;
  /**
   * The list of mappings used to substitute custom parameter tags in a
   * `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
   */
  urlCustomParameters?: GoogleAdsSearchads360V23Common__CustomParameter[];
  /**
   * Describes how unbranded pharma ads will be displayed.
   */
  vanityPharma?: GoogleAdsSearchads360V23Resources_Campaign_VanityPharma;
  /**
   * Brand Safety setting at the individual campaign level. Allows for
   * selecting an inventory type to show your ads on content that is the right
   * fit for your brand. See
   * https://support.google.com/google-ads/answer/7515513.
   */
  videoBrandSafetySuitability?:  | "UNSPECIFIED" | "UNKNOWN" | "EXPANDED_INVENTORY" | "STANDARD_INVENTORY" | "LIMITED_INVENTORY";
}

function serializeGoogleAdsSearchads360V23Resources__Campaign(data: any): GoogleAdsSearchads360V23Resources__Campaign {
  return {
    ...data,
    commission: data["commission"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Commission(data["commission"]) : undefined,
    localServicesCampaignSettings: data["localServicesCampaignSettings"] !== undefined ? serializeGoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings(data["localServicesCampaignSettings"]) : undefined,
    maximizeConversions: data["maximizeConversions"] !== undefined ? serializeGoogleAdsSearchads360V23Common__MaximizeConversions(data["maximizeConversions"]) : undefined,
    maximizeConversionValue: data["maximizeConversionValue"] !== undefined ? serializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data["maximizeConversionValue"]) : undefined,
    percentCpc: data["percentCpc"] !== undefined ? serializeGoogleAdsSearchads360V23Common__PercentCpc(data["percentCpc"]) : undefined,
    shoppingSetting: data["shoppingSetting"] !== undefined ? serializeGoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting(data["shoppingSetting"]) : undefined,
    targetCpa: data["targetCpa"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetCpa(data["targetCpa"]) : undefined,
    targetCpc: data["targetCpc"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetCpc(data["targetCpc"]) : undefined,
    targetImpressionShare: data["targetImpressionShare"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data["targetImpressionShare"]) : undefined,
    targetRoas: data["targetRoas"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetRoas(data["targetRoas"]) : undefined,
    targetSpend: data["targetSpend"] !== undefined ? serializeGoogleAdsSearchads360V23Common__TargetSpend(data["targetSpend"]) : undefined,
    travelCampaignSettings: data["travelCampaignSettings"] !== undefined ? serializeGoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings(data["travelCampaignSettings"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__Campaign(data: any): GoogleAdsSearchads360V23Resources__Campaign {
  return {
    ...data,
    commission: data["commission"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Commission(data["commission"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    localServicesCampaignSettings: data["localServicesCampaignSettings"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings(data["localServicesCampaignSettings"]) : undefined,
    maximizeConversions: data["maximizeConversions"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__MaximizeConversions(data["maximizeConversions"]) : undefined,
    maximizeConversionValue: data["maximizeConversionValue"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__MaximizeConversionValue(data["maximizeConversionValue"]) : undefined,
    percentCpc: data["percentCpc"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__PercentCpc(data["percentCpc"]) : undefined,
    shoppingSetting: data["shoppingSetting"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting(data["shoppingSetting"]) : undefined,
    targetCpa: data["targetCpa"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetCpa(data["targetCpa"]) : undefined,
    targetCpc: data["targetCpc"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetCpc(data["targetCpc"]) : undefined,
    targetImpressionShare: data["targetImpressionShare"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetImpressionShare(data["targetImpressionShare"]) : undefined,
    targetRoas: data["targetRoas"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetRoas(data["targetRoas"]) : undefined,
    targetSpend: data["targetSpend"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__TargetSpend(data["targetSpend"]) : undefined,
    travelCampaignSettings: data["travelCampaignSettings"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings(data["travelCampaignSettings"]) : undefined,
  };
}

/**
 * A link between a Campaign and an Asset.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignAsset {
  /**
   * Immutable. The asset which is linked to the campaign.
   */
  asset?: string;
  /**
   * Immutable. The campaign to which the asset is linked.
   */
  campaign?: string;
  /**
   * Immutable. Role that the asset takes under the linked campaign. Required.
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Provides the PrimaryStatus of this asset link. Primary status
   * is meant essentially to differentiate between the plain "status" field,
   * which has advertiser set values of enabled, paused, or removed. The primary
   * status takes into account other signals (for assets its mainly policy and
   * quality approvals) to come up with a more comprehensive status to indicate
   * its serving state.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
  /**
   * Output only. Provides the details of the primary status and its associated
   * reasons.
   */
  readonly primaryStatusDetails?: GoogleAdsSearchads360V23Common__AssetLinkPrimaryStatusDetails[];
  /**
   * Output only. Provides a list of reasons for why an asset is not serving or
   * not serving at full capacity.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_LINK_PAUSED" | "ASSET_LINK_REMOVED" | "ASSET_DISAPPROVED" | "ASSET_UNDER_REVIEW" | "ASSET_APPROVED_LABELED"[];
  /**
   * Immutable. The resource name of the campaign asset. CampaignAsset resource
   * names have the form:
   * `customers/{customer_id}/campaignAssets/{campaign_id}~{asset_id}~{field_type}`
   */
  resourceName?: string;
  /**
   * Output only. Source of the campaign asset link.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * Status of the campaign asset.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * CampaignAssetSet is the linkage between a campaign and an asset set. Adding
 * a CampaignAssetSet links an asset set with a campaign.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignAssetSet {
  /**
   * Immutable. The asset set which is linked to the campaign.
   */
  assetSet?: string;
  /**
   * Immutable. The campaign to which this asset set is linked.
   */
  campaign?: string;
  /**
   * Immutable. The resource name of the campaign asset set. Asset set asset
   * resource names have the form:
   * `customers/{customer_id}/campaignAssetSets/{campaign_id}~{asset_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the campaign asset set asset. Read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * A campaign audience view. Includes performance data from interests and
 * remarketing lists for Display Network and YouTube Network ads, and
 * remarketing lists for search ads (RLSA), aggregated by campaign and audience
 * criterion. This view only includes audiences attached at the campaign level.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignAudienceView {
  /**
   * Output only. The resource name of the campaign audience view. Campaign
   * audience view resource names have the form:
   * `customers/{customer_id}/campaignAudienceViews/{campaign_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * Represents a bid-modifiable only criterion at the campaign level.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignBidModifier {
  /**
   * The modifier for the bid when the criterion matches.
   */
  bidModifier?: number;
  /**
   * Output only. The campaign to which this criterion belongs.
   */
  readonly campaign?: string;
  /**
   * Output only. The ID of the criterion to bid modify. This field is ignored
   * for mutates.
   */
  readonly criterionId?: bigint;
  /**
   * Immutable. Criterion for interaction type. Only supported for search
   * campaigns.
   */
  interactionType?: GoogleAdsSearchads360V23Common__InteractionTypeInfo;
  /**
   * Immutable. The resource name of the campaign bid modifier. Campaign bid
   * modifier resource names have the form:
   * `customers/{customer_id}/campaignBidModifiers/{campaign_id}~{criterion_id}`
   */
  resourceName?: string;
}

/**
 * A campaign budget.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignBudget {
  /**
   * ID of the portfolio bidding strategy that this shared campaign budget is
   * aligned with. When a bidding strategy and a campaign budget are aligned,
   * they are attached to the same set of campaigns. After a campaign budget is
   * aligned with a bidding strategy, campaigns that are added to the campaign
   * budget must also use the aligned bidding strategy.
   */
  alignedBiddingStrategyId?: bigint;
  /**
   * The average daily amount to be spent by the campaign. This field is used
   * when the CampaignBudget `period` is set to `DAILY`, which is the default.
   * Amount is specified in micros in the account's local currency. One million
   * micros is equivalent to one currency unit. The effective monthly spend is
   * capped at 30.4 times this daily amount. This field is mutually exclusive
   * with 'total_amount_micros'. Only one of 'amount_micros' or
   * 'total_amount_micros' should be set.
   */
  amountMicros?: bigint;
  /**
   * The delivery method that determines the rate at which the campaign budget
   * is spent. Defaults to STANDARD if unspecified in a create operation.
   */
  deliveryMethod?:  | "UNSPECIFIED" | "UNKNOWN" | "STANDARD" | "ACCELERATED";
  /**
   * Specifies whether the budget is explicitly shared. Defaults to true if
   * unspecified in a create operation. If true, the budget was created with the
   * purpose of sharing across one or more campaigns. If false, the budget was
   * created with the intention of only being used with a single campaign. The
   * budget's name and status will stay in sync with the campaign's name and
   * status. Attempting to share the budget with a second campaign will result
   * in an error. A non-shared budget can become an explicitly shared. The same
   * operation must also assign the budget a name. A shared campaign budget can
   * never become non-shared.
   */
  explicitlyShared?: boolean;
  /**
   * Output only. Indicates whether there is a recommended budget for this
   * campaign budget. This field is read-only.
   */
  readonly hasRecommendedBudget?: boolean;
  /**
   * Output only. The ID of the campaign budget. A campaign budget is created
   * using the CampaignBudgetService create operation and is assigned a budget
   * ID. A budget ID can be shared across different campaigns; the system will
   * then allocate the campaign budget among different campaigns to get optimum
   * results.
   */
  readonly id?: bigint;
  /**
   * The name of the campaign budget. When creating a campaign budget through
   * CampaignBudgetService, every explicitly shared campaign budget must have a
   * non-null, non-empty name. Campaign budgets that are not explicitly shared
   * derive their name from the attached campaign's name. The length of this
   * string must be between 1 and 255, inclusive, in UTF-8 bytes, (trimmed).
   */
  name?: string;
  /**
   * Immutable. Period over which to spend the budget. Defaults to DAILY if not
   * specified.
   */
  period?:  | "UNSPECIFIED" | "UNKNOWN" | "DAILY" | "CUSTOM_PERIOD";
  /**
   * Output only. The recommended budget amount. If no recommendation is
   * available, this will be set to the budget amount. Amount is specified in
   * micros, where one million is equivalent to one currency unit. This field is
   * read-only.
   */
  readonly recommendedBudgetAmountMicros?: bigint;
  /**
   * Output only. The estimated change in weekly clicks if the recommended
   * budget is applied. This field is read-only.
   */
  readonly recommendedBudgetEstimatedChangeWeeklyClicks?: bigint;
  /**
   * Output only. The estimated change in weekly cost in micros if the
   * recommended budget is applied. One million is equivalent to one currency
   * unit. This field is read-only.
   */
  readonly recommendedBudgetEstimatedChangeWeeklyCostMicros?: bigint;
  /**
   * Output only. The estimated change in weekly interactions if the
   * recommended budget is applied. This field is read-only.
   */
  readonly recommendedBudgetEstimatedChangeWeeklyInteractions?: bigint;
  /**
   * Output only. The estimated change in weekly views if the recommended
   * budget is applied. This field is read-only.
   */
  readonly recommendedBudgetEstimatedChangeWeeklyViews?: bigint;
  /**
   * Output only. The number of campaigns actively using the budget. This field
   * is read-only.
   */
  readonly referenceCount?: bigint;
  /**
   * Immutable. The resource name of the campaign budget. Campaign budget
   * resource names have the form:
   * `customers/{customer_id}/campaignBudgets/{campaign_budget_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of this campaign budget. This field is read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * The total amount to be spent by the campaign over its entire duration.
   * This field is used *only* when the CampaignBudget `period` is set to
   * `CUSTOM_PERIOD`. It represents the budget cap for the campaign's lifetime,
   * rather than a daily limit. The amount is specified in micros in the
   * account's local currency. One million micros is equivalent to one currency
   * unit. This field is mutually exclusive with 'amount_micros'. Only one of
   * 'total_amount_micros' or 'amount_micros' should be set.
   */
  totalAmountMicros?: bigint;
  /**
   * Immutable. The type of the campaign budget.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "STANDARD" | "FIXED_CPA" | "SMART_CAMPAIGN" | "LOCAL_SERVICES";
}

function serializeGoogleAdsSearchads360V23Resources__CampaignBudget(data: any): GoogleAdsSearchads360V23Resources__CampaignBudget {
  return {
    ...data,
    alignedBiddingStrategyId: data["alignedBiddingStrategyId"] !== undefined ? String(data["alignedBiddingStrategyId"]) : undefined,
    amountMicros: data["amountMicros"] !== undefined ? String(data["amountMicros"]) : undefined,
    totalAmountMicros: data["totalAmountMicros"] !== undefined ? String(data["totalAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__CampaignBudget(data: any): GoogleAdsSearchads360V23Resources__CampaignBudget {
  return {
    ...data,
    alignedBiddingStrategyId: data["alignedBiddingStrategyId"] !== undefined ? BigInt(data["alignedBiddingStrategyId"]) : undefined,
    amountMicros: data["amountMicros"] !== undefined ? BigInt(data["amountMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    recommendedBudgetAmountMicros: data["recommendedBudgetAmountMicros"] !== undefined ? BigInt(data["recommendedBudgetAmountMicros"]) : undefined,
    recommendedBudgetEstimatedChangeWeeklyClicks: data["recommendedBudgetEstimatedChangeWeeklyClicks"] !== undefined ? BigInt(data["recommendedBudgetEstimatedChangeWeeklyClicks"]) : undefined,
    recommendedBudgetEstimatedChangeWeeklyCostMicros: data["recommendedBudgetEstimatedChangeWeeklyCostMicros"] !== undefined ? BigInt(data["recommendedBudgetEstimatedChangeWeeklyCostMicros"]) : undefined,
    recommendedBudgetEstimatedChangeWeeklyInteractions: data["recommendedBudgetEstimatedChangeWeeklyInteractions"] !== undefined ? BigInt(data["recommendedBudgetEstimatedChangeWeeklyInteractions"]) : undefined,
    recommendedBudgetEstimatedChangeWeeklyViews: data["recommendedBudgetEstimatedChangeWeeklyViews"] !== undefined ? BigInt(data["recommendedBudgetEstimatedChangeWeeklyViews"]) : undefined,
    referenceCount: data["referenceCount"] !== undefined ? BigInt(data["referenceCount"]) : undefined,
    totalAmountMicros: data["totalAmountMicros"] !== undefined ? BigInt(data["totalAmountMicros"]) : undefined,
  };
}

/**
 * The biddability setting for the specified campaign only for all conversion
 * actions with a matching category and origin.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignConversionGoal {
  /**
   * The biddability of the campaign conversion goal.
   */
  biddable?: boolean;
  /**
   * Immutable. The campaign with which this campaign conversion goal is
   * associated.
   */
  campaign?: string;
  /**
   * The conversion category of this campaign conversion goal.
   */
  category?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT" | "PAGE_VIEW" | "PURCHASE" | "SIGNUP" | "DOWNLOAD" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "SUBSCRIBE_PAID" | "PHONE_CALL_LEAD" | "IMPORTED_LEAD" | "SUBMIT_LEAD_FORM" | "BOOK_APPOINTMENT" | "REQUEST_QUOTE" | "GET_DIRECTIONS" | "OUTBOUND_CLICK" | "CONTACT" | "ENGAGEMENT" | "STORE_VISIT" | "STORE_SALE" | "QUALIFIED_LEAD" | "CONVERTED_LEAD";
  /**
   * The conversion origin of this campaign conversion goal.
   */
  origin?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "GOOGLE_HOSTED" | "APP" | "CALL_FROM_ADS" | "STORE" | "YOUTUBE_HOSTED" | "FLOODLIGHT";
  /**
   * Immutable. The resource name of the campaign conversion goal. Campaign
   * conversion goal resource names have the form:
   * `customers/{customer_id}/campaignConversionGoals/{campaign_id}~{category}~{origin}`
   */
  resourceName?: string;
  /**
   * Search Ads 360 biddability of the campaign conversion goal.
   */
  searchAds360Biddable?: boolean;
}

/**
 * A campaign criterion.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignCriterion {
  /**
   * Immutable. Ad Schedule.
   */
  adSchedule?: GoogleAdsSearchads360V23Common__AdScheduleInfo;
  /**
   * Immutable. Age range.
   */
  ageRange?: GoogleAdsSearchads360V23Common__AgeRangeInfo;
  /**
   * The modifier for the bids when the criterion matches. The modifier must be
   * in the range: 0.1 - 10.0. Most targetable criteria types support modifiers.
   * Use 0 to opt out of a Device type.
   */
  bidModifier?: number;
  /**
   * Immutable. Brand list campaign criterion.
   */
  brandList?: GoogleAdsSearchads360V23Common__BrandListInfo;
  /**
   * Immutable. The campaign to which the criterion belongs.
   */
  campaign?: string;
  /**
   * Immutable. Carrier.
   */
  carrier?: GoogleAdsSearchads360V23Common__CarrierInfo;
  /**
   * Immutable. Combined Audience.
   */
  combinedAudience?: GoogleAdsSearchads360V23Common__CombinedAudienceInfo;
  /**
   * Immutable. ContentLabel.
   */
  contentLabel?: GoogleAdsSearchads360V23Common__ContentLabelInfo;
  /**
   * Output only. The ID of the criterion. This field is ignored during mutate.
   */
  readonly criterionId?: bigint;
  /**
   * Immutable. Device.
   */
  device?: GoogleAdsSearchads360V23Common__DeviceInfo;
  /**
   * Output only. The display name of the criterion. This field is ignored for
   * mutates.
   */
  readonly displayName?: string;
  /**
   * Immutable. Extended demographic criterion.
   */
  extendedDemographic?: GoogleAdsSearchads360V23Common__ExtendedDemographicInfo;
  /**
   * Immutable. Gender.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderInfo;
  /**
   * Immutable. Income range.
   */
  incomeRange?: GoogleAdsSearchads360V23Common__IncomeRangeInfo;
  /**
   * Immutable. IpBlock. You can exclude up to 500 IP addresses per campaign.
   */
  ipBlock?: GoogleAdsSearchads360V23Common__IpBlockInfo;
  /**
   * Immutable. Keyword.
   */
  keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Immutable. Smart Campaign Keyword Theme.
   */
  keywordTheme?: GoogleAdsSearchads360V23Common__KeywordThemeInfo;
  /**
   * Immutable. Language.
   */
  language?: GoogleAdsSearchads360V23Common__LanguageInfo;
  /**
   * Output only. The datetime when this campaign criterion was last modified.
   * The datetime is in the customer's time zone and in "yyyy-MM-dd
   * HH:mm:ss.ssssss" format.
   */
  readonly lastModifiedTime?: string;
  /**
   * Immutable. Life event campaign criterion.
   */
  lifeEvent?: GoogleAdsSearchads360V23Common__LifeEventInfo;
  /**
   * Immutable. Listing scope.
   */
  listingScope?: GoogleAdsSearchads360V23Common__ListingScopeInfo;
  /**
   * Immutable. GLS service campaign criterion.
   */
  localServiceId?: GoogleAdsSearchads360V23Common__LocalServiceIdInfo;
  /**
   * Immutable. Location.
   */
  location?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * Immutable. Location Group
   */
  locationGroup?: GoogleAdsSearchads360V23Common__LocationGroupInfo;
  /**
   * Immutable. Mobile app category.
   */
  mobileAppCategory?: GoogleAdsSearchads360V23Common__MobileAppCategoryInfo;
  /**
   * Immutable. Mobile application.
   */
  mobileApplication?: GoogleAdsSearchads360V23Common__MobileApplicationInfo;
  /**
   * Immutable. Mobile Device.
   */
  mobileDevice?: GoogleAdsSearchads360V23Common__MobileDeviceInfo;
  /**
   * Immutable. Whether to target (`false`) or exclude (`true`) the criterion.
   */
  negative?: boolean;
  /**
   * Immutable. Operating system version.
   */
  operatingSystemVersion?: GoogleAdsSearchads360V23Common__OperatingSystemVersionInfo;
  /**
   * Immutable. Parental status.
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusInfo;
  /**
   * Immutable. Placement.
   */
  placement?: GoogleAdsSearchads360V23Common__PlacementInfo;
  /**
   * Immutable. Proximity.
   */
  proximity?: GoogleAdsSearchads360V23Common__ProximityInfo;
  /**
   * Immutable. The resource name of the campaign criterion. Campaign criterion
   * resource names have the form:
   * `customers/{customer_id}/campaignCriteria/{campaign_id}~{criterion_id}`
   */
  resourceName?: string;
  /**
   * The status of the criterion.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "REMOVED";
  /**
   * Immutable. Topic.
   */
  topic?: GoogleAdsSearchads360V23Common__TopicInfo;
  /**
   * Output only. The type of the criterion.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "PLACEMENT" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "DEVICE" | "LOCATION" | "LISTING_GROUP" | "AD_SCHEDULE" | "AGE_RANGE" | "GENDER" | "INCOME_RANGE" | "PARENTAL_STATUS" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "USER_LIST" | "PROXIMITY" | "TOPIC" | "LISTING_SCOPE" | "LANGUAGE" | "IP_BLOCK" | "CONTENT_LABEL" | "CARRIER" | "USER_INTEREST" | "WEBPAGE" | "OPERATING_SYSTEM_VERSION" | "APP_PAYMENT_MODEL" | "MOBILE_DEVICE" | "CUSTOM_AFFINITY" | "CUSTOM_INTENT" | "LOCATION_GROUP" | "CUSTOM_AUDIENCE" | "COMBINED_AUDIENCE" | "KEYWORD_THEME" | "AUDIENCE" | "NEGATIVE_KEYWORD_LIST" | "LOCAL_SERVICE_ID" | "SEARCH_THEME" | "BRAND" | "BRAND_LIST" | "LIFE_EVENT" | "WEBPAGE_LIST" | "VIDEO_LINEUP" | "PLACEMENT_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE";
  /**
   * Immutable. User Interest.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestInfo;
  /**
   * Immutable. User List.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListInfo;
  /**
   * Immutable. Video lineup criterion.
   */
  videoLineup?: GoogleAdsSearchads360V23Common__VideoLineupInfo;
  /**
   * Immutable. Webpage.
   */
  webpage?: GoogleAdsSearchads360V23Common__WebpageInfo;
  /**
   * Immutable. Webpage list. This criterion is not publicly available.
   */
  webpageList?: GoogleAdsSearchads360V23Common__WebpageListInfo;
  /**
   * Immutable. YouTube Channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * Immutable. YouTube Video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Common__YouTubeVideoInfo;
}

function serializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data: any): GoogleAdsSearchads360V23Resources__CampaignCriterion {
  return {
    ...data,
    extendedDemographic: data["extendedDemographic"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data["extendedDemographic"]) : undefined,
    lifeEvent: data["lifeEvent"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LifeEventInfo(data["lifeEvent"]) : undefined,
    listingScope: data["listingScope"] !== undefined ? serializeGoogleAdsSearchads360V23Common__ListingScopeInfo(data["listingScope"]) : undefined,
    locationGroup: data["locationGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LocationGroupInfo(data["locationGroup"]) : undefined,
    videoLineup: data["videoLineup"] !== undefined ? serializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data["videoLineup"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data: any): GoogleAdsSearchads360V23Resources__CampaignCriterion {
  return {
    ...data,
    criterionId: data["criterionId"] !== undefined ? BigInt(data["criterionId"]) : undefined,
    extendedDemographic: data["extendedDemographic"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ExtendedDemographicInfo(data["extendedDemographic"]) : undefined,
    lifeEvent: data["lifeEvent"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LifeEventInfo(data["lifeEvent"]) : undefined,
    listingScope: data["listingScope"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__ListingScopeInfo(data["listingScope"]) : undefined,
    locationGroup: data["locationGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LocationGroupInfo(data["locationGroup"]) : undefined,
    videoLineup: data["videoLineup"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__VideoLineupInfo(data["videoLineup"]) : undefined,
  };
}

/**
 * A customizer value for the associated CustomizerAttribute at the Campaign
 * level.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignCustomizer {
  /**
   * Immutable. The campaign to which the customizer attribute is linked.
   */
  campaign?: string;
  /**
   * Required. Immutable. The customizer attribute which is linked to the
   * campaign.
   */
  customizerAttribute?: string;
  /**
   * Immutable. The resource name of the campaign customizer. Campaign
   * customizer resource names have the form:
   * `customers/{customer_id}/campaignCustomizers/{campaign_id}~{customizer_attribute_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the campaign customizer.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Required. The value to associate with the customizer attribute at this
   * level. The value must be of the type specified for the CustomizerAttribute.
   */
  value?: GoogleAdsSearchads360V23Common__CustomizerValue;
}

/**
 * A campaign draft.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignDraft {
  /**
   * Immutable. The base campaign to which the draft belongs.
   */
  baseCampaign?: string;
  /**
   * Output only. Resource name of the Campaign that results from overlaying
   * the draft changes onto the base campaign. This field is read-only.
   */
  readonly draftCampaign?: string;
  /**
   * Output only. The ID of the draft. This field is read-only.
   */
  readonly draftId?: bigint;
  /**
   * Output only. Whether there is an experiment based on this draft currently
   * serving.
   */
  readonly hasExperimentRunning?: boolean;
  /**
   * Output only. The resource name of the long-running operation that can be
   * used to poll for completion of draft promotion. This is only set if the
   * draft promotion is in progress or finished.
   */
  readonly longRunningOperation?: string;
  /**
   * The name of the campaign draft. This field is required and should not be
   * empty when creating new campaign drafts. It must not contain any null (code
   * point 0x0), NL line feed (code point 0xA) or carriage return (code point
   * 0xD) characters.
   */
  name?: string;
  /**
   * Immutable. The resource name of the campaign draft. Campaign draft
   * resource names have the form:
   * `customers/{customer_id}/campaignDrafts/{base_campaign_id}~{draft_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the campaign draft. This field is read-only.
   * When a new campaign draft is added, the status defaults to PROPOSED.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PROPOSED" | "REMOVED" | "PROMOTING" | "PROMOTED" | "PROMOTE_FAILED";
}

/**
 * Represents a relationship between a campaign and an effective label. An
 * effective label is a label inherited or directly assigned to this campaign.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignEffectiveLabel {
  /**
   * Immutable. The campaign to which the effective label is attached.
   */
  campaign?: string;
  /**
   * Immutable. The effective label assigned to the campaign.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the effective label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. Name of the resource. CampaignEffectivelabel resource names
   * have the form:
   * `customers/{owner_customer_id}/campaignEffectiveLabels/{campaign_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * A link between a campaign and a goal enabling campaign-specific
 * optimization.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignGoalConfig {
  /**
   * Immutable. The resource name of the campaign for this link.
   */
  campaign?: string;
  /**
   * Retention goal campaign settings.
   */
  campaignRetentionSettings?: GoogleAdsSearchads360V23Common_CampaignGoalSettings_CampaignRetentionGoalSettings;
  /**
   * Immutable. The resource name of the goal this link is attached to.
   */
  goal?: string;
  /**
   * Output only. The goal type this link is attached to.
   */
  readonly goalType?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_RETENTION";
  /**
   * Immutable. The resource name of the campaign goal config. campaign goal
   * config resource names have the form:
   * `customers/{customer_id}/campaignGoalConfigs/{campaign_id}~{goal_id}`
   */
  resourceName?: string;
}

/**
 * A campaign group.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignGroup {
  /**
   * Output only. The ID of the campaign group.
   */
  readonly id?: bigint;
  /**
   * The name of the campaign group. This field is required and should not be
   * empty when creating new campaign groups. It must not contain any null (code
   * point 0x0), NL line feed (code point 0xA) or carriage return (code point
   * 0xD) characters.
   */
  name?: string;
  /**
   * Immutable. The resource name of the campaign group. Campaign group
   * resource names have the form:
   * `customers/{customer_id}/campaignGroups/{campaign_group_id}`
   */
  resourceName?: string;
  /**
   * The status of the campaign group. When a new campaign group is added, the
   * status defaults to ENABLED.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * Represents a relationship between a campaign and a label.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignLabel {
  /**
   * Immutable. The campaign to which the label is attached.
   */
  campaign?: string;
  /**
   * Immutable. The label assigned to the campaign.
   */
  label?: string;
  /**
   * Output only. The ID of the Customer which owns the label.
   */
  readonly ownerCustomerId?: bigint;
  /**
   * Immutable. Name of the resource. Campaign label resource names have the
   * form:
   * `customers/{owner_customer_id}/campaignLabels/{campaign_id}~{label_id}`
   */
  resourceName?: string;
}

/**
 * Campaign level customer lifecycle goal settings.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignLifecycleGoal {
  /**
   * Output only. The campaign where the goal is attached.
   */
  readonly campaign?: string;
  /**
   * Output only. The customer acquisition goal settings for the campaign. The
   * customer acquisition goal is described in this article:
   * https://support.google.com/google-ads/answer/12080169
   */
  readonly customerAcquisitionGoalSettings?: GoogleAdsSearchads360V23Resources__CustomerAcquisitionGoalSettings;
  /**
   * Immutable. The resource name of the customer lifecycle goal of a campaign.
   * `customers/{customer_id}/campaignLifecycleGoal/{campaign_id}`
   */
  resourceName?: string;
}

/**
 * This report provides a high-level view of search demand at the campaign
 * level by grouping similar search terms into categories and showing their
 * search volume. Historical data is available starting March 2023.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignSearchTermInsight {
  /**
   * Output only. The ID of the campaign.
   */
  readonly campaignId?: bigint;
  /**
   * Output only. The label for the search category. An empty string denotes
   * the catch-all category for search terms that didn't fit into another
   * category.
   */
  readonly categoryLabel?: string;
  /**
   * Output only. The ID of the insight.
   */
  readonly id?: bigint;
  /**
   * Output only. The resource name of the campaign level search term insight.
   * Campaign level search term insight resource names have the form:
   * `customers/{customer_id}/campaignSearchTermInsights/{campaign_id}~{category_id}`
   */
  readonly resourceName?: string;
}

/**
 * This report provides granular performance data, including cost metrics, for
 * each individual search term that triggered your ads. If keyword-related
 * segments are used, Performance Max data will be excluded from the results.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignSearchTermView {
  /**
   * Output only. The campaign the search term served in.
   */
  readonly campaign?: string;
  /**
   * Output only. The resource name of the campaign search term view. Campaign
   * search term view resource names have the form:
   * `customers/{customer_id}/campaignSearchTermViews/{campaign_id}~{URL-base64_search_term}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The search term.
   */
  readonly searchTerm?: string;
}

/**
 * CampaignSharedSets are used for managing the shared sets associated with a
 * campaign.
 */
export interface GoogleAdsSearchads360V23Resources__CampaignSharedSet {
  /**
   * Immutable. The campaign to which the campaign shared set belongs.
   */
  campaign?: string;
  /**
   * Immutable. The resource name of the campaign shared set. Campaign shared
   * set resource names have the form:
   * `customers/{customer_id}/campaignSharedSets/{campaign_id}~{shared_set_id}`
   */
  resourceName?: string;
  /**
   * Immutable. The shared set associated with the campaign. This may be a
   * negative keyword shared set of another customer. This customer should be a
   * manager of the other customer, otherwise the campaign shared set will exist
   * but have no serving effect. Only negative keyword shared sets can be
   * associated with Shopping campaigns. Only negative placement shared sets can
   * be associated with Display mobile app campaigns.
   */
  sharedSet?: string;
  /**
   * Output only. The status of this campaign shared set. Read only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * A campaign simulation. Supported combinations of advertising channel type,
 * simulation type and simulation modification method is detailed below
 * respectively. * SEARCH - CPC_BID - UNIFORM * SEARCH - CPC_BID - SCALING *
 * SEARCH - TARGET_CPA - UNIFORM * SEARCH - TARGET_CPA - SCALING * SEARCH -
 * TARGET_ROAS - UNIFORM * SEARCH - TARGET_IMPRESSION_SHARE - UNIFORM * SEARCH -
 * BUDGET - UNIFORM * SHOPPING - BUDGET - UNIFORM * SHOPPING - TARGET_ROAS -
 * UNIFORM * MULTI_CHANNEL - TARGET_CPA - UNIFORM * MULTI_CHANNEL - TARGET_ROAS
 * - UNIFORM * DEMAND_GEN - TARGET_CPA - DEFAULT * DISPLAY - TARGET_CPA -
 * UNIFORM * PERFORMANCE_MAX - TARGET_CPA - UNIFORM * PERFORMANCE_MAX -
 * TARGET_ROAS - UNIFORM * PERFORMANCE_MAX - BUDGET - UNIFORM
 */
export interface GoogleAdsSearchads360V23Resources__CampaignSimulation {
  /**
   * Output only. Simulation points if the simulation type is BUDGET.
   */
  readonly budgetPointList?: GoogleAdsSearchads360V23Common__BudgetSimulationPointList;
  /**
   * Output only. Campaign id of the simulation.
   */
  readonly campaignId?: bigint;
  /**
   * Output only. Simulation points if the simulation type is CPC_BID.
   */
  readonly cpcBidPointList?: GoogleAdsSearchads360V23Common__CpcBidSimulationPointList;
  /**
   * Output only. Last day on which the simulation is based, in YYYY-MM-DD
   * format
   */
  readonly endDate?: string;
  /**
   * Output only. How the simulation modifies the field.
   */
  readonly modificationMethod?:  | "UNSPECIFIED" | "UNKNOWN" | "UNIFORM" | "DEFAULT" | "SCALING";
  /**
   * Output only. The resource name of the campaign simulation. Campaign
   * simulation resource names have the form:
   * `customers/{customer_id}/campaignSimulations/{campaign_id}~{type}~{modification_method}~{start_date}~{end_date}`
   */
  readonly resourceName?: string;
  /**
   * Output only. First day on which the simulation is based, in YYYY-MM-DD
   * format.
   */
  readonly startDate?: string;
  /**
   * Output only. Simulation points if the simulation type is TARGET_CPA.
   */
  readonly targetCpaPointList?: GoogleAdsSearchads360V23Common__TargetCpaSimulationPointList;
  /**
   * Output only. Simulation points if the simulation type is
   * TARGET_IMPRESSION_SHARE.
   */
  readonly targetImpressionSharePointList?: GoogleAdsSearchads360V23Common__TargetImpressionShareSimulationPointList;
  /**
   * Output only. Simulation points if the simulation type is TARGET_ROAS.
   */
  readonly targetRoasPointList?: GoogleAdsSearchads360V23Common__TargetRoasSimulationPointList;
  /**
   * Output only. The field that the simulation modifies.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CPC_BID" | "CPV_BID" | "TARGET_CPA" | "BID_MODIFIER" | "TARGET_ROAS" | "PERCENT_CPC_BID" | "TARGET_IMPRESSION_SHARE" | "BUDGET";
}

/**
 * A carrier criterion that can be used in campaign targeting.
 */
export interface GoogleAdsSearchads360V23Resources__CarrierConstant {
  /**
   * Output only. The country code of the country where the carrier is located,
   * for example, "AR", "FR", etc.
   */
  readonly countryCode?: string;
  /**
   * Output only. The ID of the carrier criterion.
   */
  readonly id?: bigint;
  /**
   * Output only. The full name of the carrier in English.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the carrier criterion. Carrier criterion
   * resource names have the form: `carrierConstants/{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * Cart data sales view. Provides information about the products which were
 * purchased if conversions with cart data is implemented. Performance metrics
 * like revenue, gross profit, lead/cross-sell metrics etc. and Merchant Center
 * attributes such as brand, category etc. are available for products defined in
 * an inventory feed and sold as a result of Google ads. For purchases
 * attributed to clicks on Shopping ads, dimensions of both clicked and sold
 * products can be viewed together.
 */
export interface GoogleAdsSearchads360V23Resources__CartDataSalesView {
  /**
   * Output only. The resource name of the Cart data sales view. Cart data
   * sales view resource names have the form:
   * `customers/{customer_id}/cartDataSalesView`
   */
  readonly resourceName?: string;
}

/**
 * Describes the granular change of returned resources of certain resource
 * types. Changes made through the UI or API in the past 30 days are included.
 * Previous and new values of the changed fields are shown. ChangeEvent could
 * have up to 3 minutes delay to reflect a new change.
 */
export interface GoogleAdsSearchads360V23Resources__ChangeEvent {
  /**
   * Output only. The AdGroup affected by this change.
   */
  readonly adGroup?: string;
  /**
   * Output only. The Asset affected by this change.
   */
  readonly asset?: string;
  /**
   * Output only. The Campaign affected by this change.
   */
  readonly campaign?: string;
  /**
   * Output only. Time at which the change was committed on this resource.
   */
  readonly changeDateTime?: string;
  /**
   * Output only. A list of fields that are changed in the returned resource.
   */
  readonly changedFields?: string /* FieldMask */;
  /**
   * Output only. The Simply resource this change occurred on.
   */
  readonly changeResourceName?: string;
  /**
   * Output only. The type of the changed resource. This dictates what resource
   * will be set in old_resource and new_resource.
   */
  readonly changeResourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "AD" | "AD_GROUP" | "AD_GROUP_CRITERION" | "CAMPAIGN" | "CAMPAIGN_BUDGET" | "AD_GROUP_BID_MODIFIER" | "CAMPAIGN_CRITERION" | "FEED" | "FEED_ITEM" | "CAMPAIGN_FEED" | "AD_GROUP_FEED" | "AD_GROUP_AD" | "ASSET" | "CUSTOMER_ASSET" | "CAMPAIGN_ASSET" | "AD_GROUP_ASSET" | "ASSET_SET" | "ASSET_SET_ASSET" | "CAMPAIGN_ASSET_SET";
  /**
   * Output only. Where the change was made through.
   */
  readonly clientType?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_ADS_WEB_CLIENT" | "GOOGLE_ADS_AUTOMATED_RULE" | "GOOGLE_ADS_SCRIPTS" | "GOOGLE_ADS_BULK_UPLOAD" | "GOOGLE_ADS_API" | "GOOGLE_ADS_EDITOR" | "GOOGLE_ADS_MOBILE_APP" | "GOOGLE_ADS_RECOMMENDATIONS" | "SEARCH_ADS_360_SYNC" | "SEARCH_ADS_360_POST" | "INTERNAL_TOOL" | "OTHER" | "GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION";
  /**
   * Output only. The new resource after the change. Only changed fields will
   * be populated.
   */
  readonly newResource?: GoogleAdsSearchads360V23Resources_ChangeEvent_ChangedResource;
  /**
   * Output only. The old resource before the change. Only changed fields will
   * be populated.
   */
  readonly oldResource?: GoogleAdsSearchads360V23Resources_ChangeEvent_ChangedResource;
  /**
   * Output only. The operation on the changed resource.
   */
  readonly resourceChangeOperation?:  | "UNSPECIFIED" | "UNKNOWN" | "CREATE" | "UPDATE" | "REMOVE";
  /**
   * Output only. The resource name of the change event. Change event resource
   * names have the form:
   * `customers/{customer_id}/changeEvents/{timestamp_micros}~{command_index}~{mutate_index}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The email of the user who made this change.
   */
  readonly userEmail?: string;
}

/**
 * Describes the status of returned resource. ChangeStatus could have up to 3
 * minutes delay to reflect a new change.
 */
export interface GoogleAdsSearchads360V23Resources__ChangeStatus {
  /**
   * Output only. The AdGroup affected by this change.
   */
  readonly adGroup?: string;
  /**
   * Output only. The AdGroupAd affected by this change.
   */
  readonly adGroupAd?: string;
  /**
   * Output only. The AdGroupAsset affected by this change.
   */
  readonly adGroupAsset?: string;
  /**
   * Output only. The AdGroupBidModifier affected by this change.
   */
  readonly adGroupBidModifier?: string;
  /**
   * Output only. The AdGroupCriterion affected by this change.
   */
  readonly adGroupCriterion?: string;
  /**
   * Output only. The Asset affected by this change.
   */
  readonly asset?: string;
  /**
   * Output only. The AssetGroup affected by this change.
   */
  readonly assetGroup?: string;
  /**
   * Output only. The AssetSet affected by this change.
   */
  readonly assetSet?: string;
  /**
   * Output only. The Campaign affected by this change.
   */
  readonly campaign?: string;
  /**
   * Output only. The CampaignAsset affected by this change.
   */
  readonly campaignAsset?: string;
  /**
   * Output only. The CampaignAssetSet affected by this change.
   */
  readonly campaignAssetSet?: string;
  /**
   * Output only. The CampaignBudget affected by this change.
   */
  readonly campaignBudget?: string;
  /**
   * Output only. The CampaignCriterion affected by this change.
   */
  readonly campaignCriterion?: string;
  /**
   * Output only. The CampaignSharedSet affected by this change.
   */
  readonly campaignSharedSet?: string;
  /**
   * Output only. The CombinedAudience affected by this change.
   */
  readonly combinedAudience?: string;
  /**
   * Output only. The CustomerAsset affected by this change.
   */
  readonly customerAsset?: string;
  /**
   * Output only. Time at which the most recent change has occurred on this
   * resource.
   */
  readonly lastChangeDateTime?: string;
  /**
   * Output only. The resource name of the change status. Change status
   * resource names have the form:
   * `customers/{customer_id}/changeStatus/{change_status_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Represents the status of the changed resource.
   */
  readonly resourceStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ADDED" | "CHANGED" | "REMOVED";
  /**
   * Output only. Represents the type of the changed resource. This dictates
   * what fields will be set. For example, for AD_GROUP, campaign and ad_group
   * fields will be set.
   */
  readonly resourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_GROUP" | "AD_GROUP_AD" | "AD_GROUP_CRITERION" | "CAMPAIGN" | "CAMPAIGN_CRITERION" | "CAMPAIGN_BUDGET" | "FEED" | "FEED_ITEM" | "AD_GROUP_FEED" | "CAMPAIGN_FEED" | "AD_GROUP_BID_MODIFIER" | "SHARED_SET" | "CAMPAIGN_SHARED_SET" | "ASSET" | "CUSTOMER_ASSET" | "CAMPAIGN_ASSET" | "AD_GROUP_ASSET" | "COMBINED_AUDIENCE" | "ASSET_GROUP" | "ASSET_SET" | "CAMPAIGN_ASSET_SET";
  /**
   * Output only. The SharedSet affected by this change.
   */
  readonly sharedSet?: string;
}

/**
 * A click view with metrics aggregated at each click level, including both
 * valid and invalid clicks. For non-Search campaigns, metrics.clicks represents
 * the number of valid and invalid interactions. Queries including ClickView
 * must have a filter limiting the results to one day and can be requested for
 * dates back to 90 days before the time of the request. GCLIDs are not
 * available in this report for App Campaigns for Installs (ACi) and App
 * Campaigns for Pre-registration (ACpre).
 */
export interface GoogleAdsSearchads360V23Resources__ClickView {
  /**
   * Output only. The associated ad.
   */
  readonly adGroupAd?: string;
  /**
   * Output only. The location criteria matching the area of interest
   * associated with the impression.
   */
  readonly areaOfInterest?: GoogleAdsSearchads360V23Common__ClickLocation;
  /**
   * Output only. The associated campaign location target, if one exists.
   */
  readonly campaignLocationTarget?: string;
  /**
   * Output only. The Google Click ID.
   */
  readonly gclid?: string;
  /**
   * Output only. The associated keyword, if one exists and the click
   * corresponds to the SEARCH channel.
   */
  readonly keyword?: string;
  /**
   * Output only. Basic information about the associated keyword, if it exists.
   */
  readonly keywordInfo?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Output only. The location criteria matching the location of presence
   * associated with the impression.
   */
  readonly locationOfPresence?: GoogleAdsSearchads360V23Common__ClickLocation;
  /**
   * Output only. Page number in search results where the ad was shown.
   */
  readonly pageNumber?: bigint;
  /**
   * Output only. The resource name of the click view. Click view resource
   * names have the form: `customers/{customer_id}/clickViews/{date
   * (yyyy-MM-dd)}~{gclid}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The associated user list, if one exists.
   */
  readonly userList?: string;
}

/**
 * Describe a resource for combined audiences which includes different
 * audiences.
 */
export interface GoogleAdsSearchads360V23Resources__CombinedAudience {
  /**
   * Output only. Description of this combined audience.
   */
  readonly description?: string;
  /**
   * Output only. ID of the combined audience.
   */
  readonly id?: bigint;
  /**
   * Output only. Name of the combined audience. It should be unique across all
   * combined audiences.
   */
  readonly name?: string;
  /**
   * Immutable. The resource name of the combined audience. Combined audience
   * names have the form:
   * `customers/{customer_id}/combinedAudience/{combined_audience_id}`
   */
  resourceName?: string;
  /**
   * Output only. Status of this combined audience. Indicates whether the
   * combined audience is enabled or removed.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * Fields containing consumer contact details.
 */
export interface GoogleAdsSearchads360V23Resources__ContactDetails {
  /**
   * Output only. Consumer name if consumer provided name from Message or
   * Booking form on google.com
   */
  readonly consumerName?: string;
  /**
   * Output only. Consumer email address.
   */
  readonly email?: string;
  /**
   * Output only. Phone number of the consumer for the lead. This can be a real
   * phone number or a tracking number. The phone number is returned in E164
   * format. See https://support.google.com/google-ads/answer/16355235?hl=en to
   * learn more. Example: +16504519489.
   */
  readonly phoneNumber?: string;
}

/**
 * A content criterion view.
 */
export interface GoogleAdsSearchads360V23Resources__ContentCriterionView {
  /**
   * Output only. The resource name of the content criterion view. Content
   * criterion view resource names have the form:
   * `customers/{customer_id}/contentCriterionViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A conversion.
 */
export interface GoogleAdsSearchads360V23Resources__Conversion {
  /**
   * Output only. Ad ID. A value of 0 indicates that the ad is unattributed.
   */
  readonly adId?: bigint;
  /**
   * Output only. For offline conversions, this is an ID provided by
   * advertisers. If an advertiser doesn't specify such an ID, Search Ads 360
   * generates one. For online conversions, this is equal to the id column or
   * the floodlight_order_id column depending on the advertiser's Floodlight
   * instructions.
   */
  readonly advertiserConversionId?: string;
  /**
   * Output only. Asset field type of the conversion event.
   */
  readonly assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. ID of the asset which was interacted with during the
   * conversion event.
   */
  readonly assetId?: bigint;
  /**
   * Output only. What the conversion is attributed to: Visit or Keyword+Ad.
   */
  readonly attributionType?:  | "UNSPECIFIED" | "UNKNOWN" | "VISIT" | "CRITERION_AD";
  /**
   * Output only. A unique string, for the visit that the conversion is
   * attributed to, that is passed to the landing page as the click id URL
   * parameter.
   */
  readonly clickId?: string;
  /**
   * Output only. The timestamp of the conversion event.
   */
  readonly conversionDateTime?: string;
  /**
   * Output only. The timestamp of the last time the conversion was modified.
   */
  readonly conversionLastModifiedDateTime?: string;
  /**
   * Output only. The quantity of items recorded by the conversion, as
   * determined by the qty url parameter. The advertiser is responsible for
   * dynamically populating the parameter (such as number of items sold in the
   * conversion), otherwise it defaults to 1.
   */
  readonly conversionQuantity?: bigint;
  /**
   * Output only. The adjusted revenue in micros for the conversion event. This
   * will always be in the currency of the serving account.
   */
  readonly conversionRevenueMicros?: bigint;
  /**
   * Output only. The timestamp of the visit that the conversion is attributed
   * to.
   */
  readonly conversionVisitDateTime?: string;
  /**
   * Output only. Search Ads 360 criterion ID. A value of 0 indicates that the
   * criterion is unattributed.
   */
  readonly criterionId?: bigint;
  /**
   * Output only. The Floodlight order ID provided by the advertiser for the
   * conversion.
   */
  readonly floodlightOrderId?: string;
  /**
   * Output only. The original, unchanged revenue associated with the
   * Floodlight event (in the currency of the current report), before Floodlight
   * currency instruction modifications.
   */
  readonly floodlightOriginalRevenue?: bigint;
  /**
   * Output only. The ID of the conversion
   */
  readonly id?: bigint;
  /**
   * Output only. The Search Ads 360 inventory account ID containing the
   * product that was clicked on. Search Ads 360 generates this ID when you link
   * an inventory account in Search Ads 360.
   */
  readonly merchantId?: bigint;
  /**
   * Output only. The sales channel of the product that was clicked on: Online
   * or Local.
   */
  readonly productChannel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
  /**
   * Output only. The country (ISO-3166-format) registered for the inventory
   * feed that contains the product clicked on.
   */
  readonly productCountryCode?: string;
  /**
   * Output only. The ID of the product clicked on.
   */
  readonly productId?: string;
  /**
   * Output only. The language (ISO-639-1) that has been set for the Merchant
   * Center feed containing data about the product.
   */
  readonly productLanguageCode?: string;
  /**
   * Output only. The store in the Local Inventory Ad that was clicked on. This
   * should match the store IDs used in your local products feed.
   */
  readonly productStoreId?: string;
  /**
   * Output only. The resource name of the conversion. Conversion resource
   * names have the form:
   * `customers/{customer_id}/conversions/{ad_group_id}~{criterion_id}~{ds_conversion_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The status of the conversion, either ENABLED or REMOVED..
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Output only. The Search Ads 360 visit ID that the conversion is attributed
   * to.
   */
  readonly visitId?: bigint;
}

/**
 * A conversion action.
 */
export interface GoogleAdsSearchads360V23Resources__ConversionAction {
  /**
   * App ID for an app conversion action.
   */
  appId?: string;
  /**
   * Settings related to this conversion action's attribution model.
   */
  attributionModelSettings?: GoogleAdsSearchads360V23Resources_ConversionAction_AttributionModelSettings;
  /**
   * The category of conversions reported for this conversion action.
   */
  category?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT" | "PAGE_VIEW" | "PURCHASE" | "SIGNUP" | "DOWNLOAD" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "SUBSCRIBE_PAID" | "PHONE_CALL_LEAD" | "IMPORTED_LEAD" | "SUBMIT_LEAD_FORM" | "BOOK_APPOINTMENT" | "REQUEST_QUOTE" | "GET_DIRECTIONS" | "OUTBOUND_CLICK" | "CONTACT" | "ENGAGEMENT" | "STORE_VISIT" | "STORE_SALE" | "QUALIFIED_LEAD" | "CONVERTED_LEAD";
  /**
   * The maximum number of days that may elapse between an interaction (for
   * example, a click) and a conversion event.
   */
  clickThroughLookbackWindowDays?: bigint;
  /**
   * How to count conversion events for the conversion action.
   */
  countingType?:  | "UNSPECIFIED" | "UNKNOWN" | "ONE_PER_CLICK" | "MANY_PER_CLICK";
  /**
   * Output only. Timestamp of the Floodlight activity's creation, formatted in
   * ISO 8601.
   */
  readonly creationTime?: string;
  /**
   * Output only. Firebase settings for Firebase conversion types.
   */
  readonly firebaseSettings?: GoogleAdsSearchads360V23Resources_ConversionAction_FirebaseSettings;
  /**
   * Output only. Floodlight settings for Floodlight conversion types.
   */
  readonly floodlightSettings?: GoogleAdsSearchads360V23Resources_ConversionAction_FloodlightSettings;
  /**
   * Output only. Google Analytics 4 settings for Google Analytics 4 conversion
   * types.
   */
  readonly googleAnalytics4Settings?: GoogleAdsSearchads360V23Resources_ConversionAction_GoogleAnalytics4Settings;
  /**
   * Output only. The ID of the conversion action.
   */
  readonly id?: bigint;
  /**
   * Whether this conversion action should be included in the
   * "client_account_conversions" metric.
   */
  includeInClientAccountConversionsMetric?: boolean;
  /**
   * Output only. Whether this conversion action should be included in the
   * "conversions" metric.
   */
  readonly includeInConversionsMetric?: boolean;
  /**
   * Output only. Mobile app vendor for an app conversion action.
   */
  readonly mobileAppVendor?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLE_APP_STORE" | "GOOGLE_APP_STORE";
  /**
   * The name of the conversion action. This field is required and should not
   * be empty when creating new conversion actions.
   */
  name?: string;
  /**
   * Output only. The conversion origin of this conversion action.
   */
  readonly origin?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "GOOGLE_HOSTED" | "APP" | "CALL_FROM_ADS" | "STORE" | "YOUTUBE_HOSTED" | "FLOODLIGHT";
  /**
   * Output only. The resource name of the conversion action owner customer, or
   * null if this is a system-defined conversion action.
   */
  readonly ownerCustomer?: string;
  /**
   * The phone call duration in seconds after which a conversion should be
   * reported for this conversion action. The value must be between 0 and 10000,
   * inclusive.
   */
  phoneCallDurationSeconds?: bigint;
  /**
   * If a conversion action's primary_for_goal bit is false, the conversion
   * action is non-biddable for all campaigns regardless of their customer
   * conversion goal or campaign conversion goal. However, custom conversion
   * goals do not respect primary_for_goal, so if a campaign has a custom
   * conversion goal configured with a primary_for_goal = false conversion
   * action, that conversion action is still biddable. By default,
   * primary_for_goal will be true if not set. In V9, primary_for_goal can only
   * be set to false after creation through an 'update' operation because it's
   * not declared as optional.
   */
  primaryForGoal?: boolean;
  /**
   * Immutable. The resource name of the conversion action. Conversion action
   * resource names have the form:
   * `customers/{customer_id}/conversionActions/{conversion_action_id}`
   */
  resourceName?: string;
  /**
   * The status of this conversion action for conversion event accrual.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "HIDDEN";
  /**
   * Output only. The snippets used for tracking conversions.
   */
  readonly tagSnippets?: GoogleAdsSearchads360V23Common__TagSnippet[];
  /**
   * Output only. Third Party App Analytics settings for third party conversion
   * types.
   */
  readonly thirdPartyAppAnalyticsSettings?: GoogleAdsSearchads360V23Resources_ConversionAction_ThirdPartyAppAnalyticsSettings;
  /**
   * Immutable. The type of this conversion action.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "AD_CALL" | "CLICK_TO_CALL" | "GOOGLE_PLAY_DOWNLOAD" | "GOOGLE_PLAY_IN_APP_PURCHASE" | "UPLOAD_CALLS" | "UPLOAD_CLICKS" | "WEBPAGE" | "WEBSITE_CALL" | "STORE_SALES_DIRECT_UPLOAD" | "STORE_SALES" | "FIREBASE_ANDROID_FIRST_OPEN" | "FIREBASE_ANDROID_IN_APP_PURCHASE" | "FIREBASE_ANDROID_CUSTOM" | "FIREBASE_IOS_FIRST_OPEN" | "FIREBASE_IOS_IN_APP_PURCHASE" | "FIREBASE_IOS_CUSTOM" | "THIRD_PARTY_APP_ANALYTICS_ANDROID_FIRST_OPEN" | "THIRD_PARTY_APP_ANALYTICS_ANDROID_IN_APP_PURCHASE" | "THIRD_PARTY_APP_ANALYTICS_ANDROID_CUSTOM" | "THIRD_PARTY_APP_ANALYTICS_IOS_FIRST_OPEN" | "THIRD_PARTY_APP_ANALYTICS_IOS_IN_APP_PURCHASE" | "THIRD_PARTY_APP_ANALYTICS_IOS_CUSTOM" | "ANDROID_APP_PRE_REGISTRATION" | "ANDROID_INSTALLS_ALL_OTHER_APPS" | "FLOODLIGHT_ACTION" | "FLOODLIGHT_TRANSACTION" | "GOOGLE_HOSTED" | "LEAD_FORM_SUBMIT" | "SALESFORCE" | "SEARCH_ADS_360" | "SMART_CAMPAIGN_AD_CLICKS_TO_CALL" | "SMART_CAMPAIGN_MAP_CLICKS_TO_CALL" | "SMART_CAMPAIGN_MAP_DIRECTIONS" | "SMART_CAMPAIGN_TRACKED_CALLS" | "STORE_VISITS" | "WEBPAGE_CODELESS" | "UNIVERSAL_ANALYTICS_GOAL" | "UNIVERSAL_ANALYTICS_TRANSACTION" | "GOOGLE_ANALYTICS_4_CUSTOM" | "GOOGLE_ANALYTICS_4_PURCHASE";
  /**
   * Settings related to the value for conversion events associated with this
   * conversion action.
   */
  valueSettings?: GoogleAdsSearchads360V23Resources_ConversionAction_ValueSettings;
  /**
   * The maximum number of days which may elapse between an impression and a
   * conversion without an interaction.
   */
  viewThroughLookbackWindowDays?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources__ConversionAction(data: any): GoogleAdsSearchads360V23Resources__ConversionAction {
  return {
    ...data,
    clickThroughLookbackWindowDays: data["clickThroughLookbackWindowDays"] !== undefined ? String(data["clickThroughLookbackWindowDays"]) : undefined,
    phoneCallDurationSeconds: data["phoneCallDurationSeconds"] !== undefined ? String(data["phoneCallDurationSeconds"]) : undefined,
    viewThroughLookbackWindowDays: data["viewThroughLookbackWindowDays"] !== undefined ? String(data["viewThroughLookbackWindowDays"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__ConversionAction(data: any): GoogleAdsSearchads360V23Resources__ConversionAction {
  return {
    ...data,
    clickThroughLookbackWindowDays: data["clickThroughLookbackWindowDays"] !== undefined ? BigInt(data["clickThroughLookbackWindowDays"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    phoneCallDurationSeconds: data["phoneCallDurationSeconds"] !== undefined ? BigInt(data["phoneCallDurationSeconds"]) : undefined,
    viewThroughLookbackWindowDays: data["viewThroughLookbackWindowDays"] !== undefined ? BigInt(data["viewThroughLookbackWindowDays"]) : undefined,
  };
}

/**
 * A conversion custom variable. See "About custom Floodlight metrics and
 * dimensions in the new Search Ads 360" at
 * https://support.google.com/sa360/answer/13567857
 */
export interface GoogleAdsSearchads360V23Resources__ConversionCustomVariable {
  /**
   * Output only. Cardinality of the conversion custom variable.
   */
  readonly cardinality?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_ALL_LIMITS" | "EXCEEDS_SEGMENTATION_LIMIT_BUT_NOT_STATS_LIMIT" | "APPROACHES_STATS_LIMIT" | "EXCEEDS_STATS_LIMIT";
  /**
   * Output only. The IDs of custom columns that use this conversion custom
   * variable.
   */
  readonly customColumnIds?: bigint[];
  /**
   * Output only. Family of the conversion custom variable.
   */
  readonly family?:  | "UNSPECIFIED" | "UNKNOWN" | "STANDARD" | "FLOODLIGHT";
  /**
   * Output only. Fields for Search Ads 360 floodlight conversion custom
   * variables.
   */
  readonly floodlightConversionCustomVariableInfo?: GoogleAdsSearchads360V23Resources_ConversionCustomVariable_FloodlightConversionCustomVariableInfo;
  /**
   * Output only. The ID of the conversion custom variable.
   */
  readonly id?: bigint;
  /**
   * Required. The name of the conversion custom variable. Name should be
   * unique. The maximum length of name is 100 characters. There should not be
   * any extra spaces before and after.
   */
  name?: string;
  /**
   * Output only. The resource name of the customer that owns the conversion
   * custom variable.
   */
  readonly ownerCustomer?: string;
  /**
   * Immutable. The resource name of the conversion custom variable. Conversion
   * custom variable resource names have the form:
   * `customers/{customer_id}/conversionCustomVariables/{conversion_custom_variable_id}`
   */
  resourceName?: string;
  /**
   * The status of the conversion custom variable for conversion event accrual.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ACTIVATION_NEEDED" | "ENABLED" | "PAUSED";
  /**
   * Required. Immutable. The tag of the conversion custom variable. Tag should
   * be unique and consist of a "u" character directly followed with a number
   * less than ormequal to 100. For example: "u4".
   */
  tag?: string;
}

/**
 * Conversion goal settings for a Campaign.
 */
export interface GoogleAdsSearchads360V23Resources__ConversionGoalCampaignConfig {
  /**
   * Immutable. The campaign with which this conversion goal campaign config is
   * associated.
   */
  campaign?: string;
  /**
   * The custom conversion goal the campaign is using for optimization.
   */
  customConversionGoal?: string;
  /**
   * The level of goal config the campaign is using.
   */
  goalConfigLevel?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN";
  /**
   * Immutable. The resource name of the conversion goal campaign config.
   * Conversion goal campaign config resource names have the form:
   * `customers/{customer_id}/conversionGoalCampaignConfigs/{campaign_id}`
   */
  resourceName?: string;
  /**
   * The Search Ads 360 custom conversion goal the campaign is using for
   * optimization.
   */
  searchAds360CustomConversionGoal?: string;
  /**
   * The level of Search Ads 360 goal config the campaign is using.
   */
  searchAds360GoalConfigLevel?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN";
}

/**
 * A collection of customer-wide settings related to Search Ads 360 Conversion
 * Tracking.
 */
export interface GoogleAdsSearchads360V23Resources__ConversionTrackingSetting {
  /**
   * Output only. Whether the customer has accepted customer data terms. If
   * using cross-account conversion tracking, this value is inherited from the
   * manager. This field is read-only. For more information, see
   * https://support.google.com/adspolicy/answer/7475709.
   */
  readonly acceptedCustomerDataTerms?: boolean;
  /**
   * Output only. The conversion tracking id used for this account. This id
   * doesn't indicate whether the customer uses conversion tracking
   * (conversion_tracking_status does). This field is read-only.
   */
  readonly conversionTrackingId?: bigint;
  /**
   * Output only. Conversion tracking status. It indicates whether the customer
   * is using conversion tracking, and who is the conversion tracking owner of
   * this customer. If this customer is using cross-account conversion tracking,
   * the value returned will differ based on the `login-customer-id` of the
   * request.
   */
  readonly conversionTrackingStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_CONVERSION_TRACKED" | "CONVERSION_TRACKING_MANAGED_BY_SELF" | "CONVERSION_TRACKING_MANAGED_BY_THIS_MANAGER" | "CONVERSION_TRACKING_MANAGED_BY_ANOTHER_MANAGER";
  /**
   * Output only. The conversion tracking id of the customer's manager. This is
   * set when the customer is opted into cross-account conversion tracking, and
   * it overrides conversion_tracking_id.
   */
  readonly crossAccountConversionTrackingId?: bigint;
  /**
   * Output only. Whether the customer is opted-in for enhanced conversions for
   * leads. If using cross-account conversion tracking, this value is inherited
   * from the manager. This field is read-only.
   */
  readonly enhancedConversionsForLeadsEnabled?: boolean;
  /**
   * The resource name of the customer where conversions are created and
   * managed. This field is read-only.
   */
  googleAdsConversionCustomer?: string;
  /**
   * Output only. The conversion tracking id of the customer's manager. This is
   * set when the customer is opted into conversion tracking, and it overrides
   * conversion_tracking_id. This field can only be managed through the Google
   * Ads UI. This field is read-only.
   */
  readonly googleAdsCrossAccountConversionTrackingId?: bigint;
}

/**
 * A conversion value rule
 */
export interface GoogleAdsSearchads360V23Resources__ConversionValueRule {
  /**
   * Action applied when the rule is triggered.
   */
  action?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleAction;
  /**
   * Condition for audience that must be satisfied for the value rule to apply.
   */
  audienceCondition?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleAudienceCondition;
  /**
   * Condition for device type that must be satisfied for the value rule to
   * apply.
   */
  deviceCondition?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleDeviceCondition;
  /**
   * Condition for Geo location that must be satisfied for the value rule to
   * apply.
   */
  geoLocationCondition?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleGeoLocationCondition;
  /**
   * Output only. The ID of the conversion value rule.
   */
  readonly id?: bigint;
  /**
   * Condition for itinerary that must be satisfied for the value rule to
   * apply.
   */
  itineraryCondition?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryCondition;
  /**
   * Output only. The resource name of the conversion value rule's owner
   * customer. When the value rule is inherited from a manager customer,
   * owner_customer will be the resource name of the manager whereas the
   * customer in the resource_name will be of the requesting serving customer.
   * ** Read-only **
   */
  readonly ownerCustomer?: string;
  /**
   * Immutable. The resource name of the conversion value rule. Conversion
   * value rule resource names have the form:
   * `customers/{customer_id}/conversionValueRules/{conversion_value_rule_id}`
   */
  resourceName?: string;
  /**
   * The status of the conversion value rule.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * A conversion value rule set is a collection of conversion value rules that
 * lets you adjust conversion values based on the dimensions specified in the
 * `dimensions` field.
 */
export interface GoogleAdsSearchads360V23Resources__ConversionValueRuleSet {
  /**
   * Immutable. Defines the scope where the conversion value rule set is
   * attached.
   */
  attachmentType?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN";
  /**
   * The resource name of the campaign when the conversion value rule set is
   * attached to a campaign.
   */
  campaign?: string;
  /**
   * Immutable. The conversion action categories of the conversion value rule
   * set.
   */
  conversionActionCategories?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT" | "PAGE_VIEW" | "PURCHASE" | "SIGNUP" | "DOWNLOAD" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "SUBSCRIBE_PAID" | "PHONE_CALL_LEAD" | "IMPORTED_LEAD" | "SUBMIT_LEAD_FORM" | "BOOK_APPOINTMENT" | "REQUEST_QUOTE" | "GET_DIRECTIONS" | "OUTBOUND_CLICK" | "CONTACT" | "ENGAGEMENT" | "STORE_VISIT" | "STORE_SALE" | "QUALIFIED_LEAD" | "CONVERTED_LEAD"[];
  /**
   * Resource names of rules within the rule set.
   */
  conversionValueRules?: string[];
  /**
   * Defines dimensions for Value Rule conditions. The condition types of value
   * rules within this value rule set must be of these dimensions. The first
   * entry in this list is the primary dimension of the included value rules.
   * When using value rule primary dimension segmentation, conversion values
   * will be segmented into the values adjusted by value rules and the original
   * values, if some value rules apply.
   */
  dimensions?:  | "UNSPECIFIED" | "UNKNOWN" | "GEO_LOCATION" | "DEVICE" | "AUDIENCE" | "NO_CONDITION" | "ITINERARY"[];
  /**
   * Output only. The ID of the conversion value rule set.
   */
  readonly id?: bigint;
  /**
   * Output only. The resource name of the conversion value rule set's owner
   * customer. When the value rule set is inherited from a manager customer,
   * owner_customer will be the resource name of the manager whereas the
   * customer in the resource_name will be of the requesting serving customer.
   * ** Read-only **
   */
  readonly ownerCustomer?: string;
  /**
   * Immutable. The resource name of the conversion value rule set. Conversion
   * value rule set resource names have the form:
   * `customers/{customer_id}/conversionValueRuleSets/{conversion_value_rule_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the conversion value rule set. ** Read-only **
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * Represents the credit details of a lead.
 */
export interface GoogleAdsSearchads360V23Resources__CreditDetails {
  /**
   * Output only. Credit state of the lead.
   */
  readonly creditState?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "CREDITED";
  /**
   * Output only. The date time when the credit state of the lead was last
   * updated. The format is "YYYY-MM-DD HH:MM:SS" in the Google Ads account's
   * timezone. Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly creditStateLastUpdateDateTime?: string;
}

/**
 * A currency constant.
 */
export interface GoogleAdsSearchads360V23Resources__CurrencyConstant {
  /**
   * Output only. The billable unit for this currency. Billed amounts should be
   * multiples of this value.
   */
  readonly billableUnitMicros?: bigint;
  /**
   * Output only. ISO 4217 three-letter currency code, for example, "USD"
   */
  readonly code?: string;
  /**
   * Output only. Full English name of the currency.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the currency constant. Currency constant
   * resource names have the form: `currencyConstants/{code}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Standard symbol for describing this currency, for example,
   * '$' for US Dollars.
   */
  readonly symbol?: string;
}

/**
 * A custom audience. This is a list of users by interest. The unique key of a
 * custom audience consists of the following fields: name. Violating the unique
 * key constraint produces error: CustomAudienceError.NAME_ALREADY_USED
 */
export interface GoogleAdsSearchads360V23Resources__CustomAudience {
  /**
   * Description of this custom audience.
   */
  description?: string;
  /**
   * Output only. ID of the custom audience.
   */
  readonly id?: bigint;
  /**
   * List of custom audience members that this custom audience is composed of.
   * Members can be added during CustomAudience creation. If members are
   * presented in UPDATE operation, existing members will be overridden.
   */
  members?: GoogleAdsSearchads360V23Resources__CustomAudienceMember[];
  /**
   * Name of the custom audience. It should be unique for all custom audiences
   * created by a customer. This field is required for creating operations.
   */
  name?: string;
  /**
   * Immutable. The resource name of the custom audience. Custom audience
   * resource names have the form:
   * `customers/{customer_id}/customAudiences/{custom_audience_id}`
   */
  resourceName?: string;
  /**
   * Output only. Status of this custom audience. Indicates whether the custom
   * audience is enabled or removed.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Type of the custom audience. ("INTEREST" OR "PURCHASE_INTENT" is not
   * allowed for newly created custom audience but kept for existing audiences)
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "AUTO" | "INTEREST" | "PURCHASE_INTENT" | "SEARCH";
}

function serializeGoogleAdsSearchads360V23Resources__CustomAudience(data: any): GoogleAdsSearchads360V23Resources__CustomAudience {
  return {
    ...data,
    members: data["members"] !== undefined ? data["members"].map((item: any) => (serializeGoogleAdsSearchads360V23Resources__CustomAudienceMember(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__CustomAudience(data: any): GoogleAdsSearchads360V23Resources__CustomAudience {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    members: data["members"] !== undefined ? data["members"].map((item: any) => (deserializeGoogleAdsSearchads360V23Resources__CustomAudienceMember(item))) : undefined,
  };
}

/**
 * A member of custom audience. A member can be a KEYWORD, URL, PLACE_CATEGORY
 * or APP. It can only be created or removed but not changed.
 */
export interface GoogleAdsSearchads360V23Resources__CustomAudienceMember {
  /**
   * A package name of Android apps which users installed such as
   * com.google.example.
   */
  app?: string;
  /**
   * A keyword or keyword phrase — at most 10 words and 80 characters.
   * Languages with double-width characters such as Chinese, Japanese, or
   * Korean, are allowed 40 characters, which describes the user's interests or
   * actions.
   */
  keyword?: string;
  /**
   * The type of custom audience member, KEYWORD, URL, PLACE_CATEGORY or APP.
   */
  memberType?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "URL" | "PLACE_CATEGORY" | "APP";
  /**
   * A place type described by a place category users visit.
   */
  placeCategory?: bigint;
  /**
   * An HTTP URL, protocol-included — at most 2048 characters, which includes
   * contents users have interests in.
   */
  url?: string;
}

function serializeGoogleAdsSearchads360V23Resources__CustomAudienceMember(data: any): GoogleAdsSearchads360V23Resources__CustomAudienceMember {
  return {
    ...data,
    placeCategory: data["placeCategory"] !== undefined ? String(data["placeCategory"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__CustomAudienceMember(data: any): GoogleAdsSearchads360V23Resources__CustomAudienceMember {
  return {
    ...data,
    placeCategory: data["placeCategory"] !== undefined ? BigInt(data["placeCategory"]) : undefined,
  };
}

/**
 * A custom column. See Search Ads 360 custom column at
 * https://support.google.com/sa360/answer/9633916
 */
export interface GoogleAdsSearchads360V23Resources__CustomColumn {
  /**
   * Output only. User-defined description of the custom column.
   */
  readonly description?: string;
  /**
   * Output only. ID of the custom column.
   */
  readonly id?: bigint;
  /**
   * Output only. User-defined name of the custom column.
   */
  readonly name?: string;
  /**
   * Output only. True when the custom column is available to be used in the
   * query of SearchAds360Service.Search and SearchAds360Service.SearchStream.
   */
  readonly queryable?: boolean;
  /**
   * Output only. The list of the referenced system columns of this custom
   * column. For example, A custom column "sum of impressions and clicks" has
   * referenced system columns of {"metrics.clicks", "metrics.impressions"}.
   */
  readonly referencedSystemColumns?: string[];
  /**
   * Output only. True when the custom column is referring to one or more
   * attributes.
   */
  readonly referencesAttributes?: boolean;
  /**
   * Output only. True when the custom column is referring to one or more
   * metrics.
   */
  readonly referencesMetrics?: boolean;
  /**
   * Output only. How the result value of the custom column should be
   * interpreted.
   */
  readonly renderType?:  | "UNSPECIFIED" | "UNKNOWN" | "NUMBER" | "PERCENT" | "MONEY" | "STRING" | "BOOLEAN" | "DATE";
  /**
   * Immutable. The resource name of the custom column. Custom column resource
   * names have the form:
   * `customers/{customer_id}/customColumns/{custom_column_id}`
   */
  resourceName?: string;
  /**
   * Output only. The type of the result value of the custom column.
   */
  readonly valueType?:  | "UNSPECIFIED" | "UNKNOWN" | "STRING" | "INT64" | "DOUBLE" | "BOOLEAN" | "DATE";
}

/**
 * Custom conversion goal that can make arbitrary conversion actions biddable.
 */
export interface GoogleAdsSearchads360V23Resources__CustomConversionGoal {
  /**
   * Conversion actions that the custom conversion goal makes biddable.
   */
  conversionActions?: string[];
  /**
   * Immutable. The ID for this custom conversion goal.
   */
  id?: bigint;
  /**
   * The name for this custom conversion goal.
   */
  name?: string;
  /**
   * Immutable. The resource name of the custom conversion goal. Custom
   * conversion goal resource names have the form:
   * `customers/{customer_id}/customConversionGoals/{goal_id}`
   */
  resourceName?: string;
  /**
   * The status of the custom conversion goal.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

function serializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data: any): GoogleAdsSearchads360V23Resources__CustomConversionGoal {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data: any): GoogleAdsSearchads360V23Resources__CustomConversionGoal {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A customer.
 */
export interface GoogleAdsSearchads360V23Resources__Customer {
  /**
   * Output only. The account level of the customer: Manager, Sub-manager,
   * Associate manager, Service account.
   */
  readonly accountLevel?:  | "UNSPECIFIED" | "UNKNOWN" | "CLIENT_ACCOUNT_FACEBOOK" | "CLIENT_ACCOUNT_GOOGLE_ADS" | "CLIENT_ACCOUNT_MICROSOFT" | "CLIENT_ACCOUNT_YAHOO_JAPAN" | "CLIENT_ACCOUNT_ENGINE_TRACK" | "MANAGER" | "SUB_MANAGER" | "ASSOCIATE_MANAGER";
  /**
   * Output only. Account status, for example, Enabled, Paused, Removed, etc.
   */
  readonly accountStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED" | "SUSPENDED" | "REMOVED" | "DRAFT";
  /**
   * Output only. Engine account type, for example, Google Ads, Microsoft
   * Advertising, Yahoo Japan, Baidu, Facebook, Engine Track, etc.
   */
  readonly accountType?:  | "UNSPECIFIED" | "UNKNOWN" | "BAIDU" | "ENGINE_TRACK" | "FACEBOOK" | "FACEBOOK_GATEWAY" | "GOOGLE_ADS" | "MICROSOFT" | "SEARCH_ADS_360" | "YAHOO_JAPAN";
  /**
   * Output only. The descriptive name of the associate manager.
   */
  readonly associateManagerDescriptiveName?: string;
  /**
   * Output only. The customer ID of the associate manager. A 0 value indicates
   * that the customer has no SA360 associate manager.
   */
  readonly associateManagerId?: bigint;
  /**
   * Whether auto-tagging is enabled for the customer.
   */
  autoTaggingEnabled?: boolean;
  /**
   * Call reporting setting for a customer.
   */
  callReportingSetting?: GoogleAdsSearchads360V23Resources__CallReportingSetting;
  /**
   * Output only. Returns the advertiser self-declaration status of whether
   * this customer contains political advertising content targeted towards the
   * European Union. You can use the Google Ads UI to update this account-level
   * declaration, or use the API to update the self-declaration status of
   * individual campaigns.
   */
  readonly containsEuPoliticalAdvertising?:  | "UNSPECIFIED" | "UNKNOWN" | "CONTAINS_EU_POLITICAL_ADVERTISING" | "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING";
  /**
   * Conversion tracking setting for a customer.
   */
  conversionTrackingSetting?: GoogleAdsSearchads360V23Resources__ConversionTrackingSetting;
  /**
   * Output only. The timestamp when this customer was created. The timestamp
   * is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss" format.
   */
  readonly creationTime?: string;
  /**
   * Immutable. The currency in which the account operates. A subset of the
   * currency codes from the ISO 4217 standard is supported.
   */
  currencyCode?: string;
  /**
   * Output only. Customer Agreement Setting for a customer.
   */
  readonly customerAgreementSetting?: GoogleAdsSearchads360V23Resources__CustomerAgreementSetting;
  /**
   * Optional, non-unique descriptive name of the customer.
   */
  descriptiveName?: string;
  /**
   * Output only. DoubleClick Campaign Manager (DCM) setting for a manager
   * customer.
   */
  readonly doubleClickCampaignManagerSetting?: GoogleAdsSearchads360V23Resources__DoubleClickCampaignManagerSetting;
  /**
   * Output only. ID of the account in the external engine account.
   */
  readonly engineId?: string;
  /**
   * The URL template for appending params to the final URL.
   */
  finalUrlSuffix?: string;
  /**
   * Output only. Whether the Customer has a Partners program badge. If the
   * Customer is not associated with the Partners program, this will be false.
   * For more information, see
   * https://support.google.com/partners/answer/3125774.
   */
  readonly hasPartnersBadge?: boolean;
  /**
   * Output only. The ID of the customer.
   */
  readonly id?: bigint;
  /**
   * Output only. True if feed based image has been migrated to asset based
   * image.
   */
  readonly imageAssetAutoMigrationDone?: boolean;
  /**
   * Output only. Timestamp of migration from feed based image to asset base
   * image in yyyy-MM-dd HH:mm:ss format.
   */
  readonly imageAssetAutoMigrationDoneDateTime?: string;
  /**
   * Output only. The datetime when this customer was last modified. The
   * datetime is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss.ssssss"
   * format.
   */
  readonly lastModifiedTime?: string;
  /**
   * Output only. Settings for Local Services customer.
   */
  readonly localServicesSettings?: GoogleAdsSearchads360V23Resources__LocalServicesSettings;
  /**
   * Output only. True if feed based location has been migrated to asset based
   * location.
   */
  readonly locationAssetAutoMigrationDone?: boolean;
  /**
   * Output only. Timestamp of migration from feed based location to asset base
   * location in yyyy-MM-dd HH:mm:ss format.
   */
  readonly locationAssetAutoMigrationDoneDateTime?: string;
  /**
   * Output only. Whether the customer is a manager.
   */
  readonly manager?: boolean;
  /**
   * Output only. The descriptive name of the manager.
   */
  readonly managerDescriptiveName?: string;
  /**
   * Output only. The customer ID of the manager. A 0 value indicates that the
   * customer has no SA360 manager.
   */
  readonly managerId?: bigint;
  /**
   * Output only. Optimization score of the customer. Optimization score is an
   * estimate of how well a customer's campaigns are set to perform. It ranges
   * from 0% (0.0) to 100% (1.0). This field is null for all manager customers,
   * and for unscored non-manager customers. See "About optimization score" at
   * https://support.google.com/google-ads/answer/9061546. This field is
   * read-only.
   */
  readonly optimizationScore?: number;
  /**
   * Output only. Optimization score weight of the customer. Optimization score
   * weight can be used to compare/aggregate optimization scores across multiple
   * non-manager customers. The aggregate optimization score of a manager is
   * computed as the sum over all of their customers of
   * `Customer.optimization_score * Customer.optimization_score_weight`. This
   * field is 0 for all manager customers, and for unscored non-manager
   * customers. This field is read-only.
   */
  readonly optimizationScoreWeight?: number;
  /**
   * Output only. Reasons why the customer is not eligible to use
   * PaymentMode.CONVERSIONS. If the list is empty, the customer is eligible.
   * This field is read-only.
   */
  readonly payPerConversionEligibilityFailureReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_ENOUGH_CONVERSIONS" | "CONVERSION_LAG_TOO_HIGH" | "HAS_CAMPAIGN_WITH_SHARED_BUDGET" | "HAS_UPLOAD_CLICKS_CONVERSION" | "AVERAGE_DAILY_SPEND_TOO_HIGH" | "ANALYSIS_NOT_COMPLETE" | "OTHER"[];
  /**
   * Output only. Remarketing setting for a customer.
   */
  readonly remarketingSetting?: GoogleAdsSearchads360V23Resources__RemarketingSetting;
  /**
   * Immutable. The resource name of the customer. Customer resource names have
   * the form: `customers/{customer_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the customer.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "CANCELED" | "SUSPENDED" | "CLOSED";
  /**
   * Output only. The descriptive name of the sub manager.
   */
  readonly subManagerDescriptiveName?: string;
  /**
   * Output only. The customer ID of the sub manager. A 0 value indicates that
   * the customer has no sub SA360 manager.
   */
  readonly subManagerId?: bigint;
  /**
   * Output only. Whether the customer is a test account.
   */
  readonly testAccount?: boolean;
  /**
   * Immutable. The local timezone ID of the customer.
   */
  timeZone?: string;
  /**
   * The URL template for constructing a tracking URL out of parameters.
   */
  trackingUrlTemplate?: string;
  /**
   * Brand Safety setting at the account level. Allows for selecting an
   * inventory type to show your ads on content that is the right fit for your
   * brand. See https://support.google.com/google-ads/answer/7515513.
   */
  videoBrandSafetySuitability?:  | "UNSPECIFIED" | "UNKNOWN" | "EXPANDED_INVENTORY" | "STANDARD_INVENTORY" | "LIMITED_INVENTORY";
  /**
   * Video specific information about a Customer.
   */
  videoCustomer?: GoogleAdsSearchads360V23Resources__VideoCustomer;
}

/**
 * The customer acquisition goal settings for the campaign.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerAcquisitionGoalSettings {
  /**
   * Output only. Customer acquisition optimization mode of this campaign.
   */
  readonly optimizationMode?:  | "UNSPECIFIED" | "UNKNOWN" | "TARGET_ALL_EQUALLY" | "BID_HIGHER_FOR_NEW_CUSTOMER" | "TARGET_NEW_CUSTOMER";
  /**
   * Output only. Campaign specific values for the customer acquisition goal.
   */
  readonly valueSettings?: GoogleAdsSearchads360V23Common__LifecycleGoalValueSettings;
}

/**
 * Customer Agreement Setting for a customer.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerAgreementSetting {
  /**
   * Output only. Whether the customer has accepted lead form term of service.
   */
  readonly acceptedLeadFormTerms?: boolean;
}

/**
 * A link between a customer and an asset.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerAsset {
  /**
   * Required. Immutable. The asset which is linked to the customer.
   */
  asset?: string;
  /**
   * Required. Immutable. Role that the asset takes for the customer link.
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Provides the PrimaryStatus of this asset link. Primary status
   * is meant essentially to differentiate between the plain "status" field,
   * which has advertiser set values of enabled, paused, or removed. The primary
   * status takes into account other signals (for assets its mainly policy and
   * quality approvals) to come up with a more comprehensive status to indicate
   * its serving state.
   */
  readonly primaryStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "PAUSED" | "REMOVED" | "PENDING" | "LIMITED" | "NOT_ELIGIBLE";
  /**
   * Output only. Provides the details of the primary status and its associated
   * reasons.
   */
  readonly primaryStatusDetails?: GoogleAdsSearchads360V23Common__AssetLinkPrimaryStatusDetails[];
  /**
   * Output only. Provides a list of reasons for why an asset is not serving or
   * not serving at full capacity.
   */
  readonly primaryStatusReasons?:  | "UNSPECIFIED" | "UNKNOWN" | "ASSET_LINK_PAUSED" | "ASSET_LINK_REMOVED" | "ASSET_DISAPPROVED" | "ASSET_UNDER_REVIEW" | "ASSET_APPROVED_LABELED"[];
  /**
   * Immutable. The resource name of the customer asset. CustomerAsset resource
   * names have the form:
   * `customers/{customer_id}/customerAssets/{asset_id}~{field_type}`
   */
  resourceName?: string;
  /**
   * Output only. Source of the customer asset link.
   */
  readonly source?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "AUTOMATICALLY_CREATED";
  /**
   * Status of the customer asset.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * CustomerAssetSet is the linkage between a customer and an asset set. Adding
 * a CustomerAssetSet links an asset set with a customer.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerAssetSet {
  /**
   * Immutable. The asset set which is linked to the customer.
   */
  assetSet?: string;
  /**
   * Immutable. The customer to which this asset set is linked.
   */
  customer?: string;
  /**
   * Immutable. The resource name of the customer asset set. Asset set asset
   * resource names have the form:
   * `customers/{customer_id}/customerAssetSets/{asset_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the customer asset set asset. Read-only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
}

/**
 * A link between the given customer and a client customer. CustomerClients
 * only exist for manager customers. All direct and indirect client customers
 * are included, as well as the manager itself.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerClient {
  /**
   * Output only. The resource names of the labels owned by the requesting
   * customer that are applied to the client customer. Label resource names have
   * the form: `customers/{customer_id}/labels/{label_id}`
   */
  readonly appliedLabels?: string[];
  /**
   * Output only. The resource name of the client-customer which is linked to
   * the given customer. Read only.
   */
  readonly clientCustomer?: string;
  /**
   * Output only. Currency code (for example, 'USD', 'EUR') for the client.
   * Read only.
   */
  readonly currencyCode?: string;
  /**
   * Output only. Descriptive name for the client. Read only.
   */
  readonly descriptiveName?: string;
  /**
   * Output only. Specifies whether this is a hidden account. Read only.
   */
  readonly hidden?: boolean;
  /**
   * Output only. The ID of the client customer. Read only.
   */
  readonly id?: bigint;
  /**
   * Output only. Distance between given customer and client. For self link,
   * the level value will be 0. Read only.
   */
  readonly level?: bigint;
  /**
   * Output only. Identifies if the client is a manager. Read only.
   */
  readonly manager?: boolean;
  /**
   * Output only. The resource name of the customer client. CustomerClient
   * resource names have the form:
   * `customers/{customer_id}/customerClients/{client_customer_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The status of the client customer. Read only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "CANCELED" | "SUSPENDED" | "CLOSED";
  /**
   * Output only. Identifies if the client is a test account. Read only.
   */
  readonly testAccount?: boolean;
  /**
   * Output only. Common Locale Data Repository (CLDR) string representation of
   * the time zone of the client, for example, America/Los_Angeles. Read only.
   */
  readonly timeZone?: string;
}

/**
 * Represents customer client link relationship.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerClientLink {
  /**
   * Immutable. The client customer linked to this customer.
   */
  clientCustomer?: string;
  /**
   * The visibility of the link. Users can choose whether or not to see hidden
   * links in the Google Ads UI. Default value is false
   */
  hidden?: boolean;
  /**
   * Output only. This is uniquely identifies a customer client link. Read
   * only.
   */
  readonly managerLinkId?: bigint;
  /**
   * Immutable. Name of the resource. CustomerClientLink resource names have
   * the form:
   * `customers/{customer_id}/customerClientLinks/{client_customer_id}~{manager_link_id}`
   */
  resourceName?: string;
  /**
   * This is the status of the link between client and manager.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ACTIVE" | "INACTIVE" | "PENDING" | "REFUSED" | "CANCELED";
}

/**
 * Biddability control for conversion actions with a matching category and
 * origin.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerConversionGoal {
  /**
   * The biddability of the customer conversion goal.
   */
  biddable?: boolean;
  /**
   * The conversion category of this customer conversion goal. Only conversion
   * actions that have this category will be included in this goal.
   */
  category?:  | "UNSPECIFIED" | "UNKNOWN" | "DEFAULT" | "PAGE_VIEW" | "PURCHASE" | "SIGNUP" | "DOWNLOAD" | "ADD_TO_CART" | "BEGIN_CHECKOUT" | "SUBSCRIBE_PAID" | "PHONE_CALL_LEAD" | "IMPORTED_LEAD" | "SUBMIT_LEAD_FORM" | "BOOK_APPOINTMENT" | "REQUEST_QUOTE" | "GET_DIRECTIONS" | "OUTBOUND_CLICK" | "CONTACT" | "ENGAGEMENT" | "STORE_VISIT" | "STORE_SALE" | "QUALIFIED_LEAD" | "CONVERTED_LEAD";
  /**
   * The conversion origin of this customer conversion goal. Only conversion
   * actions that have this conversion origin will be included in this goal.
   */
  origin?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "GOOGLE_HOSTED" | "APP" | "CALL_FROM_ADS" | "STORE" | "YOUTUBE_HOSTED" | "FLOODLIGHT";
  /**
   * Immutable. The resource name of the customer conversion goal. Customer
   * conversion goal resource names have the form:
   * `customers/{customer_id}/customerConversionGoals/{category}~{origin}`
   */
  resourceName?: string;
}

/**
 * A customizer value for the associated CustomizerAttribute at the Customer
 * level.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerCustomizer {
  /**
   * Required. Immutable. The customizer attribute which is linked to the
   * customer.
   */
  customizerAttribute?: string;
  /**
   * Immutable. The resource name of the customer customizer. Customer
   * customizer resource names have the form:
   * `customers/{customer_id}/customerCustomizers/{customizer_attribute_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the customer customizer attribute.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Required. The value to associate with the customizer attribute at this
   * level. The value must be of the type specified for the CustomizerAttribute.
   */
  value?: GoogleAdsSearchads360V23Common__CustomizerValue;
}

/**
 * Represents a relationship between a customer and a label. This customer may
 * not have access to all the labels attached to it. Additional CustomerLabels
 * may be returned by increasing permissions with login-customer-id.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerLabel {
  /**
   * Output only. The resource name of the customer to which the label is
   * attached. Read only.
   */
  readonly customer?: string;
  /**
   * Output only. The resource name of the label assigned to the customer.
   * Note: the Customer ID portion of the label resource name is not validated
   * when creating a new CustomerLabel.
   */
  readonly label?: string;
  /**
   * Immutable. Name of the resource. Customer label resource names have the
   * form: `customers/{customer_id}/customerLabels/{label_id}`
   */
  resourceName?: string;
}

/**
 * Account level customer lifecycle goal settings.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerLifecycleGoal {
  /**
   * Output only. Customer acquisition goal customer level value settings.
   */
  readonly customerAcquisitionGoalValueSettings?: GoogleAdsSearchads360V23Common__LifecycleGoalValueSettings;
  /**
   * Output only. The resource name of the customer which owns the lifecycle
   * goal.
   */
  readonly ownerCustomer?: string;
  /**
   * Immutable. The resource name of the customer lifecycle goal. Customer
   * lifecycle resource names have the form:
   * `customers/{customer_id}/customerLifecycleGoal`
   */
  resourceName?: string;
}

/**
 * Represents customer-manager link relationship.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerManagerLink {
  /**
   * Output only. The manager customer linked to the customer.
   */
  readonly managerCustomer?: string;
  /**
   * Output only. ID of the customer-manager link. This field is read only.
   */
  readonly managerLinkId?: bigint;
  /**
   * Immutable. Name of the resource. CustomerManagerLink resource names have
   * the form:
   * `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`
   */
  resourceName?: string;
  /**
   * Output only. The timestamp when the CustomerManagerLink was created. The
   * timestamp is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss"
   * format.
   */
  readonly startTime?: string;
  /**
   * Status of the link between the customer and the manager.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ACTIVE" | "INACTIVE" | "PENDING" | "REFUSED" | "CANCELED";
}

/**
 * A negative criterion for exclusions at the customer level.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerNegativeCriterion {
  /**
   * Immutable. ContentLabel.
   */
  contentLabel?: GoogleAdsSearchads360V23Common__ContentLabelInfo;
  /**
   * Output only. The ID of the criterion.
   */
  readonly id?: bigint;
  /**
   * Immutable. IpBlock. You can exclude up to 500 IP addresses per account.
   */
  ipBlock?: GoogleAdsSearchads360V23Common__IpBlockInfo;
  /**
   * Immutable. MobileAppCategory.
   */
  mobileAppCategory?: GoogleAdsSearchads360V23Common__MobileAppCategoryInfo;
  /**
   * Immutable. MobileApplication.
   */
  mobileApplication?: GoogleAdsSearchads360V23Common__MobileApplicationInfo;
  /**
   * Immutable. NegativeKeywordList.
   */
  negativeKeywordList?: GoogleAdsSearchads360V23Common__NegativeKeywordListInfo;
  /**
   * Immutable. Placement.
   */
  placement?: GoogleAdsSearchads360V23Common__PlacementInfo;
  /**
   * Immutable. PlacementList.
   */
  placementList?: GoogleAdsSearchads360V23Common__PlacementListInfo;
  /**
   * Immutable. The resource name of the customer negative criterion. Customer
   * negative criterion resource names have the form:
   * `customers/{customer_id}/customerNegativeCriteria/{criterion_id}`
   */
  resourceName?: string;
  /**
   * Output only. The type of the criterion.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "PLACEMENT" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "DEVICE" | "LOCATION" | "LISTING_GROUP" | "AD_SCHEDULE" | "AGE_RANGE" | "GENDER" | "INCOME_RANGE" | "PARENTAL_STATUS" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "USER_LIST" | "PROXIMITY" | "TOPIC" | "LISTING_SCOPE" | "LANGUAGE" | "IP_BLOCK" | "CONTENT_LABEL" | "CARRIER" | "USER_INTEREST" | "WEBPAGE" | "OPERATING_SYSTEM_VERSION" | "APP_PAYMENT_MODEL" | "MOBILE_DEVICE" | "CUSTOM_AFFINITY" | "CUSTOM_INTENT" | "LOCATION_GROUP" | "CUSTOM_AUDIENCE" | "COMBINED_AUDIENCE" | "KEYWORD_THEME" | "AUDIENCE" | "NEGATIVE_KEYWORD_LIST" | "LOCAL_SERVICE_ID" | "SEARCH_THEME" | "BRAND" | "BRAND_LIST" | "LIFE_EVENT" | "WEBPAGE_LIST" | "VIDEO_LINEUP" | "PLACEMENT_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE";
  /**
   * Immutable. YouTube Channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * Immutable. YouTube Video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Common__YouTubeVideoInfo;
}

/**
 * This report provides a high-level view of search demand at the customer
 * level by grouping similar search terms into categories and showing their
 * search volume. Historical data is available starting March 2023.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerSearchTermInsight {
  /**
   * Output only. The label for the search category. An empty string denotes
   * the catch-all category for search terms that didn't fit into another
   * category.
   */
  readonly categoryLabel?: string;
  /**
   * Output only. The ID of the insight.
   */
  readonly id?: bigint;
  /**
   * Output only. The resource name of the customer level search term insight.
   * Customer level search term insight resource names have the form:
   * `customers/{customer_id}/customerSearchTermInsights/{category_id}`
   */
  readonly resourceName?: string;
}

/**
 * A CustomerSkAdNetworkConversionValueSchema.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerSkAdNetworkConversionValueSchema {
  /**
   * Output only. The resource name of the schema.
   * CustomerSkAdNetworkConversionValueSchema resource names have the form:
   * customers/{customer_id}/customerSkAdNetworkConversionValueSchemas/{account_link_id}
   */
  readonly resourceName?: string;
  /**
   * Output only. The schema for the specified resource.
   */
  readonly schema?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchema_SkAdNetworkConversionValueSchema;
}

/**
 * Represents the permission of a single user onto a single customer.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerUserAccess {
  /**
   * Output only. The customer user access creation time. Read only field The
   * format is "YYYY-MM-DD HH:MM:SS". Examples: "2018-03-05 09:15:00" or
   * "2018-02-01 14:34:30"
   */
  readonly accessCreationDateTime?: string;
  /**
   * Access role of the user.
   */
  accessRole?:  | "UNSPECIFIED" | "UNKNOWN" | "ADMIN" | "STANDARD" | "READ_ONLY" | "EMAIL_ONLY";
  /**
   * Output only. Email address of the user. Read only field
   */
  readonly emailAddress?: string;
  /**
   * Output only. The email address of the inviter user. Read only field
   */
  readonly inviterUserEmailAddress?: string;
  /**
   * Immutable. Name of the resource. Resource names have the form:
   * `customers/{customer_id}/customerUserAccesses/{user_id}`
   */
  resourceName?: string;
  /**
   * Output only. User id of the user with the customer access. Read only field
   */
  readonly userId?: bigint;
}

/**
 * Represent an invitation to a new user on this customer account.
 */
export interface GoogleAdsSearchads360V23Resources__CustomerUserAccessInvitation {
  /**
   * Immutable. Access role of the user.
   */
  accessRole?:  | "UNSPECIFIED" | "UNKNOWN" | "ADMIN" | "STANDARD" | "READ_ONLY" | "EMAIL_ONLY";
  /**
   * Output only. Time invitation was created. This field is read-only. The
   * format is "YYYY-MM-DD HH:MM:SS". Examples: "2018-03-05 09:15:00" or
   * "2018-02-01 14:34:30"
   */
  readonly creationDateTime?: string;
  /**
   * Immutable. Email address the invitation was sent to. This can differ from
   * the email address of the account that accepts the invite.
   */
  emailAddress?: string;
  /**
   * Output only. The ID of the invitation. This field is read-only.
   */
  readonly invitationId?: bigint;
  /**
   * Output only. Invitation status of the user.
   */
  readonly invitationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "DECLINED" | "EXPIRED";
  /**
   * Immutable. Name of the resource. Resource names have the form:
   * `customers/{customer_id}/customerUserAccessInvitations/{invitation_id}`
   */
  resourceName?: string;
}

/**
 * A custom interest. This is a list of users by interest.
 */
export interface GoogleAdsSearchads360V23Resources__CustomInterest {
  /**
   * Description of this custom interest audience.
   */
  description?: string;
  /**
   * Output only. Id of the custom interest.
   */
  readonly id?: bigint;
  /**
   * List of custom interest members that this custom interest is composed of.
   * Members can be added during CustomInterest creation. If members are
   * presented in UPDATE operation, existing members will be overridden.
   */
  members?: GoogleAdsSearchads360V23Resources__CustomInterestMember[];
  /**
   * Name of the custom interest. It should be unique across the same custom
   * affinity audience. This field is required for create operations.
   */
  name?: string;
  /**
   * Immutable. The resource name of the custom interest. Custom interest
   * resource names have the form:
   * `customers/{customer_id}/customInterests/{custom_interest_id}`
   */
  resourceName?: string;
  /**
   * Status of this custom interest. Indicates whether the custom interest is
   * enabled or removed.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Type of the custom interest, CUSTOM_AFFINITY or CUSTOM_INTENT. By default
   * the type is set to CUSTOM_AFFINITY.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOM_AFFINITY" | "CUSTOM_INTENT";
}

/**
 * A member of custom interest audience. A member can be a keyword or url. It
 * is immutable, that is, it can only be created or removed but not changed.
 */
export interface GoogleAdsSearchads360V23Resources__CustomInterestMember {
  /**
   * The type of custom interest member, KEYWORD or URL.
   */
  memberType?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "URL";
  /**
   * Keyword text when member_type is KEYWORD or URL string when member_type is
   * URL.
   */
  parameter?: string;
}

/**
 * A customizer attribute. Use CustomerCustomizer, CampaignCustomizer,
 * AdGroupCustomizer, or AdGroupCriterionCustomizer to associate a customizer
 * attribute and set its value at the customer, campaign, ad group, or ad group
 * criterion level, respectively.
 */
export interface GoogleAdsSearchads360V23Resources__CustomizerAttribute {
  /**
   * Output only. The ID of the customizer attribute.
   */
  readonly id?: bigint;
  /**
   * Required. Immutable. Name of the customizer attribute. Required. It must
   * have a minimum length of 1 and maximum length of 40. Name of an enabled
   * customizer attribute must be unique (case insensitive).
   */
  name?: string;
  /**
   * Immutable. The resource name of the customizer attribute. Customizer
   * Attribute resource names have the form:
   * `customers/{customer_id}/customizerAttributes/{customizer_attribute_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the customizer attribute.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Immutable. The type of the customizer attribute.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "TEXT" | "NUMBER" | "PRICE" | "PERCENT";
}

/**
 * Fields in the submitted custom question
 */
export interface GoogleAdsSearchads360V23Resources__CustomLeadFormSubmissionField {
  /**
   * Output only. Field value for custom question response, maximum number of
   * characters is 70.
   */
  readonly fieldValue?: string;
  /**
   * Output only. Question text for custom question, maximum number of
   * characters is 300.
   */
  readonly questionText?: string;
}

/**
 * Represents the data sharing connection between
 */
export interface GoogleAdsSearchads360V23Resources__DataLink {
  /**
   * Output only. The ID of the data link. This field is read only.
   */
  readonly dataLinkId?: bigint;
  /**
   * Output only. The ID of the link. This field is read only.
   */
  readonly productLinkId?: bigint;
  /**
   * Immutable. Resource name of the product data link. DataLink resource names
   * have the form: `
   */
  resourceName?: string;
  /**
   * Output only. The status of the data link.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUESTED" | "PENDING_APPROVAL" | "ENABLED" | "DISABLED" | "REVOKED" | "REJECTED";
  /**
   * Output only. The type of the data.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "VIDEO";
  /**
   * Immutable. A data link to YouTube video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Resources__YoutubeVideoIdentifier;
}

/**
 * The identifier for Data Partner account.
 */
export interface GoogleAdsSearchads360V23Resources__DataPartnerIdentifier {
  /**
   * Immutable. The customer ID of the Data partner account. This field is
   * required and should not be empty when creating a new data partner link. It
   * is unable to be modified after the creation of the link.
   */
  dataPartnerId?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources__DataPartnerIdentifier(data: any): GoogleAdsSearchads360V23Resources__DataPartnerIdentifier {
  return {
    ...data,
    dataPartnerId: data["dataPartnerId"] !== undefined ? String(data["dataPartnerId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__DataPartnerIdentifier(data: any): GoogleAdsSearchads360V23Resources__DataPartnerIdentifier {
  return {
    ...data,
    dataPartnerId: data["dataPartnerId"] !== undefined ? BigInt(data["dataPartnerId"]) : undefined,
  };
}

/**
 * A detail content suitability placement view.
 */
export interface GoogleAdsSearchads360V23Resources__DetailContentSuitabilityPlacementView {
  /**
   * Output only. The display name is URL for websites, YouTube video name for
   * YouTube videos, and translated mobile app name for mobile apps.
   */
  readonly displayName?: string;
  /**
   * Output only. The automatic placement string at detail level, for example.
   * website url, mobile application id, or a YouTube video id.
   */
  readonly placement?: string;
  /**
   * Output only. Represents the type of the placement, for example, Website,
   * YouTubeVideo and MobileApplication.
   */
  readonly placementType?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "GOOGLE_PRODUCTS";
  /**
   * Output only. The resource name of the detail content suitability placement
   * view. Detail content suitability placement view resource names have the
   * form:
   * `customers/{customer_id}/detailContentSuitabilityPlacementViews/{placement_fingerprint}`
   */
  readonly resourceName?: string;
  /**
   * Output only. URL of the placement, for example, website, link to the
   * mobile application in app store, or a YouTube video URL.
   */
  readonly targetUrl?: string;
}

/**
 * A detailed demographic: a particular interest-based vertical to be targeted
 * to reach users based on long-term life facts.
 */
export interface GoogleAdsSearchads360V23Resources__DetailedDemographic {
  /**
   * Output only. Availability information of the detailed demographic.
   */
  readonly availabilities?: GoogleAdsSearchads360V23Common__CriterionCategoryAvailability[];
  /**
   * Output only. The ID of the detailed demographic.
   */
  readonly id?: bigint;
  /**
   * Output only. True if the detailed demographic is launched to all channels
   * and locales.
   */
  readonly launchedToAll?: boolean;
  /**
   * Output only. The name of the detailed demographic. For example,"Highest
   * Level of Educational Attainment"
   */
  readonly name?: string;
  /**
   * Output only. The parent of the detailed_demographic.
   */
  readonly parent?: string;
  /**
   * Output only. The resource name of the detailed demographic. Detailed
   * demographic resource names have the form:
   * `customers/{customer_id}/detailedDemographics/{detailed_demographic_id}`
   */
  readonly resourceName?: string;
}

/**
 * A view with metrics aggregated by ad group and URL or YouTube video. This
 * view primarily surfaces placement data from the Google Display Network. While
 * you can select segments like `segments.ad_network_type`, this view generally
 * does not include placement data from other networks, such as the Search
 * Partners network. To understand performance on Search Partners, consider
 * other reports and segmentations.
 */
export interface GoogleAdsSearchads360V23Resources__DetailPlacementView {
  /**
   * Output only. The display name is URL name for websites, YouTube video name
   * for YouTube videos, and translated mobile app name for mobile apps.
   */
  readonly displayName?: string;
  /**
   * Output only. URL of the group placement, for example, domain, link to the
   * mobile application in app store, or a YouTube channel URL.
   */
  readonly groupPlacementTargetUrl?: string;
  /**
   * Output only. The automatic placement string at detail level, e. g. website
   * URL, mobile application ID, or a YouTube video ID.
   */
  readonly placement?: string;
  /**
   * Output only. Type of the placement, for example, Website, YouTube Video,
   * and Mobile Application.
   */
  readonly placementType?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "GOOGLE_PRODUCTS";
  /**
   * Output only. The resource name of the detail placement view. Detail
   * placement view resource names have the form:
   * `customers/{customer_id}/detailPlacementViews/{ad_group_id}~{base64_placement}`
   */
  readonly resourceName?: string;
  /**
   * Output only. URL of the placement, for example, website, link to the
   * mobile application in app store, or a YouTube video URL.
   */
  readonly targetUrl?: string;
}

/**
 * A display keyword view. Provides performance data for keywords used in
 * Display Network campaigns. This view lets you analyze how your display
 * keywords are performing across various segments. This view is primarily used
 * to track the effectiveness of keyword targeting within your Display
 * campaigns. To understand which network the metrics apply to, you can select
 * the `segments.ad_network_type` field in your query. This field will segment
 * the data by networks such as the Google Display Network, YouTube, Gmail, and
 * so on. You can select fields from this resource along with metrics like
 * impressions, clicks, and conversions to gauge performance. Attributed
 * resources like `ad_group` and `campaign` can also be selected without
 * segmenting metrics.
 */
export interface GoogleAdsSearchads360V23Resources__DisplayKeywordView {
  /**
   * Output only. The resource name of the display keyword view. Display
   * Keyword view resource names have the form:
   * `customers/{customer_id}/displayKeywordViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A distance view with metrics aggregated by the user's distance from an
 * advertiser's location extensions. Each DistanceBucket includes all
 * impressions that fall within its distance and a single impression will
 * contribute to the metrics for all DistanceBuckets that include the user's
 * distance.
 */
export interface GoogleAdsSearchads360V23Resources__DistanceView {
  /**
   * Output only. Grouping of user distance from location extensions.
   */
  readonly distanceBucket?:  | "UNSPECIFIED" | "UNKNOWN" | "WITHIN_700M" | "WITHIN_1KM" | "WITHIN_5KM" | "WITHIN_10KM" | "WITHIN_15KM" | "WITHIN_20KM" | "WITHIN_25KM" | "WITHIN_30KM" | "WITHIN_35KM" | "WITHIN_40KM" | "WITHIN_45KM" | "WITHIN_50KM" | "WITHIN_55KM" | "WITHIN_60KM" | "WITHIN_65KM" | "BEYOND_65KM" | "WITHIN_0_7MILES" | "WITHIN_1MILE" | "WITHIN_5MILES" | "WITHIN_10MILES" | "WITHIN_15MILES" | "WITHIN_20MILES" | "WITHIN_25MILES" | "WITHIN_30MILES" | "WITHIN_35MILES" | "WITHIN_40MILES" | "BEYOND_40MILES";
  /**
   * Output only. True if the DistanceBucket is using the metric system, false
   * otherwise.
   */
  readonly metricSystem?: boolean;
  /**
   * Output only. The resource name of the distance view. Distance view
   * resource names have the form:
   * `customers/{customer_id}/distanceViews/1~{distance_bucket}`
   */
  readonly resourceName?: string;
}

/**
 * DoubleClick Campaign Manager (DCM) setting for a manager customer.
 */
export interface GoogleAdsSearchads360V23Resources__DoubleClickCampaignManagerSetting {
  /**
   * Output only. ID of the Campaign Manager advertiser associated with this
   * customer.
   */
  readonly advertiserId?: bigint;
  /**
   * Output only. ID of the Campaign Manager network associated with this
   * customer.
   */
  readonly networkId?: bigint;
  /**
   * Output only. Time zone of the Campaign Manager network associated with
   * this customer in IANA Time Zone Database format, such as America/New_York.
   */
  readonly timeZone?: string;
}

/**
 * A dynamic search ads search term view.
 */
export interface GoogleAdsSearchads360V23Resources__DynamicSearchAdsSearchTermView {
  /**
   * Output only. True if query is added to targeted keywords. This field is
   * read-only.
   */
  readonly hasMatchingKeyword?: boolean;
  /**
   * Output only. True if query matches a negative keyword. This field is
   * read-only.
   */
  readonly hasNegativeKeyword?: boolean;
  /**
   * Output only. True if query matches a negative url. This field is
   * read-only.
   */
  readonly hasNegativeUrl?: boolean;
  /**
   * Output only. The dynamically generated headline of the Dynamic Search Ad.
   * This field is read-only.
   */
  readonly headline?: string;
  /**
   * Output only. The dynamically selected landing page URL of the impression.
   * This field is read-only.
   */
  readonly landingPage?: string;
  /**
   * Output only. The URL of page feed item served for the impression. This
   * field is read-only.
   */
  readonly pageUrl?: string;
  /**
   * Output only. The resource name of the dynamic search ads search term view.
   * Dynamic search ads search term view resource names have the form:
   * `customers/{customer_id}/dynamicSearchAdsSearchTermViews/{ad_group_id}~{search_term_fingerprint}~{headline_fingerprint}~{landing_page_fingerprint}~{page_url_fingerprint}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Search term This field is read-only.
   */
  readonly searchTerm?: string;
}

/**
 * A landing page view with metrics aggregated at the expanded final URL level.
 */
export interface GoogleAdsSearchads360V23Resources__ExpandedLandingPageView {
  /**
   * Output only. The final URL that clicks are directed to.
   */
  readonly expandedFinalUrl?: string;
  /**
   * Output only. The resource name of the expanded landing page view. Expanded
   * landing page view resource names have the form:
   * `customers/{customer_id}/expandedLandingPageViews/{expanded_final_url_fingerprint}`
   */
  readonly resourceName?: string;
}

/**
 * A Google ads experiment for users to experiment changes on multiple
 * campaigns, compare the performance, and apply the effective changes.
 */
export interface GoogleAdsSearchads360V23Resources__Experiment {
  /**
   * The description of the experiment. It must have a minimum length of 1 and
   * maximum length of 2048.
   */
  description?: string;
  /**
   * Date when the experiment ends. By default, the experiment ends on the
   * campaign's end date. If this field is set, then the experiment ends at the
   * end of the specified date in the customer's time zone. Format: YYYY-MM-DD
   * Example: 2019-04-18
   */
  endDate?: string;
  /**
   * Output only. The ID of the experiment. Read only.
   */
  readonly experimentId?: bigint;
  /**
   * The goals of this experiment.
   */
  goals?: GoogleAdsSearchads360V23Common__MetricGoal[];
  /**
   * Output only. The resource name of the long-running operation that can be
   * used to poll for completion of experiment schedule or promote. The most
   * recent long running operation is returned.
   */
  readonly longRunningOperation?: string;
  /**
   * Required. The name of the experiment. It must have a minimum length of 1
   * and maximum length of 1024. It must be unique under a customer.
   */
  name?: string;
  /**
   * Output only. The status of the experiment promotion process.
   */
  readonly promoteStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_STARTED" | "IN_PROGRESS" | "COMPLETED" | "FAILED" | "COMPLETED_WITH_WARNING";
  /**
   * Immutable. The resource name of the experiment. Experiment resource names
   * have the form: `customers/{customer_id}/experiments/{experiment_id}`
   */
  resourceName?: string;
  /**
   * Date when the experiment starts. By default, the experiment starts now or
   * on the campaign's start date, whichever is later. If this field is set,
   * then the experiment starts at the beginning of the specified date in the
   * customer's time zone. Format: YYYY-MM-DD Example: 2019-03-14
   */
  startDate?: string;
  /**
   * The Advertiser-chosen status of this experiment.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "HALTED" | "PROMOTED" | "SETUP" | "INITIATED" | "GRADUATED";
  /**
   * For system managed experiments, the advertiser must provide a suffix
   * during construction, in the setup stage before moving to initiated. The
   * suffix will be appended to the in-design and experiment campaign names so
   * that the name is base campaign name + suffix.
   */
  suffix?: string;
  /**
   * Immutable. Set to true if changes to base campaigns should be synced to
   * the trial campaigns. Any changes made directly to trial campaigns will be
   * preserved. This field can only be set when the experiment is being created.
   */
  syncEnabled?: boolean;
  /**
   * Required. The product/feature that uses this experiment.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "DISPLAY_AND_VIDEO_360" | "AD_VARIATION" | "YOUTUBE_CUSTOM" | "DISPLAY_CUSTOM" | "SEARCH_CUSTOM" | "DISPLAY_AUTOMATED_BIDDING_STRATEGY" | "SEARCH_AUTOMATED_BIDDING_STRATEGY" | "SHOPPING_AUTOMATED_BIDDING_STRATEGY" | "SMART_MATCHING" | "HOTEL_CUSTOM";
}

/**
 * A Google ads experiment for users to experiment changes on multiple
 * campaigns, compare the performance, and apply the effective changes.
 */
export interface GoogleAdsSearchads360V23Resources__ExperimentArm {
  /**
   * List of asset groups in the experiment arm.
   */
  assetGroups?: GoogleAdsSearchads360V23Resources_ExperimentArm_AssetGroupInfo[];
  /**
   * List of campaigns in the trial arm. The max length is one.
   */
  campaigns?: string[];
  /**
   * Whether this arm is a control arm. A control arm is the arm against which
   * the other arms are compared.
   */
  control?: boolean;
  /**
   * Immutable. The experiment to which the ExperimentArm belongs.
   */
  experiment?: string;
  /**
   * Output only. The in design campaigns in the treatment experiment arm.
   */
  readonly inDesignCampaigns?: string[];
  /**
   * Required. The name of the experiment arm. It must have a minimum length of
   * 1 and maximum length of 1024. It must be unique under an experiment.
   */
  name?: string;
  /**
   * Immutable. The resource name of the experiment arm. Experiment arm
   * resource names have the form:
   * `customers/{customer_id}/experimentArms/{TrialArm.trial_id}~{TrialArm.trial_arm_id}`
   */
  resourceName?: string;
  /**
   * Traffic split of the trial arm. The value should be between 1 and 100 and
   * must total 100 between the two trial arms.
   */
  trafficSplit?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources__ExperimentArm(data: any): GoogleAdsSearchads360V23Resources__ExperimentArm {
  return {
    ...data,
    trafficSplit: data["trafficSplit"] !== undefined ? String(data["trafficSplit"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__ExperimentArm(data: any): GoogleAdsSearchads360V23Resources__ExperimentArm {
  return {
    ...data,
    trafficSplit: data["trafficSplit"] !== undefined ? BigInt(data["trafficSplit"]) : undefined,
  };
}

/**
 * Details about the employee's medical Fellowship. Fellowship is a period of
 * medical training that the professional undertakes after finishing their
 * residency.
 */
export interface GoogleAdsSearchads360V23Resources__Fellowship {
  /**
   * Output only. Year of completion.
   */
  readonly completionYear?: number;
  /**
   * Output only. Name of the instutition at which the fellowship was
   * completed.
   */
  readonly institutionName?: string;
}

/**
 * FinalUrlExpansionAssetView Resource.
 */
export interface GoogleAdsSearchads360V23Resources__FinalUrlExpansionAssetView {
  /**
   * Output only. Ad Group in which FinalUrlExpansionAsset served.
   */
  readonly adGroup?: string;
  /**
   * Output only. The ID of the asset.
   */
  readonly asset?: string;
  /**
   * Output only. Asset Group in which FinalUrlExpansionAsset served.
   */
  readonly assetGroup?: string;
  /**
   * Output only. Campaign in which the asset served.
   */
  readonly campaign?: string;
  /**
   * Output only. The field type of the asset.
   */
  readonly fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. Final URL of the FinalUrlExpansionAsset.
   */
  readonly finalUrl?: string;
  /**
   * Output only. The resource name of the FinalUrlExpansionAsset.
   */
  readonly resourceName?: string;
  /**
   * Output only. Status of the FinalUrlExpansionAsset.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED" | "PAUSED";
}

/**
 * A gender view. The gender_view resource reflects the effective serving
 * state, rather than what criteria were added. An ad group without gender
 * criteria by default shows to all genders, so all genders appear in
 * gender_view with stats.
 */
export interface GoogleAdsSearchads360V23Resources__GenderView {
  /**
   * Output only. The resource name of the gender view. Gender view resource
   * names have the form:
   * `customers/{customer_id}/genderViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A geographic view. Geographic View includes all metrics aggregated at the
 * country level, one row per country. It reports metrics at either actual
 * physical location of the user or an area of interest. If other segment fields
 * are used, you may get more than one row per country.
 */
export interface GoogleAdsSearchads360V23Resources__GeographicView {
  /**
   * Output only. Criterion Id for the country.
   */
  readonly countryCriterionId?: bigint;
  /**
   * Output only. Type of the geo targeting of the campaign.
   */
  readonly locationType?:  | "UNSPECIFIED" | "UNKNOWN" | "AREA_OF_INTEREST" | "LOCATION_OF_PRESENCE";
  /**
   * Output only. The resource name of the geographic view. Geographic view
   * resource names have the form:
   * `customers/{customer_id}/geographicViews/{country_criterion_id}~{location_type}`
   */
  readonly resourceName?: string;
}

/**
 * A geo target constant.
 */
export interface GoogleAdsSearchads360V23Resources__GeoTargetConstant {
  /**
   * Output only. The fully qualified English name, consisting of the target's
   * name and that of its parent and country.
   */
  readonly canonicalName?: string;
  /**
   * Output only. The ISO-3166-1 alpha-2 country code that is associated with
   * the target.
   */
  readonly countryCode?: string;
  /**
   * Output only. The ID of the geo target constant.
   */
  readonly id?: bigint;
  /**
   * Output only. Geo target constant English name.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the parent geo target constant. Geo
   * target constant resource names have the form:
   * `geoTargetConstants/{parent_geo_target_constant_id}`
   */
  readonly parentGeoTarget?: string;
  /**
   * Output only. The resource name of the geo target constant. Geo target
   * constant resource names have the form:
   * `geoTargetConstants/{geo_target_constant_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Geo target constant status.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVAL_PLANNED";
  /**
   * Output only. Geo target constant target type.
   */
  readonly targetType?: string;
}

/**
 * Representation of goals.
 */
export interface GoogleAdsSearchads360V23Resources__Goal {
  /**
   * Output only. The ID of this goal.
   */
  readonly goalId?: bigint;
  /**
   * Output only. The type of this goal.
   */
  readonly goalType?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_RETENTION";
  /**
   * Output only. Indicates if this goal is eligible for campaign optimization.
   */
  readonly optimizationEligibility?:  | "UNSPECIFIED" | "UNKNOWN" | "ELIGIBLE" | "INELIGIBLE";
  /**
   * Output only. The resource name of the goal owner customer.
   */
  readonly ownerCustomer?: string;
  /**
   * Immutable. The resource name of the goal. Goal resource names have the
   * form: `customers/{customer_id}/goals/{goal_id}`
   */
  resourceName?: string;
  /**
   * Retention goal settings.
   */
  retentionGoalSettings?: GoogleAdsSearchads360V23Common_GoalSetting_RetentionGoal;
}

/**
 * The identifier for Google Ads account.
 */
export interface GoogleAdsSearchads360V23Resources__GoogleAdsIdentifier {
  /**
   * Immutable. The resource name of the Google Ads account. This field is
   * required and should not be empty when creating a new Google Ads link. It is
   * unable to be modified after the creation of the link.
   */
  customer?: string;
}

/**
 * Insurance status at geo + vertical level.
 */
export interface GoogleAdsSearchads360V23Resources__GranularInsuranceStatus {
  /**
   * Output only. Service category associated with the status. For example,
   * xcat:service_area_business_plumber. For more details see:
   * https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids
   */
  readonly categoryId?: string;
  /**
   * Output only. Geotarget criterion ID associated with the status. Can be on
   * country or state/province geo level, depending on requirements and
   * location. See https://developers.google.com/google-ads/api/data/geotargets
   * for more information.
   */
  readonly geoCriterionId?: bigint;
  /**
   * Output only. Granular insurance status, per geo + vertical.
   */
  readonly verificationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NEEDS_REVIEW" | "FAILED" | "PASSED" | "NOT_APPLICABLE" | "NO_SUBMISSION" | "PARTIAL_SUBMISSION" | "PENDING_ESCALATION";
}

/**
 * License status at geo + vertical level.
 */
export interface GoogleAdsSearchads360V23Resources__GranularLicenseStatus {
  /**
   * Output only. Service category associated with the status. For example,
   * xcat:service_area_business_plumber. For more details see:
   * https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids
   */
  readonly categoryId?: string;
  /**
   * Output only. Geotarget criterion ID associated with the status. Can be on
   * country or state/province geo level, depending on requirements and
   * location. See https://developers.google.com/google-ads/api/data/geotargets
   * for more information.
   */
  readonly geoCriterionId?: bigint;
  /**
   * Output only. Granular license status, per geo + vertical.
   */
  readonly verificationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NEEDS_REVIEW" | "FAILED" | "PASSED" | "NOT_APPLICABLE" | "NO_SUBMISSION" | "PARTIAL_SUBMISSION" | "PENDING_ESCALATION";
}

/**
 * A group content suitability placement view.
 */
export interface GoogleAdsSearchads360V23Resources__GroupContentSuitabilityPlacementView {
  /**
   * Output only. The display name is URL for websites, YouTube video name for
   * YouTube videos, and translated mobile app name for mobile apps.
   */
  readonly displayName?: string;
  /**
   * Output only. The automatic placement string at group level, for example.
   * website url, mobile application id, or a YouTube video id.
   */
  readonly placement?: string;
  /**
   * Output only. Represents the type of the placement, for example, Website,
   * YouTubeVideo and MobileApplication.
   */
  readonly placementType?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "GOOGLE_PRODUCTS";
  /**
   * Output only. The resource name of the group content suitability placement
   * view. Group content suitability placement view resource names have the
   * form:
   * `customers/{customer_id}/groupContentSuitabilityPlacementViews/{placement_fingerprint}`
   */
  readonly resourceName?: string;
  /**
   * Output only. URL of the placement, for example, website, link to the
   * mobile application in app store, or a YouTube video URL.
   */
  readonly targetUrl?: string;
}

/**
 * A group placement view.
 */
export interface GoogleAdsSearchads360V23Resources__GroupPlacementView {
  /**
   * Output only. Domain name for websites and YouTube channel name for YouTube
   * channels.
   */
  readonly displayName?: string;
  /**
   * Output only. The automatic placement string at group level, e. g. web
   * domain, mobile app ID, or a YouTube channel ID.
   */
  readonly placement?: string;
  /**
   * Output only. Type of the placement, for example, Website, YouTube Channel,
   * Mobile Application.
   */
  readonly placementType?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "GOOGLE_PRODUCTS";
  /**
   * Output only. The resource name of the group placement view. Group
   * placement view resource names have the form:
   * `customers/{customer_id}/groupPlacementViews/{ad_group_id}~{base64_placement}`
   */
  readonly resourceName?: string;
  /**
   * Output only. URL of the group placement, for example, domain, link to the
   * mobile application in app store, or a YouTube channel URL.
   */
  readonly targetUrl?: string;
}

/**
 * The identifier for Hotel account.
 */
export interface GoogleAdsSearchads360V23Resources__HotelCenterLinkInvitationIdentifier {
  /**
   * Output only. The hotel center id of the hotel account. This field is read
   * only
   */
  readonly hotelCenterId?: bigint;
}

/**
 * A hotel group view.
 */
export interface GoogleAdsSearchads360V23Resources__HotelGroupView {
  /**
   * Output only. The resource name of the hotel group view. Hotel Group view
   * resource names have the form:
   * `customers/{customer_id}/hotelGroupViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A hotel performance view.
 */
export interface GoogleAdsSearchads360V23Resources__HotelPerformanceView {
  /**
   * Output only. The resource name of the hotel performance view. Hotel
   * performance view resource names have the form:
   * `customers/{customer_id}/hotelPerformanceView`
   */
  readonly resourceName?: string;
}

/**
 * A hotel reconciliation. It contains conversion information from Hotel
 * bookings to reconcile with advertiser records. These rows may be updated or
 * canceled before billing through Bulk Uploads.
 */
export interface GoogleAdsSearchads360V23Resources__HotelReconciliation {
  /**
   * Output only. Whether a given booking has been billed. Once billed, a
   * booking can't be modified.
   */
  readonly billed?: boolean;
  /**
   * Output only. The resource name for the Campaign associated with the
   * conversion.
   */
  readonly campaign?: string;
  /**
   * Output only. Check-in date recorded when the booking is made. If the
   * check-in date is modified at reconciliation, the revised date will then
   * take the place of the original date in this column. Format is YYYY-MM-DD.
   */
  readonly checkInDate?: string;
  /**
   * Output only. Check-out date recorded when the booking is made. If the
   * check-in date is modified at reconciliation, the revised date will then
   * take the place of the original date in this column. Format is YYYY-MM-DD.
   */
  readonly checkOutDate?: string;
  /**
   * Required. Output only. The commission ID is Google's ID for this booking.
   * Every booking event is assigned a Commission ID to help you match it to a
   * guest stay.
   */
  readonly commissionId?: string;
  /**
   * Output only. Identifier for the Hotel Center account which provides the
   * rates for the Hotel campaign.
   */
  readonly hotelCenterId?: bigint;
  /**
   * Output only. Unique identifier for the booked property, as provided in the
   * Hotel Center feed. The hotel ID comes from the 'ID' parameter of the
   * conversion tracking tag.
   */
  readonly hotelId?: string;
  /**
   * Output only. The order ID is the identifier for this booking as provided
   * in the 'transaction_id' parameter of the conversion tracking tag.
   */
  readonly orderId?: string;
  /**
   * Required. Output only. Reconciled value is the final value of a booking as
   * paid by the guest. If original booking value changes for any reason, such
   * as itinerary changes or room upsells, the reconciled value should be the
   * full final amount collected. If a booking is canceled, the reconciled value
   * should include the value of any cancellation fees or non-refundable nights
   * charged. Value is in millionths of the base unit currency. For example,
   * $12.35 would be represented as 12350000. Currency unit is in the default
   * customer currency.
   */
  readonly reconciledValueMicros?: bigint;
  /**
   * Immutable. The resource name of the hotel reconciliation. Hotel
   * reconciliation resource names have the form:
   * `customers/{customer_id}/hotelReconciliations/{commission_id}`
   */
  resourceName?: string;
  /**
   * Required. Output only. Current status of a booking with regards to
   * reconciliation and billing. Bookings should be reconciled within 45 days
   * after the check-out date. Any booking not reconciled within 45 days will be
   * billed at its original value.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "RESERVATION_ENABLED" | "RECONCILIATION_NEEDED" | "RECONCILED" | "CANCELED";
}

/**
 * An income range view.
 */
export interface GoogleAdsSearchads360V23Resources__IncomeRangeView {
  /**
   * Output only. The resource name of the income range view. Income range view
   * resource names have the form:
   * `customers/{customer_id}/incomeRangeViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * specific to a local services insurance.
 */
export interface GoogleAdsSearchads360V23Resources__InsuranceVerificationArtifact {
  /**
   * Output only. Insurance amount. This is measured in "micros" of the
   * currency mentioned in the insurance document.
   */
  readonly amountMicros?: bigint;
  /**
   * Output only. The timestamp when this insurance expires. The format is
   * "YYYY-MM-DD HH:MM:SS" in the Google Ads account's timezone. Examples:
   * "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly expirationDateTime?: string;
  /**
   * Output only. The readonly field containing the information for an uploaded
   * insurance document.
   */
  readonly insuranceDocumentReadonly?: GoogleAdsSearchads360V23Common__LocalServicesDocumentReadOnly;
  /**
   * Output only. Insurance document's rejection reason.
   */
  readonly rejectionReason?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_NAME_MISMATCH" | "INSURANCE_AMOUNT_INSUFFICIENT" | "EXPIRED" | "NO_SIGNATURE" | "NO_POLICY_NUMBER" | "NO_COMMERCIAL_GENERAL_LIABILITY" | "EDITABLE_FORMAT" | "CATEGORY_MISMATCH" | "MISSING_EXPIRATION_DATE" | "POOR_QUALITY" | "POTENTIALLY_EDITED" | "WRONG_DOCUMENT_TYPE" | "NON_FINAL" | "OTHER";
}

/**
 * An invoice. All invoice information is snapshotted to match the PDF invoice.
 * For invoices older than the launch of InvoiceService, the snapshotted
 * information may not match the PDF invoice.
 */
export interface GoogleAdsSearchads360V23Resources__Invoice {
  /**
   * Output only. The list of summarized account budget information associated
   * with this invoice.
   */
  readonly accountBudgetSummaries?: GoogleAdsSearchads360V23Resources_Invoice_AccountBudgetSummary[];
  /**
   * Output only. The list of summarized account information associated with
   * this invoice.
   */
  readonly accountSummaries?: GoogleAdsSearchads360V23Resources_Invoice_AccountSummary[];
  /**
   * Output only. The pretax subtotal amount of invoice level adjustments, in
   * micros.
   */
  readonly adjustmentsSubtotalAmountMicros?: bigint;
  /**
   * Output only. The sum of taxes on the invoice level adjustments, in micros.
   */
  readonly adjustmentsTaxAmountMicros?: bigint;
  /**
   * Output only. The total amount of invoice level adjustments, in micros.
   */
  readonly adjustmentsTotalAmountMicros?: bigint;
  /**
   * Output only. The resource name of this invoice's billing setup.
   * `customers/{customer_id}/billingSetups/{billing_setup_id}`
   */
  readonly billingSetup?: string;
  /**
   * Output only. The resource name of the original invoice corrected, wrote
   * off, or canceled by this invoice, if applicable. If `corrected_invoice` is
   * set, `replaced_invoices` will not be set. Invoice resource names have the
   * form: `customers/{customer_id}/invoices/{invoice_id}`
   */
  readonly correctedInvoice?: string;
  /**
   * Output only. The currency code. All costs are returned in this currency. A
   * subset of the currency codes derived from the ISO 4217 standard is
   * supported.
   */
  readonly currencyCode?: string;
  /**
   * Output only. The due date in yyyy-mm-dd format.
   */
  readonly dueDate?: string;
  /**
   * Output only. The pretax subtotal amount of invoice level export charges,
   * in micros.
   */
  readonly exportChargeSubtotalAmountMicros?: bigint;
  /**
   * Output only. The sum of taxes on the invoice level export charges, in
   * micros.
   */
  readonly exportChargeTaxAmountMicros?: bigint;
  /**
   * Output only. The total amount of invoice level export charges, in micros.
   */
  readonly exportChargeTotalAmountMicros?: bigint;
  /**
   * Output only. The ID of the invoice. It appears on the invoice PDF as
   * "Invoice number".
   */
  readonly id?: string;
  /**
   * Output only. The issue date in yyyy-mm-dd format. It appears on the
   * invoice PDF as either "Issue date" or "Invoice date".
   */
  readonly issueDate?: string;
  /**
   * Output only. A 16 digit ID used to identify the payments account
   * associated with the billing setup, for example, "1234-5678-9012-3456". It
   * appears on the invoice PDF as "Billing Account Number".
   */
  readonly paymentsAccountId?: string;
  /**
   * Output only. A 12 digit ID used to identify the payments profile
   * associated with the billing setup, for example, "1234-5678-9012". It
   * appears on the invoice PDF as "Billing ID".
   */
  readonly paymentsProfileId?: string;
  /**
   * Output only. The URL to a PDF copy of the invoice. Users need to pass in
   * their OAuth token to request the PDF with this URL.
   */
  readonly pdfUrl?: string;
  /**
   * Output only. The pretax subtotal amount of invoice level regulatory costs,
   * in micros.
   */
  readonly regulatoryCostsSubtotalAmountMicros?: bigint;
  /**
   * Output only. The sum of taxes on the invoice level regulatory costs, in
   * micros.
   */
  readonly regulatoryCostsTaxAmountMicros?: bigint;
  /**
   * Output only. The total amount of invoice level regulatory costs, in
   * micros.
   */
  readonly regulatoryCostsTotalAmountMicros?: bigint;
  /**
   * Output only. The resource name of the original invoice(s) being rebilled
   * or replaced by this invoice, if applicable. There might be multiple
   * replaced invoices due to invoice consolidation. The replaced invoices may
   * not belong to the same payments account. If `replaced_invoices` is set,
   * `corrected_invoice` will not be set. Invoice resource names have the form:
   * `customers/{customer_id}/invoices/{invoice_id}`
   */
  readonly replacedInvoices?: string[];
  /**
   * Output only. The resource name of the invoice. Multiple customers can
   * share a given invoice, so multiple resource names may point to the same
   * invoice. Invoice resource names have the form:
   * `customers/{customer_id}/invoices/{invoice_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The service period date range of this invoice. The end date
   * is inclusive.
   */
  readonly serviceDateRange?: GoogleAdsSearchads360V23Common__DateRange;
  /**
   * Output only. The pretax subtotal amount, in micros. This is equal to the
   * sum of the AccountBudgetSummary subtotal amounts and
   * Invoice.adjustments_subtotal_amount_micros.
   */
  readonly subtotalAmountMicros?: bigint;
  /**
   * Output only. The sum of all taxes on the invoice, in micros. This equals
   * the sum of the AccountBudgetSummary tax amounts, plus taxes not associated
   * with a specific account budget.
   */
  readonly taxAmountMicros?: bigint;
  /**
   * Output only. The total amount, in micros. This equals the sum of
   * Invoice.subtotal_amount_micros, Invoice.tax_amount_micros,
   * Invoice.regulatory_costs_subtotal_amount_micros, and
   * Invoice.export_charge_subtotal_amount_micros (which is separated into a
   * separate line item starting with V14.1).
   */
  readonly totalAmountMicros?: bigint;
  /**
   * Output only. The type of invoice.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CREDIT_MEMO" | "INVOICE";
}

/**
 * A Keyword Planner plan. Max number of saved keyword plans: 10000. It's
 * possible to remove plans if limit is reached.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlan {
  /**
   * The date period used for forecasting the plan.
   */
  forecastPeriod?: GoogleAdsSearchads360V23Resources__KeywordPlanForecastPeriod;
  /**
   * Output only. The ID of the keyword plan.
   */
  readonly id?: bigint;
  /**
   * The name of the keyword plan. This field is required and should not be
   * empty when creating new keyword plans.
   */
  name?: string;
  /**
   * Immutable. The resource name of the Keyword Planner plan. KeywordPlan
   * resource names have the form:
   * `customers/{customer_id}/keywordPlans/{kp_plan_id}`
   */
  resourceName?: string;
}

/**
 * A Keyword Planner ad group. Max number of keyword plan ad groups per plan:
 * 200.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup {
  /**
   * A default ad group max cpc bid in micros in account currency for all
   * biddable keywords under the keyword plan ad group. If not set, will inherit
   * from parent campaign.
   */
  cpcBidMicros?: bigint;
  /**
   * Output only. The ID of the keyword plan ad group.
   */
  readonly id?: bigint;
  /**
   * The keyword plan campaign to which this ad group belongs.
   */
  keywordPlanCampaign?: string;
  /**
   * The name of the keyword plan ad group. This field is required and should
   * not be empty when creating keyword plan ad group.
   */
  name?: string;
  /**
   * Immutable. The resource name of the Keyword Planner ad group.
   * KeywordPlanAdGroup resource names have the form:
   * `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A Keyword Plan ad group keyword. Max number of keyword plan keywords per
 * plan: 10000.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword {
  /**
   * A keyword level max cpc bid in micros (for example, $1 = 1mm). The
   * currency is the same as the account currency code. This will override any
   * CPC bid set at the keyword plan ad group level. Not applicable for negative
   * keywords. (negative = true) This field is Optional.
   */
  cpcBidMicros?: bigint;
  /**
   * Output only. The ID of the Keyword Plan keyword.
   */
  readonly id?: bigint;
  /**
   * The Keyword Plan ad group to which this keyword belongs.
   */
  keywordPlanAdGroup?: string;
  /**
   * The keyword match type.
   */
  matchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
  /**
   * Immutable. If true, the keyword is negative.
   */
  negative?: boolean;
  /**
   * Immutable. The resource name of the Keyword Plan ad group keyword.
   * KeywordPlanAdGroupKeyword resource names have the form:
   * `customers/{customer_id}/keywordPlanAdGroupKeywords/{kp_ad_group_keyword_id}`
   */
  resourceName?: string;
  /**
   * The keyword text.
   */
  text?: string;
}

function serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A Keyword Plan campaign. Max number of keyword plan campaigns per plan
 * allowed: 1.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanCampaign {
  /**
   * A default max cpc bid in micros, and in the account currency, for all ad
   * groups under the campaign. This field is required and should not be empty
   * when creating Keyword Plan campaigns.
   */
  cpcBidMicros?: bigint;
  /**
   * The geo targets. Max number allowed: 20.
   */
  geoTargets?: GoogleAdsSearchads360V23Resources__KeywordPlanGeoTarget[];
  /**
   * Output only. The ID of the Keyword Plan campaign.
   */
  readonly id?: bigint;
  /**
   * The keyword plan this campaign belongs to.
   */
  keywordPlan?: string;
  /**
   * Targeting network. This field is required and should not be empty when
   * creating Keyword Plan campaigns.
   */
  keywordPlanNetwork?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_SEARCH" | "GOOGLE_SEARCH_AND_PARTNERS";
  /**
   * The languages targeted for the Keyword Plan campaign. Max allowed: 1.
   */
  languageConstants?: string[];
  /**
   * The name of the Keyword Plan campaign. This field is required and should
   * not be empty when creating Keyword Plan campaigns.
   */
  name?: string;
  /**
   * Immutable. The resource name of the Keyword Plan campaign.
   * KeywordPlanCampaign resource names have the form:
   * `customers/{customer_id}/keywordPlanCampaigns/{kp_campaign_id}`
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanCampaign {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data: any): GoogleAdsSearchads360V23Resources__KeywordPlanCampaign {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A Keyword Plan Campaign keyword. Only negative keywords are supported for
 * Campaign Keyword.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanCampaignKeyword {
  /**
   * Output only. The ID of the Keyword Plan negative keyword.
   */
  readonly id?: bigint;
  /**
   * The Keyword Plan campaign to which this negative keyword belongs.
   */
  keywordPlanCampaign?: string;
  /**
   * The keyword match type.
   */
  matchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
  /**
   * Immutable. If true, the keyword is negative. Must be set to true. Only
   * negative campaign keywords are supported.
   */
  negative?: boolean;
  /**
   * Immutable. The resource name of the Keyword Plan Campaign keyword.
   * KeywordPlanCampaignKeyword resource names have the form:
   * `customers/{customer_id}/keywordPlanCampaignKeywords/{kp_campaign_keyword_id}`
   */
  resourceName?: string;
  /**
   * The keyword text.
   */
  text?: string;
}

/**
 * The forecasting period associated with the keyword plan.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanForecastPeriod {
  /**
   * A future date range relative to the current date used for forecasting.
   */
  dateInterval?:  | "UNSPECIFIED" | "UNKNOWN" | "NEXT_WEEK" | "NEXT_MONTH" | "NEXT_QUARTER";
  /**
   * The custom date range used for forecasting. It cannot be greater than a
   * year. The start and end dates must be in the future. Otherwise, an error
   * will be returned when the forecasting action is performed. The start and
   * end dates are inclusive.
   */
  dateRange?: GoogleAdsSearchads360V23Common__DateRange;
}

/**
 * A geo target.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordPlanGeoTarget {
  /**
   * Required. The resource name of the geo target.
   */
  geoTargetConstant?: string;
}

/**
 * A Smart Campaign keyword theme constant.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordThemeConstant {
  /**
   * Output only. The ISO-3166 Alpha-2 country code of the constant, eg. "US".
   * To display and query matching purpose, the keyword theme needs to be
   * localized.
   */
  readonly countryCode?: string;
  /**
   * Output only. The display name of the keyword theme or sub keyword theme.
   */
  readonly displayName?: string;
  /**
   * Output only. The ISO-639-1 language code with 2 letters of the constant,
   * eg. "en". To display and query matching purpose, the keyword theme needs to
   * be localized.
   */
  readonly languageCode?: string;
  /**
   * Output only. The resource name of the keyword theme constant. Keyword
   * theme constant resource names have the form:
   * `keywordThemeConstants/{keyword_theme_id}~{sub_keyword_theme_id}`
   */
  readonly resourceName?: string;
}

/**
 * A keyword view.
 */
export interface GoogleAdsSearchads360V23Resources__KeywordView {
  /**
   * Output only. The resource name of the keyword view. Keyword view resource
   * names have the form:
   * `customers/{customer_id}/keywordViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A label.
 */
export interface GoogleAdsSearchads360V23Resources__Label {
  /**
   * Output only. ID of the label. Read only.
   */
  readonly id?: bigint;
  /**
   * The name of the label. This field is required and should not be empty when
   * creating a new label. The length of this string should be between 1 and 80,
   * inclusive.
   */
  name?: string;
  /**
   * Immutable. Name of the resource. Label resource names have the form:
   * `customers/{owner_customer_id}/labels/{label_id}`
   */
  resourceName?: string;
  /**
   * Output only. Status of the label. Read only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * A type of label displaying text on a colored background.
   */
  textLabel?: GoogleAdsSearchads360V23Common__TextLabel;
}

/**
 * A landing page view with metrics aggregated at the unexpanded final URL
 * level.
 */
export interface GoogleAdsSearchads360V23Resources__LandingPageView {
  /**
   * Output only. The resource name of the landing page view. Landing page view
   * resource names have the form:
   * `customers/{customer_id}/landingPageViews/{unexpanded_final_url_fingerprint}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The advertiser-specified final URL.
   */
  readonly unexpandedFinalUrl?: string;
}

/**
 * A language.
 */
export interface GoogleAdsSearchads360V23Resources__LanguageConstant {
  /**
   * Output only. The language code, for example, "en_US", "en_AU", "es", "fr",
   * etc.
   */
  readonly code?: string;
  /**
   * Output only. The ID of the language constant.
   */
  readonly id?: bigint;
  /**
   * Output only. The full name of the language in English, for example,
   * "English (US)", "Spanish", etc.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the language constant. Language constant
   * resource names have the form: `languageConstants/{criterion_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Whether the language is targetable.
   */
  readonly targetable?: boolean;
}

/**
 * Data from lead form submissions.
 */
export interface GoogleAdsSearchads360V23Resources__LeadFormSubmissionData {
  /**
   * Output only. AdGroup associated with the submitted lead form.
   */
  readonly adGroup?: string;
  /**
   * Output only. AdGroupAd associated with the submitted lead form.
   */
  readonly adGroupAd?: string;
  /**
   * Output only. Asset associated with the submitted lead form.
   */
  readonly asset?: string;
  /**
   * Output only. Campaign associated with the submitted lead form.
   */
  readonly campaign?: string;
  /**
   * Output only. Submission data associated with a custom lead form.
   */
  readonly customLeadFormSubmissionFields?: GoogleAdsSearchads360V23Resources__CustomLeadFormSubmissionField[];
  /**
   * Output only. Google Click Id associated with the submissed lead form.
   */
  readonly gclid?: string;
  /**
   * Output only. ID of this lead form submission.
   */
  readonly id?: string;
  /**
   * Output only. Submission data associated with a lead form.
   */
  readonly leadFormSubmissionFields?: GoogleAdsSearchads360V23Resources__LeadFormSubmissionField[];
  /**
   * Output only. The resource name of the lead form submission data. Lead form
   * submission data resource names have the form:
   * `customers/{customer_id}/leadFormSubmissionData/{lead_form_submission_data_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The date and time at which the lead form was submitted. The
   * format is "yyyy-mm-dd hh:mm:ss+|-hh:mm", for example, "2019-01-01
   * 12:32:45-08:00".
   */
  readonly submissionDateTime?: string;
}

/**
 * Fields in the submitted lead form.
 */
export interface GoogleAdsSearchads360V23Resources__LeadFormSubmissionField {
  /**
   * Output only. Field type for lead form fields.
   */
  readonly fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "FULL_NAME" | "EMAIL" | "PHONE_NUMBER" | "POSTAL_CODE" | "STREET_ADDRESS" | "CITY" | "REGION" | "COUNTRY" | "WORK_EMAIL" | "COMPANY_NAME" | "WORK_PHONE" | "JOB_TITLE" | "GOVERNMENT_ISSUED_ID_CPF_BR" | "GOVERNMENT_ISSUED_ID_DNI_AR" | "GOVERNMENT_ISSUED_ID_DNI_PE" | "GOVERNMENT_ISSUED_ID_RUT_CL" | "GOVERNMENT_ISSUED_ID_CC_CO" | "GOVERNMENT_ISSUED_ID_CI_EC" | "GOVERNMENT_ISSUED_ID_RFC_MX" | "FIRST_NAME" | "LAST_NAME" | "VEHICLE_MODEL" | "VEHICLE_TYPE" | "PREFERRED_DEALERSHIP" | "VEHICLE_PURCHASE_TIMELINE" | "VEHICLE_OWNERSHIP" | "VEHICLE_PAYMENT_TYPE" | "VEHICLE_CONDITION" | "COMPANY_SIZE" | "ANNUAL_SALES" | "YEARS_IN_BUSINESS" | "JOB_DEPARTMENT" | "JOB_ROLE" | "OVER_18_AGE" | "OVER_19_AGE" | "OVER_20_AGE" | "OVER_21_AGE" | "OVER_22_AGE" | "OVER_23_AGE" | "OVER_24_AGE" | "OVER_25_AGE" | "OVER_26_AGE" | "OVER_27_AGE" | "OVER_28_AGE" | "OVER_29_AGE" | "OVER_30_AGE" | "OVER_31_AGE" | "OVER_32_AGE" | "OVER_33_AGE" | "OVER_34_AGE" | "OVER_35_AGE" | "OVER_36_AGE" | "OVER_37_AGE" | "OVER_38_AGE" | "OVER_39_AGE" | "OVER_40_AGE" | "OVER_41_AGE" | "OVER_42_AGE" | "OVER_43_AGE" | "OVER_44_AGE" | "OVER_45_AGE" | "OVER_46_AGE" | "OVER_47_AGE" | "OVER_48_AGE" | "OVER_49_AGE" | "OVER_50_AGE" | "OVER_51_AGE" | "OVER_52_AGE" | "OVER_53_AGE" | "OVER_54_AGE" | "OVER_55_AGE" | "OVER_56_AGE" | "OVER_57_AGE" | "OVER_58_AGE" | "OVER_59_AGE" | "OVER_60_AGE" | "OVER_61_AGE" | "OVER_62_AGE" | "OVER_63_AGE" | "OVER_64_AGE" | "OVER_65_AGE" | "EDUCATION_PROGRAM" | "EDUCATION_COURSE" | "PRODUCT" | "SERVICE" | "OFFER" | "CATEGORY" | "PREFERRED_CONTACT_METHOD" | "PREFERRED_LOCATION" | "PREFERRED_CONTACT_TIME" | "PURCHASE_TIMELINE" | "YEARS_OF_EXPERIENCE" | "JOB_INDUSTRY" | "LEVEL_OF_EDUCATION" | "PROPERTY_TYPE" | "REALTOR_HELP_GOAL" | "PROPERTY_COMMUNITY" | "PRICE_RANGE" | "NUMBER_OF_BEDROOMS" | "FURNISHED_PROPERTY" | "PETS_ALLOWED_PROPERTY" | "NEXT_PLANNED_PURCHASE" | "EVENT_SIGNUP_INTEREST" | "PREFERRED_SHOPPING_PLACES" | "FAVORITE_BRAND" | "TRANSPORTATION_COMMERCIAL_LICENSE_TYPE" | "EVENT_BOOKING_INTEREST" | "DESTINATION_COUNTRY" | "DESTINATION_CITY" | "DEPARTURE_COUNTRY" | "DEPARTURE_CITY" | "DEPARTURE_DATE" | "RETURN_DATE" | "NUMBER_OF_TRAVELERS" | "TRAVEL_BUDGET" | "TRAVEL_ACCOMMODATION";
  /**
   * Output only. Field value for lead form fields.
   */
  readonly fieldValue?: string;
}

/**
 * specific to a local services license.
 */
export interface GoogleAdsSearchads360V23Resources__LicenseVerificationArtifact {
  /**
   * Output only. The timestamp when this license expires. The format is
   * "YYYY-MM-DD HH:MM:SS" in the Google Ads account's timezone. Examples:
   * "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly expirationDateTime?: string;
  /**
   * Output only. The readonly field containing the information for an uploaded
   * license document.
   */
  readonly licenseDocumentReadonly?: GoogleAdsSearchads360V23Common__LocalServicesDocumentReadOnly;
  /**
   * Output only. First name of the licensee.
   */
  readonly licenseeFirstName?: string;
  /**
   * Output only. Last name of the licensee.
   */
  readonly licenseeLastName?: string;
  /**
   * Output only. License number.
   */
  readonly licenseNumber?: string;
  /**
   * Output only. License type / name.
   */
  readonly licenseType?: string;
  /**
   * Output only. License rejection reason.
   */
  readonly rejectionReason?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_NAME_MISMATCH" | "UNAUTHORIZED" | "EXPIRED" | "POOR_QUALITY" | "UNVERIFIABLE" | "WRONG_DOCUMENT_OR_ID" | "OTHER";
}

/**
 * A life event: a particular interest-based vertical to be targeted to reach
 * users when they are in the midst of important life milestones.
 */
export interface GoogleAdsSearchads360V23Resources__LifeEvent {
  /**
   * Output only. Availability information of the life event.
   */
  readonly availabilities?: GoogleAdsSearchads360V23Common__CriterionCategoryAvailability[];
  /**
   * Output only. The ID of the life event.
   */
  readonly id?: bigint;
  /**
   * Output only. True if the life event is launched to all channels and
   * locales.
   */
  readonly launchedToAll?: boolean;
  /**
   * Output only. The name of the life event, for example,"Recently Moved"
   */
  readonly name?: string;
  /**
   * Output only. The parent of the life_event.
   */
  readonly parent?: string;
  /**
   * Output only. The resource name of the life event. Life event resource
   * names have the form: `customers/{customer_id}/lifeEvents/{life_event_id}`
   */
  readonly resourceName?: string;
}

/**
 * Listing dimensions for the asset group listing group filter.
 */
export interface GoogleAdsSearchads360V23Resources__ListingGroupFilterDimension {
  /**
   * Brand of a product offer.
   */
  productBrand?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductBrand;
  /**
   * Category of a product offer.
   */
  productCategory?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory;
  /**
   * Locality of a product offer.
   */
  productChannel?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductChannel;
  /**
   * Condition of a product offer.
   */
  productCondition?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCondition;
  /**
   * Custom attribute of a product offer.
   */
  productCustomAttribute?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCustomAttribute;
  /**
   * Item id of a product offer.
   */
  productItemId?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductItemId;
  /**
   * Type of a product offer.
   */
  productType?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductType;
  /**
   * Filters for URLs in a page feed and URLs from the advertiser web domain.
   */
  webpage?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_Webpage;
}

function serializeGoogleAdsSearchads360V23Resources__ListingGroupFilterDimension(data: any): GoogleAdsSearchads360V23Resources__ListingGroupFilterDimension {
  return {
    ...data,
    productCategory: data["productCategory"] !== undefined ? serializeGoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory(data["productCategory"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__ListingGroupFilterDimension(data: any): GoogleAdsSearchads360V23Resources__ListingGroupFilterDimension {
  return {
    ...data,
    productCategory: data["productCategory"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory(data["productCategory"]) : undefined,
  };
}

/**
 * The path defining of dimensions defining a listing group filter.
 */
export interface GoogleAdsSearchads360V23Resources__ListingGroupFilterDimensionPath {
  /**
   * Output only. The complete path of dimensions through the listing group
   * filter hierarchy (excluding the root node) to this listing group filter.
   */
  readonly dimensions?: GoogleAdsSearchads360V23Resources__ListingGroupFilterDimension[];
}

/**
 * A local services employee resource.
 */
export interface GoogleAdsSearchads360V23Resources__LocalServicesEmployee {
  /**
   * Output only. Category of the employee. A list of Local Services category
   * IDs can be found at
   * https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids.
   */
  readonly categoryIds?: string[];
  /**
   * Output only. Timestamp of employee creation. The format is "YYYY-MM-DD
   * HH:MM:SS" in the Google Ads account's timezone. Examples: "2018-03-05
   * 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly creationDateTime?: string;
  /**
   * Output only. Email address of the employee.
   */
  readonly emailAddress?: string;
  /**
   * Output only. The institutions where the employee has completed their
   * fellowship.
   */
  readonly fellowships?: GoogleAdsSearchads360V23Resources__Fellowship[];
  /**
   * Output only. First name of the employee.
   */
  readonly firstName?: string;
  /**
   * Output only. The ID of the employee.
   */
  readonly id?: bigint;
  /**
   * Output only. Job title for this employee, such as "Senior partner" in
   * legal verticals.
   */
  readonly jobTitle?: string;
  /**
   * Output only. Languages that the employee speaks, represented as language
   * tags from https://developers.google.com/admin-sdk/directory/v1/languages
   */
  readonly languagesSpoken?: string[];
  /**
   * Output only. Last name of the employee.
   */
  readonly lastName?: string;
  /**
   * Output only. Middle name of the employee.
   */
  readonly middleName?: string;
  /**
   * Output only. NPI id associated with the employee.
   */
  readonly nationalProviderIdNumber?: string;
  /**
   * Output only. The institutions where the employee has completed their
   * residency.
   */
  readonly residencies?: GoogleAdsSearchads360V23Resources__Residency[];
  /**
   * Immutable. The resource name of the Local Services Verification. Local
   * Services Verification resource names have the form:
   * `customers/{customer_id}/localServicesEmployees/{gls_employee_id}`
   */
  resourceName?: string;
  /**
   * Output only. Employee status, such as DELETED or ENABLED.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Output only. Employee type.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "BUSINESS_OWNER" | "EMPLOYEE";
  /**
   * Output only. A list of degrees this employee has obtained, and wants to
   * feature.
   */
  readonly universityDegrees?: GoogleAdsSearchads360V23Resources__UniversityDegree[];
  /**
   * Output only. The year that this employee started practicing in this field.
   */
  readonly yearStartedPracticing?: number;
}

/**
 * Data from Local Services Lead. Contains details of Lead which is generated
 * when user calls, messages or books service from advertiser. More info:
 * https://ads.google.com/local-services-ads
 */
export interface GoogleAdsSearchads360V23Resources__LocalServicesLead {
  /**
   * Output only. Service category of the lead. For example:
   * `xcat:service_area_business_hvac`,
   * `xcat:service_area_business_real_estate_agent`, etc. For more details see:
   * https://developers.google.com/google-ads/api/data/codes-formats#local_services_ids
   */
  readonly categoryId?: string;
  /**
   * Output only. Lead's contact details.
   */
  readonly contactDetails?: GoogleAdsSearchads360V23Resources__ContactDetails;
  /**
   * Output only. The date time at which lead was created by Local Services
   * Ads. The format is "YYYY-MM-DD HH:MM:SS" in the Google Ads account's
   * timezone. Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly creationDateTime?: string;
  /**
   * Output only. Credit details of the lead.
   */
  readonly creditDetails?: GoogleAdsSearchads360V23Resources__CreditDetails;
  /**
   * Output only. ID of this Lead.
   */
  readonly id?: bigint;
  /**
   * Output only. True if the advertiser was charged for the lead.
   */
  readonly leadCharged?: boolean;
  /**
   * Output only. True if the advertiser submitted feedback for the lead.
   */
  readonly leadFeedbackSubmitted?: boolean;
  /**
   * Output only. Current status of lead.
   */
  readonly leadStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "ACTIVE" | "BOOKED" | "DECLINED" | "EXPIRED" | "DISABLED" | "CONSUMER_DECLINED" | "WIPED_OUT";
  /**
   * Output only. Type of Local Services lead: phone, message, booking, etc.
   */
  readonly leadType?:  | "UNSPECIFIED" | "UNKNOWN" | "MESSAGE" | "PHONE_CALL" | "BOOKING";
  /**
   * Output only. Language used by the Local Services provider linked to lead.
   * See https://developers.google.com/google-ads/api/data/codes-formats#locales
   */
  readonly locale?: string;
  /**
   * Output only. Note added by advertiser for the lead.
   */
  readonly note?: GoogleAdsSearchads360V23Resources__Note;
  /**
   * Immutable. The resource name of the local services lead data. Local
   * Services Lead resource name have the form
   * `customers/{customer_id}/localServicesLead/{local_services_lead_id}`
   */
  resourceName?: string;
  /**
   * Output only. Service for the category. For example: `buyer_agent`,
   * `seller_agent` for the category of
   * `xcat:service_area_business_real_estate_agent`.
   */
  readonly serviceId?: string;
}

/**
 * Data from Local Services Lead Conversation. Contains details of Lead
 * Conversation which is generated when user calls, messages or books service
 * from advertiser. These are appended to a Lead. More info:
 * https://ads.google.com/local-services-ads
 */
export interface GoogleAdsSearchads360V23Resources__LocalServicesLeadConversation {
  /**
   * Output only. Type of GLS lead conversation, EMAIL, MESSAGE, PHONE_CALL,
   * SMS, etc.
   */
  readonly conversationChannel?:  | "UNSPECIFIED" | "UNKNOWN" | "EMAIL" | "MESSAGE" | "PHONE_CALL" | "SMS" | "BOOKING" | "WHATSAPP" | "ADS_API";
  /**
   * Output only. The date time at which lead conversation was created by Local
   * Services Ads. The format is "YYYY-MM-DD HH:MM:SS" in the Google Ads
   * account's timezone. Examples: "2018-03-05 09:15:00" or "2018-02-01
   * 14:34:30"
   */
  readonly eventDateTime?: string;
  /**
   * Output only. ID of this Lead Conversation.
   */
  readonly id?: bigint;
  /**
   * Output only. Resource name of Lead associated to the Lead Conversation.
   */
  readonly lead?: string;
  /**
   * Output only. Details of message conversation in case of EMAIL, MESSAGE or
   * SMS.
   */
  readonly messageDetails?: GoogleAdsSearchads360V23Resources__MessageDetails;
  /**
   * Output only. Type of participant in the lead conversation, ADVERTISER or
   * CONSUMER.
   */
  readonly participantType?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER" | "CONSUMER";
  /**
   * Output only. Details of phone call conversation in case of PHONE_CALL.
   */
  readonly phoneCallDetails?: GoogleAdsSearchads360V23Resources__PhoneCallDetails;
  /**
   * Output only. The resource name of the local services lead conversation
   * data. Local Services Lead Conversation resource name have the form
   * `customers/{customer_id}/localServicesLeadConversation/{local_services_lead_conversation_id}`
   */
  readonly resourceName?: string;
}

/**
 * Settings for Local Services customer.
 */
export interface GoogleAdsSearchads360V23Resources__LocalServicesSettings {
  /**
   * Output only. A read-only list of geo vertical level insurance statuses.
   */
  readonly granularInsuranceStatuses?: GoogleAdsSearchads360V23Resources__GranularInsuranceStatus[];
  /**
   * Output only. A read-only list of geo vertical level license statuses.
   */
  readonly granularLicenseStatuses?: GoogleAdsSearchads360V23Resources__GranularLicenseStatus[];
}

/**
 * A local services verification resource.
 */
export interface GoogleAdsSearchads360V23Resources__LocalServicesVerificationArtifact {
  /**
   * Output only. The type of the verification artifact.
   */
  readonly artifactType?:  | "UNSPECIFIED" | "UNKNOWN" | "BACKGROUND_CHECK" | "INSURANCE" | "LICENSE" | "BUSINESS_REGISTRATION_CHECK";
  /**
   * Output only. A background check verification artifact.
   */
  readonly backgroundCheckVerificationArtifact?: GoogleAdsSearchads360V23Resources__BackgroundCheckVerificationArtifact;
  /**
   * Output only. A business registration check verification artifact.
   */
  readonly businessRegistrationCheckVerificationArtifact?: GoogleAdsSearchads360V23Resources__BusinessRegistrationCheckVerificationArtifact;
  /**
   * Output only. The timestamp when this verification artifact was created.
   * The format is "YYYY-MM-DD HH:MM:SS" in the Google Ads account's timezone.
   * Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly creationDateTime?: string;
  /**
   * Output only. The ID of the verification artifact.
   */
  readonly id?: bigint;
  /**
   * Output only. An insurance verification artifact.
   */
  readonly insuranceVerificationArtifact?: GoogleAdsSearchads360V23Resources__InsuranceVerificationArtifact;
  /**
   * Output only. A license verification artifact.
   */
  readonly licenseVerificationArtifact?: GoogleAdsSearchads360V23Resources__LicenseVerificationArtifact;
  /**
   * Immutable. The resource name of the Local Services Verification. Local
   * Services Verification resource names have the form:
   * `customers/{customer_id}/localServicesVerificationArtifacts/{verification_artifact_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the verification artifact.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PASSED" | "FAILED" | "PENDING" | "NO_SUBMISSION" | "CANCELLED";
}

/**
 * A location interest view summarizes the performance of adgroup location
 * interest criteria.
 */
export interface GoogleAdsSearchads360V23Resources__LocationInterestView {
  /**
   * Output only. The resource name of the location interest view. Location
   * interest view resource names have the form:
   * `customers/{customer_id}/locationInterestViews/{campaign_id}~{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A location view summarizes the performance of campaigns by a Location
 * criterion.
 */
export interface GoogleAdsSearchads360V23Resources__LocationView {
  /**
   * Output only. The resource name of the location view. Location view
   * resource names have the form:
   * `customers/{customer_id}/locationViews/{campaign_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A managed placement view.
 */
export interface GoogleAdsSearchads360V23Resources__ManagedPlacementView {
  /**
   * Output only. The resource name of the Managed Placement view. Managed
   * placement view resource names have the form:
   * `customers/{customer_id}/managedPlacementViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A view that reports metrics for locations where users showed interest, and
 * which matched the advertiser's location interest targeting (defined as geo
 * targets at the AdGroup level). The data is aggregated at the country level by
 * default. This view is currently only available for AI Max campaigns.
 */
export interface GoogleAdsSearchads360V23Resources__MatchedLocationInterestView {
  /**
   * Output only. The resource name of the matched location interest view.
   * Matched location interest view resource names have the form:
   * `customers/{customer_id}/matchedLocationInterestViews/{country_criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * Encapsulates an Audio.
 */
export interface GoogleAdsSearchads360V23Resources__MediaAudio {
  /**
   * Output only. The duration of the Audio in milliseconds.
   */
  readonly adDurationMillis?: bigint;
}

/**
 * Represents a ZIP archive media the content of which contains HTML5 assets.
 */
export interface GoogleAdsSearchads360V23Resources__MediaBundle {
  /**
   * Immutable. Raw zipped data.
   */
  data?: Uint8Array;
  /**
   * Output only. The url to access the uploaded zipped data. For example,
   * https://tpc.googlesyndication.com/simgad/123 This field is read-only.
   */
  readonly url?: string;
}

function serializeGoogleAdsSearchads360V23Resources__MediaBundle(data: any): GoogleAdsSearchads360V23Resources__MediaBundle {
  return {
    ...data,
    data: data["data"] !== undefined ? encodeBase64(data["data"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__MediaBundle(data: any): GoogleAdsSearchads360V23Resources__MediaBundle {
  return {
    ...data,
    data: data["data"] !== undefined ? decodeBase64(data["data"] as string) : undefined,
  };
}

/**
 * A media file.
 */
export interface GoogleAdsSearchads360V23Resources__MediaFile {
  /**
   * Output only. Encapsulates an Audio.
   */
  readonly audio?: GoogleAdsSearchads360V23Resources__MediaAudio;
  /**
   * Output only. The size of the media file in bytes.
   */
  readonly fileSize?: bigint;
  /**
   * Output only. The ID of the media file.
   */
  readonly id?: bigint;
  /**
   * Immutable. Encapsulates an Image.
   */
  image?: GoogleAdsSearchads360V23Resources__MediaImage;
  /**
   * Immutable. A ZIP archive media the content of which contains HTML5 assets.
   */
  mediaBundle?: GoogleAdsSearchads360V23Resources__MediaBundle;
  /**
   * Output only. The mime type of the media file.
   */
  readonly mimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "IMAGE_JPEG" | "IMAGE_GIF" | "IMAGE_PNG" | "FLASH" | "TEXT_HTML" | "PDF" | "MSWORD" | "MSEXCEL" | "RTF" | "AUDIO_WAV" | "AUDIO_MP3" | "HTML5_AD_ZIP";
  /**
   * Immutable. The name of the media file. The name can be used by clients to
   * help identify previously uploaded media.
   */
  name?: string;
  /**
   * Immutable. The resource name of the media file. Media file resource names
   * have the form: `customers/{customer_id}/mediaFiles/{media_file_id}`
   */
  resourceName?: string;
  /**
   * Immutable. The URL of where the original media file was downloaded from
   * (or a file name). Only used for media of type AUDIO and IMAGE.
   */
  sourceUrl?: string;
  /**
   * Immutable. Type of the media file.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "IMAGE" | "ICON" | "MEDIA_BUNDLE" | "AUDIO" | "VIDEO" | "DYNAMIC_IMAGE";
  /**
   * Immutable. Encapsulates a Video.
   */
  video?: GoogleAdsSearchads360V23Resources__MediaVideo;
}

function serializeGoogleAdsSearchads360V23Resources__MediaFile(data: any): GoogleAdsSearchads360V23Resources__MediaFile {
  return {
    ...data,
    image: data["image"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__MediaImage(data["image"]) : undefined,
    mediaBundle: data["mediaBundle"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__MediaBundle(data["mediaBundle"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__MediaFile(data: any): GoogleAdsSearchads360V23Resources__MediaFile {
  return {
    ...data,
    fileSize: data["fileSize"] !== undefined ? BigInt(data["fileSize"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    image: data["image"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__MediaImage(data["image"]) : undefined,
    mediaBundle: data["mediaBundle"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__MediaBundle(data["mediaBundle"]) : undefined,
  };
}

/**
 * Encapsulates an Image.
 */
export interface GoogleAdsSearchads360V23Resources__MediaImage {
  /**
   * Immutable. Raw image data.
   */
  data?: Uint8Array;
  /**
   * Output only. The url to the full size version of the image.
   */
  readonly fullSizeImageUrl?: string;
  /**
   * Output only. The url to the preview size version of the image.
   */
  readonly previewSizeImageUrl?: string;
}

function serializeGoogleAdsSearchads360V23Resources__MediaImage(data: any): GoogleAdsSearchads360V23Resources__MediaImage {
  return {
    ...data,
    data: data["data"] !== undefined ? encodeBase64(data["data"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__MediaImage(data: any): GoogleAdsSearchads360V23Resources__MediaImage {
  return {
    ...data,
    data: data["data"] !== undefined ? decodeBase64(data["data"] as string) : undefined,
  };
}

/**
 * Encapsulates a Video.
 */
export interface GoogleAdsSearchads360V23Resources__MediaVideo {
  /**
   * Output only. The duration of the Video in milliseconds.
   */
  readonly adDurationMillis?: bigint;
  /**
   * Output only. The Advertising Digital Identification code for this video,
   * as defined by the American Association of Advertising Agencies, used mainly
   * for television commercials.
   */
  readonly advertisingIdCode?: string;
  /**
   * Output only. The Industry Standard Commercial Identifier code for this
   * video, used mainly for television commercials.
   */
  readonly isciCode?: string;
  /**
   * Immutable. The YouTube video ID (as seen in YouTube URLs). Adding prefix
   * "https://www.youtube.com/watch?v=" to this ID will get the YouTube
   * streaming URL for this video.
   */
  youtubeVideoId?: string;
}

/**
 * The identifier for Google Merchant Center account
 */
export interface GoogleAdsSearchads360V23Resources__MerchantCenterIdentifier {
  /**
   * Immutable. The customer ID of the Google Merchant Center account. This
   * field is required and should not be empty when creating a new Merchant
   * Center link. It is unable to be modified after the creation of the link.
   */
  merchantCenterId?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources__MerchantCenterIdentifier(data: any): GoogleAdsSearchads360V23Resources__MerchantCenterIdentifier {
  return {
    ...data,
    merchantCenterId: data["merchantCenterId"] !== undefined ? String(data["merchantCenterId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__MerchantCenterIdentifier(data: any): GoogleAdsSearchads360V23Resources__MerchantCenterIdentifier {
  return {
    ...data,
    merchantCenterId: data["merchantCenterId"] !== undefined ? BigInt(data["merchantCenterId"]) : undefined,
  };
}

/**
 * The identifier for Merchant Center Account.
 */
export interface GoogleAdsSearchads360V23Resources__MerchantCenterLinkInvitationIdentifier {
  /**
   * Output only. The Merchant Center id of the Merchant account. This field is
   * read only
   */
  readonly merchantCenterId?: bigint;
}

/**
 * Represents details of text message in case of email, message or SMS.
 */
export interface GoogleAdsSearchads360V23Resources__MessageDetails {
  /**
   * Output only. URL to the SMS or email attachments. These URLs can be used
   * to download the contents of the attachment by using the developer token.
   */
  readonly attachmentUrls?: string[];
  /**
   * Output only. Textual content of the message.
   */
  readonly text?: string;
}

/**
 * A mobile application category constant.
 */
export interface GoogleAdsSearchads360V23Resources__MobileAppCategoryConstant {
  /**
   * Output only. The ID of the mobile app category constant.
   */
  readonly id?: number;
  /**
   * Output only. Mobile app category name.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the mobile app category constant. Mobile
   * app category constant resource names have the form:
   * `mobileAppCategoryConstants/{mobile_app_category_id}`
   */
  readonly resourceName?: string;
}

/**
 * A mobile device constant.
 */
export interface GoogleAdsSearchads360V23Resources__MobileDeviceConstant {
  /**
   * Output only. The ID of the mobile device constant.
   */
  readonly id?: bigint;
  /**
   * Output only. The manufacturer of the mobile device.
   */
  readonly manufacturerName?: string;
  /**
   * Output only. The name of the mobile device.
   */
  readonly name?: string;
  /**
   * Output only. The operating system of the mobile device.
   */
  readonly operatingSystemName?: string;
  /**
   * Output only. The resource name of the mobile device constant. Mobile
   * device constant resource names have the form:
   * `mobileDeviceConstants/{criterion_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The type of mobile device.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "TABLET";
}

/**
 * Represents a note added to a lead by the advertiser. Advertisers can edit
 * notes, which will reset edit time and change description.
 */
export interface GoogleAdsSearchads360V23Resources__Note {
  /**
   * Output only. Content of lead note.
   */
  readonly description?: string;
  /**
   * Output only. The date time when lead note was edited. The format is
   * "YYYY-MM-DD HH:MM:SS" in the Google Ads account's timezone. Examples:
   * "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
   */
  readonly editDateTime?: string;
}

/**
 * Alert for offline conversion client summary.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineConversionAlert {
  /**
   * Output only. Error for offline conversion client alert.
   */
  readonly error?: GoogleAdsSearchads360V23Resources__OfflineConversionError;
  /**
   * Output only. Percentage of the error, the range of this field should be
   * [0, 1.0].
   */
  readonly errorPercentage?: number;
}

/**
 * Possible errors for offline conversion client summary.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineConversionError {
  /**
   * Output only. Collection size error.
   */
  readonly collectionSizeError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_FEW" | "TOO_MANY";
  /**
   * Output only. Conversion adjustment upload error.
   */
  readonly conversionAdjustmentUploadError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_RECENT_CONVERSION_ACTION" | "CONVERSION_ALREADY_RETRACTED" | "CONVERSION_NOT_FOUND" | "CONVERSION_EXPIRED" | "ADJUSTMENT_PRECEDES_CONVERSION" | "MORE_RECENT_RESTATEMENT_FOUND" | "TOO_RECENT_CONVERSION" | "CANNOT_RESTATE_CONVERSION_ACTION_THAT_ALWAYS_USES_DEFAULT_CONVERSION_VALUE" | "TOO_MANY_ADJUSTMENTS_IN_REQUEST" | "TOO_MANY_ADJUSTMENTS" | "RESTATEMENT_ALREADY_EXISTS" | "DUPLICATE_ADJUSTMENT_IN_REQUEST" | "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS" | "CONVERSION_ACTION_NOT_ELIGIBLE_FOR_ENHANCEMENT" | "INVALID_USER_IDENTIFIER" | "UNSUPPORTED_USER_IDENTIFIER" | "GCLID_DATE_TIME_PAIR_AND_ORDER_ID_BOTH_SET" | "CONVERSION_ALREADY_ENHANCED" | "DUPLICATE_ENHANCEMENT_IN_REQUEST" | "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCEMENT" | "MISSING_ORDER_ID_FOR_WEBPAGE" | "ORDER_ID_CONTAINS_PII" | "INVALID_JOB_ID" | "NO_CONVERSION_ACTION_FOUND" | "INVALID_CONVERSION_ACTION_TYPE";
  /**
   * Output only. Conversion upload error.
   */
  readonly conversionUploadError?:  | "UNSPECIFIED" | "UNKNOWN" | "TOO_MANY_CONVERSIONS_IN_REQUEST" | "UNPARSEABLE_GCLID" | "CONVERSION_PRECEDES_EVENT" | "EXPIRED_EVENT" | "TOO_RECENT_EVENT" | "EVENT_NOT_FOUND" | "UNAUTHORIZED_CUSTOMER" | "TOO_RECENT_CONVERSION_ACTION" | "CONVERSION_TRACKING_NOT_ENABLED_AT_IMPRESSION_TIME" | "EXTERNAL_ATTRIBUTION_DATA_SET_FOR_NON_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "EXTERNAL_ATTRIBUTION_DATA_NOT_SET_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "ORDER_ID_NOT_PERMITTED_FOR_EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION" | "ORDER_ID_ALREADY_IN_USE" | "DUPLICATE_ORDER_ID" | "TOO_RECENT_CALL" | "EXPIRED_CALL" | "CALL_NOT_FOUND" | "CONVERSION_PRECEDES_CALL" | "CONVERSION_TRACKING_NOT_ENABLED_AT_CALL_TIME" | "UNPARSEABLE_CALLERS_PHONE_NUMBER" | "CLICK_CONVERSION_ALREADY_EXISTS" | "CALL_CONVERSION_ALREADY_EXISTS" | "DUPLICATE_CLICK_CONVERSION_IN_REQUEST" | "DUPLICATE_CALL_CONVERSION_IN_REQUEST" | "CUSTOM_VARIABLE_NOT_ENABLED" | "CUSTOM_VARIABLE_VALUE_CONTAINS_PII" | "INVALID_CUSTOMER_FOR_CLICK" | "INVALID_CUSTOMER_FOR_CALL" | "CONVERSION_NOT_COMPLIANT_WITH_ATT_POLICY" | "CLICK_NOT_FOUND" | "INVALID_USER_IDENTIFIER" | "EXTERNALLY_ATTRIBUTED_CONVERSION_ACTION_NOT_PERMITTED_WITH_USER_IDENTIFIER" | "UNSUPPORTED_USER_IDENTIFIER" | "GBRAID_WBRAID_BOTH_SET" | "UNPARSEABLE_WBRAID" | "UNPARSEABLE_GBRAID" | "ONE_PER_CLICK_CONVERSION_ACTION_NOT_PERMITTED_WITH_BRAID" | "CUSTOMER_DATA_POLICY_PROHIBITS_ENHANCED_CONVERSIONS" | "CUSTOMER_NOT_ACCEPTED_CUSTOMER_DATA_TERMS" | "ORDER_ID_CONTAINS_PII" | "CUSTOMER_NOT_ENABLED_ENHANCED_CONVERSIONS_FOR_LEADS" | "INVALID_JOB_ID" | "NO_CONVERSION_ACTION_FOUND" | "INVALID_CONVERSION_ACTION_TYPE";
  /**
   * Output only. Date error.
   */
  readonly dateError?:  | "UNSPECIFIED" | "UNKNOWN" | "INVALID_FIELD_VALUES_IN_DATE" | "INVALID_FIELD_VALUES_IN_DATE_TIME" | "INVALID_STRING_DATE" | "INVALID_STRING_DATE_TIME_MICROS" | "INVALID_STRING_DATE_TIME_SECONDS" | "INVALID_STRING_DATE_TIME_SECONDS_WITH_OFFSET" | "EARLIER_THAN_MINIMUM_DATE" | "LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_DATE_LATER_THAN_MAXIMUM_DATE" | "DATE_RANGE_MINIMUM_AND_MAXIMUM_DATES_BOTH_NULL" | "DATE_RANGE_ERROR_START_TIME_MUST_BE_THE_START_OF_A_DAY" | "DATE_RANGE_ERROR_END_TIME_MUST_BE_THE_END_OF_A_DAY";
  /**
   * Output only. Distinct error.
   */
  readonly distinctError?:  | "UNSPECIFIED" | "UNKNOWN" | "DUPLICATE_ELEMENT" | "DUPLICATE_TYPE";
  /**
   * Output only. Field error.
   */
  readonly fieldError?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUIRED" | "IMMUTABLE_FIELD" | "INVALID_VALUE" | "VALUE_MUST_BE_UNSET" | "REQUIRED_NONEMPTY_LIST" | "FIELD_CANNOT_BE_CLEARED" | "BLOCKED_VALUE" | "FIELD_CAN_ONLY_BE_CLEARED";
  /**
   * Output only. Mutate error.
   */
  readonly mutateError?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE_NOT_FOUND" | "ID_EXISTS_IN_MULTIPLE_MUTATES" | "INCONSISTENT_FIELD_VALUES" | "MUTATE_NOT_ALLOWED" | "RESOURCE_NOT_IN_GOOGLE_ADS" | "RESOURCE_ALREADY_EXISTS" | "RESOURCE_DOES_NOT_SUPPORT_VALIDATE_ONLY" | "OPERATION_DOES_NOT_SUPPORT_PARTIAL_FAILURE" | "RESOURCE_READ_ONLY" | "EU_POLITICAL_ADVERTISING_DECLARATION_REQUIRED";
  /**
   * Output only. Not allowlisted error.
   */
  readonly notAllowlistedError?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_NOT_ALLOWLISTED_FOR_THIS_FEATURE";
  /**
   * Output only. String format error.
   */
  readonly stringFormatError?:  | "UNSPECIFIED" | "UNKNOWN" | "ILLEGAL_CHARS" | "INVALID_FORMAT";
  /**
   * Output only. String length error.
   */
  readonly stringLengthError?:  | "UNSPECIFIED" | "UNKNOWN" | "EMPTY" | "TOO_SHORT" | "TOO_LONG";
}

/**
 * Historical upload summary, grouped by upload date or job.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineConversionSummary {
  /**
   * Output only. Total count of failed event.
   */
  readonly failedCount?: bigint;
  /**
   * Output only. Dimension key for last N jobs.
   */
  readonly jobId?: bigint;
  /**
   * Output only. Total count of pending uploaded event.
   */
  readonly pendingCount?: bigint;
  /**
   * Output only. Total count of successful event.
   */
  readonly successfulCount?: bigint;
  /**
   * Output only. Dimension key for last N days.
   */
  readonly uploadDate?: string;
}

/**
 * Offline conversion upload summary at customer level.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineConversionUploadClientSummary {
  /**
   * Output only. Details for each error code. Alerts are generated from most
   * recent calendar day with upload stats.
   */
  readonly alerts?: GoogleAdsSearchads360V23Resources__OfflineConversionAlert[];
  /**
   * Output only. Client type of the upload event.
   */
  readonly client?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_ADS_API" | "GOOGLE_ADS_WEB_CLIENT" | "ADS_DATA_CONNECTOR";
  /**
   * Output only. Summary of history stats by last N days.
   */
  readonly dailySummaries?: GoogleAdsSearchads360V23Resources__OfflineConversionSummary[];
  /**
   * Output only. Summary of history stats by last N jobs.
   */
  readonly jobSummaries?: GoogleAdsSearchads360V23Resources__OfflineConversionSummary[];
  /**
   * Output only. Date for the latest upload batch. The format is "yyyy-mm-dd
   * hh:mm:ss", and it's in the time zone of the Google Ads account.
   */
  readonly lastUploadDateTime?: string;
  /**
   * Output only. Total count of pending uploaded events.
   */
  readonly pendingEventCount?: bigint;
  /**
   * Output only. The ratio of total pending events to total events.
   */
  readonly pendingRate?: number;
  /**
   * Output only. The resource name of the offline conversion upload summary at
   * customer level. Offline conversion upload client summary resource names
   * have the form:
   * `customers/{customer_id}/offlineConversionUploadClientSummaries/{client}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Overall status for offline conversion client summary. Status
   * is generated from most recent calendar day with upload stats.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "EXCELLENT" | "GOOD" | "NEEDS_ATTENTION" | "NO_RECENT_UPLOAD";
  /**
   * Output only. Total count of successful uploaded events.
   */
  readonly successfulEventCount?: bigint;
  /**
   * Output only. Successful rate.
   */
  readonly successRate?: number;
  /**
   * Output only. Total count of uploaded events.
   */
  readonly totalEventCount?: bigint;
}

/**
 * Offline conversion upload summary at conversion action level.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineConversionUploadConversionActionSummary {
  /**
   * Output only. Details for each error code. Alerts are generated from most
   * recent calendar day with upload stats.
   */
  readonly alerts?: GoogleAdsSearchads360V23Resources__OfflineConversionAlert[];
  /**
   * Output only. Client type of the upload event.
   */
  readonly client?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_ADS_API" | "GOOGLE_ADS_WEB_CLIENT" | "ADS_DATA_CONNECTOR";
  /**
   * Output only. Conversion action id.
   */
  readonly conversionActionId?: bigint;
  /**
   * Output only. The name of the conversion action.
   */
  readonly conversionActionName?: string;
  /**
   * Output only. Summary of history stats by last N days.
   */
  readonly dailySummaries?: GoogleAdsSearchads360V23Resources__OfflineConversionSummary[];
  /**
   * Output only. Summary of history stats by last N jobs.
   */
  readonly jobSummaries?: GoogleAdsSearchads360V23Resources__OfflineConversionSummary[];
  /**
   * Output only. Date for the latest upload batch. The format is "yyyy-mm-dd
   * hh:mm:ss", and it's in the time zone of the Google Ads account.
   */
  readonly lastUploadDateTime?: string;
  /**
   * Output only. Total count of pending uploaded events.
   */
  readonly pendingEventCount?: bigint;
  /**
   * Output only. The resource name of the offline conversion upload summary at
   * conversion action level. Offline conversion upload conversion action
   * summary resource names have the form:
   * `customers/{customer_id}/offlineConversionUploadConversionActionSummaries/{conversion_action_id}~{client}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Overall status for offline conversion upload conversion
   * action summary. Status is generated from most recent calendar day with
   * upload stats.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "EXCELLENT" | "GOOD" | "NEEDS_ATTENTION" | "NO_RECENT_UPLOAD";
  /**
   * Output only. Total count of successful uploaded events.
   */
  readonly successfulEventCount?: bigint;
  /**
   * Output only. Total count of uploaded events.
   */
  readonly totalEventCount?: bigint;
}

/**
 * A job containing offline user data of store visitors, or user list members
 * that will be processed asynchronously. The uploaded data isn't readable and
 * the processing results of the job can only be read using
 */
export interface GoogleAdsSearchads360V23Resources__OfflineUserDataJob {
  /**
   * Immutable. Metadata for data updates to a CRM-based user list.
   */
  customerMatchUserListMetadata?: GoogleAdsSearchads360V23Common__CustomerMatchUserListMetadata;
  /**
   * Immutable. User specified job ID.
   */
  externalId?: bigint;
  /**
   * Output only. Reason for the processing failure, if status is FAILED.
   */
  readonly failureReason?:  | "UNSPECIFIED" | "UNKNOWN" | "INSUFFICIENT_MATCHED_TRANSACTIONS" | "INSUFFICIENT_TRANSACTIONS" | "HIGH_AVERAGE_TRANSACTION_VALUE" | "LOW_AVERAGE_TRANSACTION_VALUE" | "NEWLY_OBSERVED_CURRENCY_CODE";
  /**
   * Output only. ID of this offline user data job.
   */
  readonly id?: bigint;
  /**
   * Output only. Metadata of offline user data job depicting match rate range.
   */
  readonly operationMetadata?: GoogleAdsSearchads360V23Resources__OfflineUserDataJobMetadata;
  /**
   * Immutable. The resource name of the offline user data job. Offline user
   * data job resource names have the form:
   * `customers/{customer_id}/offlineUserDataJobs/{offline_user_data_job_id}`
   */
  resourceName?: string;
  /**
   * Output only. Status of the job.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "RUNNING" | "SUCCESS" | "FAILED";
  /**
   * Immutable. Metadata for store sales data update.
   */
  storeSalesMetadata?: GoogleAdsSearchads360V23Common__StoreSalesMetadata;
  /**
   * Immutable. Type of the job.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "STORE_SALES_UPLOAD_FIRST_PARTY" | "STORE_SALES_UPLOAD_THIRD_PARTY" | "CUSTOMER_MATCH_USER_LIST" | "CUSTOMER_MATCH_WITH_ATTRIBUTES";
}

function serializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data: any): GoogleAdsSearchads360V23Resources__OfflineUserDataJob {
  return {
    ...data,
    externalId: data["externalId"] !== undefined ? String(data["externalId"]) : undefined,
    storeSalesMetadata: data["storeSalesMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__StoreSalesMetadata(data["storeSalesMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data: any): GoogleAdsSearchads360V23Resources__OfflineUserDataJob {
  return {
    ...data,
    externalId: data["externalId"] !== undefined ? BigInt(data["externalId"]) : undefined,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    storeSalesMetadata: data["storeSalesMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__StoreSalesMetadata(data["storeSalesMetadata"]) : undefined,
  };
}

/**
 * Metadata of offline user data job.
 */
export interface GoogleAdsSearchads360V23Resources__OfflineUserDataJobMetadata {
  /**
   * Output only. Match rate of the Customer Match user list upload. Describes
   * the estimated match rate when the status of the job is "RUNNING" and final
   * match rate when the final match rate is available after the status of the
   * job is "SUCCESS/FAILED".
   */
  readonly matchRateRange?:  | "UNSPECIFIED" | "UNKNOWN" | "MATCH_RANGE_LESS_THAN_20" | "MATCH_RANGE_20_TO_30" | "MATCH_RANGE_31_TO_40" | "MATCH_RANGE_41_TO_50" | "MATCH_RANGE_51_TO_60" | "MATCH_RANGE_61_TO_70" | "MATCH_RANGE_71_TO_80" | "MATCH_RANGE_81_TO_90" | "MATCH_RANGE_91_TO_100";
}

/**
 * A mobile operating system version or a range of versions, depending on
 * `operator_type`. List of available mobile platforms at
 * https://developers.google.com/google-ads/api/reference/data/codes-formats#mobile-platforms
 */
export interface GoogleAdsSearchads360V23Resources__OperatingSystemVersionConstant {
  /**
   * Output only. The ID of the operating system version.
   */
  readonly id?: bigint;
  /**
   * Output only. Name of the operating system.
   */
  readonly name?: string;
  /**
   * Output only. Determines whether this constant represents a single version
   * or a range of versions.
   */
  readonly operatorType?:  | "UNSPECIFIED" | "UNKNOWN" | "EQUALS_TO" | "GREATER_THAN_EQUALS_TO";
  /**
   * Output only. The OS Major Version number.
   */
  readonly osMajorVersion?: number;
  /**
   * Output only. The OS Minor Version number.
   */
  readonly osMinorVersion?: number;
  /**
   * Output only. The resource name of the operating system version constant.
   * Operating system version constant resource names have the form:
   * `operatingSystemVersionConstants/{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A paid organic search term view providing a view of search stats across ads
 * and organic listings aggregated by search term at the ad group level.
 */
export interface GoogleAdsSearchads360V23Resources__PaidOrganicSearchTermView {
  /**
   * Output only. The resource name of the search term view. Search term view
   * resource names have the form:
   * `customers/{customer_id}/paidOrganicSearchTermViews/{campaign_id}~
   * {ad_group_id}~{URL-base64 search term}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The search term.
   */
  readonly searchTerm?: string;
}

/**
 * A parental status view.
 */
export interface GoogleAdsSearchads360V23Resources__ParentalStatusView {
  /**
   * Output only. The resource name of the parental status view. Parental
   * Status view resource names have the form:
   * `customers/{customer_id}/parentalStatusViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A payments account, which can be used to set up billing for an Ads customer.
 */
export interface GoogleAdsSearchads360V23Resources__PaymentsAccount {
  /**
   * Output only. The currency code of the payments account. A subset of the
   * currency codes derived from the ISO 4217 standard is supported.
   */
  readonly currencyCode?: string;
  /**
   * Output only. The name of the payments account.
   */
  readonly name?: string;
  /**
   * Output only. Paying manager of this payment account.
   */
  readonly payingManagerCustomer?: string;
  /**
   * Output only. A 16 digit ID used to identify a payments account.
   */
  readonly paymentsAccountId?: string;
  /**
   * Output only. A 12 digit ID used to identify the payments profile
   * associated with the payments account.
   */
  readonly paymentsProfileId?: string;
  /**
   * Output only. The resource name of the payments account. PaymentsAccount
   * resource names have the form:
   * `customers/{customer_id}/paymentsAccounts/{payments_account_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. A secondary payments profile ID present in uncommon
   * situations, for example, when a sequential liability agreement has been
   * arranged.
   */
  readonly secondaryPaymentsProfileId?: string;
}

/**
 * A view with impression metrics for Performance Max campaign placements.
 */
export interface GoogleAdsSearchads360V23Resources__PerformanceMaxPlacementView {
  /**
   * Output only. The name displayed to represent the placement, such as the
   * URL name for websites, YouTube video name for YouTube videos, and
   * translated mobile app name for mobile apps.
   */
  readonly displayName?: string;
  /**
   * Output only. The default placement string, such as the website URL, mobile
   * application ID, or a YouTube video ID.
   */
  readonly placement?: string;
  /**
   * Output only. Type of the placement. Possible values for Performance Max
   * placements are WEBSITE, MOBILE_APPLICATION, or YOUTUBE_VIDEO.
   */
  readonly placementType?:  | "UNSPECIFIED" | "UNKNOWN" | "WEBSITE" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "GOOGLE_PRODUCTS";
  /**
   * Output only. The resource name of the Performance Max placement view.
   * Performance Max placement view resource names have the form:
   * `customers/{customer_id}/performanceMaxPlacementViews/{base_64_placement}`
   */
  readonly resourceName?: string;
  /**
   * Output only. URL of the placement, for example, website, link to the
   * mobile application in app store, or a YouTube video URL.
   */
  readonly targetUrl?: string;
}

/**
 * A per store view. This view provides per store impression reach and local
 * action conversion stats for advertisers.
 */
export interface GoogleAdsSearchads360V23Resources__PerStoreView {
  /**
   * Output only. First line of the store's address.
   */
  readonly address1?: string;
  /**
   * Output only. Second line of the store's address.
   */
  readonly address2?: string;
  /**
   * Output only. The name of the business.
   */
  readonly businessName?: string;
  /**
   * Output only. The city where the store is located.
   */
  readonly city?: string;
  /**
   * Output only. The two-letter country code for the store's location (e.g.,
   * "US").
   */
  readonly countryCode?: string;
  /**
   * Output only. The phone number of the store.
   */
  readonly phoneNumber?: string;
  /**
   * Output only. The place ID of the per store view.
   */
  readonly placeId?: string;
  /**
   * Output only. The postal code of the store's address.
   */
  readonly postalCode?: string;
  /**
   * Output only. The province or state of the store's address.
   */
  readonly province?: string;
  /**
   * Output only. The resource name of the per store view. Per Store view
   * resource names have the form:
   * `customers/{customer_id}/perStoreViews/{place_id}`
   */
  readonly resourceName?: string;
}

/**
 * Represents details of a phone call conversation.
 */
export interface GoogleAdsSearchads360V23Resources__PhoneCallDetails {
  /**
   * Output only. The duration (in milliseconds) of the phone call (end to
   * end).
   */
  readonly callDurationMillis?: bigint;
  /**
   * Output only. URL to the call recording audio file.
   */
  readonly callRecordingUrl?: string;
}

/**
 * A Product Category.
 */
export interface GoogleAdsSearchads360V23Resources__ProductCategoryConstant {
  /**
   * Output only. The ID of the product category. This ID is equivalent to the
   * google_product_category ID as described in this article:
   * https://support.google.com/merchants/answer/6324436.
   */
  readonly categoryId?: bigint;
  /**
   * Output only. Level of the product category.
   */
  readonly level?:  | "UNSPECIFIED" | "UNKNOWN" | "LEVEL1" | "LEVEL2" | "LEVEL3" | "LEVEL4" | "LEVEL5";
  /**
   * Output only. List of all available localizations of the product category.
   */
  readonly localizations?: GoogleAdsSearchads360V23Resources_ProductCategoryConstant_ProductCategoryLocalization[];
  /**
   * Output only. Resource name of the parent product category.
   */
  readonly productCategoryConstantParent?: string;
  /**
   * Output only. The resource name of the product category. Product category
   * resource names have the form:
   * `productCategoryConstants/{level}~{category_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. State of the product category.
   */
  readonly state?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "OBSOLETE";
}

/**
 * A product group view.
 */
export interface GoogleAdsSearchads360V23Resources__ProductGroupView {
  /**
   * Output only. The resource name of the product group view. Product group
   * view resource names have the form:
   * `customers/{customer_id}/productGroupViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * Represents the data sharing connection between
 */
export interface GoogleAdsSearchads360V23Resources__ProductLink {
  /**
   * Output only. Advertising Partner link.
   */
  readonly advertisingPartner?: GoogleAdsSearchads360V23Resources__AdvertisingPartnerIdentifier;
  /**
   * Immutable. Data partner link.
   */
  dataPartner?: GoogleAdsSearchads360V23Resources__DataPartnerIdentifier;
  /**
   * Immutable. Google Ads link.
   */
  googleAds?: GoogleAdsSearchads360V23Resources__GoogleAdsIdentifier;
  /**
   * Immutable. Google Merchant Center link.
   */
  merchantCenter?: GoogleAdsSearchads360V23Resources__MerchantCenterIdentifier;
  /**
   * Output only. The ID of the link. This field is read only.
   */
  readonly productLinkId?: bigint;
  /**
   * Immutable. Resource name of the product link. ProductLink resource names
   * have the form: ` `
   */
  resourceName?: string;
  /**
   * Output only. The type of the linked product.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "DATA_PARTNER" | "GOOGLE_ADS" | "HOTEL_CENTER" | "MERCHANT_CENTER" | "ADVERTISING_PARTNER";
}

function serializeGoogleAdsSearchads360V23Resources__ProductLink(data: any): GoogleAdsSearchads360V23Resources__ProductLink {
  return {
    ...data,
    dataPartner: data["dataPartner"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__DataPartnerIdentifier(data["dataPartner"]) : undefined,
    merchantCenter: data["merchantCenter"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__MerchantCenterIdentifier(data["merchantCenter"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__ProductLink(data: any): GoogleAdsSearchads360V23Resources__ProductLink {
  return {
    ...data,
    dataPartner: data["dataPartner"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__DataPartnerIdentifier(data["dataPartner"]) : undefined,
    merchantCenter: data["merchantCenter"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__MerchantCenterIdentifier(data["merchantCenter"]) : undefined,
    productLinkId: data["productLinkId"] !== undefined ? BigInt(data["productLinkId"]) : undefined,
  };
}

/**
 * Represents an invitation for data sharing connection between a Google Ads
 * account and another account.
 */
export interface GoogleAdsSearchads360V23Resources__ProductLinkInvitation {
  /**
   * Output only. Advertising Partner link invitation.
   */
  readonly advertisingPartner?: GoogleAdsSearchads360V23Resources__AdvertisingPartnerLinkInvitationIdentifier;
  /**
   * Output only. Hotel link invitation.
   */
  readonly hotelCenter?: GoogleAdsSearchads360V23Resources__HotelCenterLinkInvitationIdentifier;
  /**
   * Output only. Merchant Center link invitation.
   */
  readonly merchantCenter?: GoogleAdsSearchads360V23Resources__MerchantCenterLinkInvitationIdentifier;
  /**
   * Output only. The ID of the product link invitation. This field is read
   * only.
   */
  readonly productLinkInvitationId?: bigint;
  /**
   * Immutable. The resource name of a product link invitation. Product link
   * invitation resource names have the form:
   * `customers/{customer_id}/productLinkInvitations/{product_link_invitation_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of the product link invitation. This field is read
   * only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCEPTED" | "REQUESTED" | "PENDING_APPROVAL" | "REVOKED" | "REJECTED" | "EXPIRED";
  /**
   * Output only. The type of the invited account. This field is read only and
   * can be used for filtering invitations with {@code
   * GoogleAdsService.SearchGoogleAdsRequest}.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "DATA_PARTNER" | "GOOGLE_ADS" | "HOTEL_CENTER" | "MERCHANT_CENTER" | "ADVERTISING_PARTNER";
}

/**
 * Qualifying Questions for Lead Form.
 */
export interface GoogleAdsSearchads360V23Resources__QualifyingQuestion {
  /**
   * Output only. The locale of the qualifying question.
   */
  readonly locale?: string;
  /**
   * Output only. The id of the qualifying question.
   */
  readonly qualifyingQuestionId?: bigint;
  /**
   * Output only. The resource name of the qualifying question.
   * 'qualifyingQuestions/{qualifyingQuestionId}'
   */
  readonly resourceName?: string;
  /**
   * Output only. The qualifying question.
   */
  readonly text?: string;
}

/**
 * A recommendation.
 */
export interface GoogleAdsSearchads360V23Resources__Recommendation {
  /**
   * Output only. The ad group targeted by this recommendation. This will be
   * set only when the recommendation affects a single ad group. This field will
   * be set for the following recommendation types: KEYWORD,
   * OPTIMIZE_AD_ROTATION, TEXT_AD
   */
  readonly adGroup?: string;
  /**
   * Output only. The call asset recommendation.
   */
  readonly callAssetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CallAssetRecommendation;
  /**
   * Output only. The callout asset recommendation.
   */
  readonly calloutAssetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CalloutAssetRecommendation;
  /**
   * Output only. The campaign targeted by this recommendation. This field will
   * be set for the following recommendation types: CALL_EXTENSION,
   * CALLOUT_EXTENSION, ENHANCED_CPC_OPT_IN, KEYWORD, KEYWORD_MATCH_TYPE,
   * MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN, OPTIMIZE_AD_ROTATION,
   * SEARCH_PARTNERS_OPT_IN, SITELINK_EXTENSION, TARGET_CPA_OPT_IN,
   * TARGET_ROAS_OPT_IN, TEXT_AD,
   */
  readonly campaign?: string;
  /**
   * Output only. The budget targeted by this recommendation. This will be set
   * only when the recommendation affects a single campaign budget. This field
   * will be set for the following recommendation types: CAMPAIGN_BUDGET,
   * FORECASTING_CAMPAIGN_BUDGET, MOVE_UNUSED_BUDGET
   */
  readonly campaignBudget?: string;
  /**
   * Output only. The campaign budget recommendation.
   */
  readonly campaignBudgetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudgetRecommendation;
  /**
   * Output only. The campaigns targeted by this recommendation. This field
   * will be set for the following recommendation types: CAMPAIGN_BUDGET,
   * FORECASTING_CAMPAIGN_BUDGET, MARGINAL_ROI_CAMPAIGN_BUDGET and
   * MOVE_UNUSED_BUDGET
   */
  readonly campaigns?: string[];
  /**
   * Output only. The custom audience opt in recommendation.
   */
  readonly customAudienceOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CustomAudienceOptInRecommendation;
  /**
   * Output only. Whether the recommendation is dismissed or not.
   */
  readonly dismissed?: boolean;
  /**
   * Output only. The Display Expansion opt-in recommendation.
   */
  readonly displayExpansionOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_DisplayExpansionOptInRecommendation;
  /**
   * Output only. Recommendation to enable dynamic image extensions on the
   * account, allowing Google to find the best images from ad landing pages and
   * complement text ads.
   */
  readonly dynamicImageExtensionOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_DynamicImageExtensionOptInRecommendation;
  /**
   * Output only. The Enhanced Cost-Per-Click Opt-In recommendation.
   */
  readonly enhancedCpcOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_EnhancedCpcOptInRecommendation;
  /**
   * Output only. The forecasting campaign budget recommendation.
   */
  readonly forecastingCampaignBudgetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudgetRecommendation;
  /**
   * Output only. The forecasting set target CPA recommendation.
   */
  readonly forecastingSetTargetCpaRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetCpaRecommendation;
  /**
   * Output only. The forecasting set target ROAS recommendation.
   */
  readonly forecastingSetTargetRoasRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetRoasRecommendation;
  /**
   * Output only. The impact on account performance as a result of applying the
   * recommendation.
   */
  readonly impact?: GoogleAdsSearchads360V23Resources_Recommendation_RecommendationImpact;
  /**
   * Output only. The improve Demand Gen ad strength recommendation.
   */
  readonly improveDemandGenAdStrengthRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ImproveDemandGenAdStrengthRecommendation;
  /**
   * Output only. Recommendation to deploy Google Tag on more pages.
   */
  readonly improveGoogleTagCoverageRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ImproveGoogleTagCoverageRecommendation;
  /**
   * Output only. The improve Performance Max ad strength recommendation.
   */
  readonly improvePerformanceMaxAdStrengthRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ImprovePerformanceMaxAdStrengthRecommendation;
  /**
   * Output only. The keyword match type recommendation.
   */
  readonly keywordMatchTypeRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_KeywordMatchTypeRecommendation;
  /**
   * Output only. The keyword recommendation.
   */
  readonly keywordRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_KeywordRecommendation;
  /**
   * Output only. The lead form asset recommendation.
   */
  readonly leadFormAssetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_LeadFormAssetRecommendation;
  /**
   * Output only. Recommendation to lower Target ROAS.
   */
  readonly lowerTargetRoasRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_LowerTargetRoasRecommendation;
  /**
   * Output only. The marginal ROI campaign budget recommendation.
   */
  readonly marginalRoiCampaignBudgetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudgetRecommendation;
  /**
   * Output only. The MaximizeClicks Opt-In recommendation.
   */
  readonly maximizeClicksOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_MaximizeClicksOptInRecommendation;
  /**
   * Output only. The MaximizeConversions Opt-In recommendation.
   */
  readonly maximizeConversionsOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_MaximizeConversionsOptInRecommendation;
  /**
   * Output only. The Maximize Conversion Value opt-in recommendation.
   */
  readonly maximizeConversionValueOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_MaximizeConversionValueOptInRecommendation;
  /**
   * Output only. The Dynamic Search Ads to Performance Max migration
   * recommendation.
   */
  readonly migrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_MigrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation;
  /**
   * Output only. The move unused budget recommendation.
   */
  readonly moveUnusedBudgetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_MoveUnusedBudgetRecommendation;
  /**
   * Output only. The Optimize Ad Rotation recommendation.
   */
  readonly optimizeAdRotationRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_OptimizeAdRotationRecommendation;
  /**
   * Output only. Recommendation to turn on Final URL expansion for your
   * Performance Max campaigns.
   */
  readonly performanceMaxFinalUrlOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_PerformanceMaxFinalUrlOptInRecommendation;
  /**
   * Output only. The Performance Max Opt In recommendation.
   */
  readonly performanceMaxOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_PerformanceMaxOptInRecommendation;
  /**
   * Output only. The raise target CPA bid too low recommendation.
   */
  readonly raiseTargetCpaBidTooLowRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_RaiseTargetCpaBidTooLowRecommendation;
  /**
   * Output only. Recommendation to raise Target CPA.
   */
  readonly raiseTargetCpaRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_RaiseTargetCpaRecommendation;
  /**
   * Output only. The refresh customer list recommendation.
   */
  readonly refreshCustomerMatchListRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_RefreshCustomerMatchListRecommendation;
  /**
   * Immutable. The resource name of the recommendation.
   * `customers/{customer_id}/recommendations/{recommendation_id}`
   */
  resourceName?: string;
  /**
   * Output only. The responsive search ad asset recommendation.
   */
  readonly responsiveSearchAdAssetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdAssetRecommendation;
  /**
   * Output only. The responsive search ad improve ad strength recommendation.
   */
  readonly responsiveSearchAdImproveAdStrengthRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdImproveAdStrengthRecommendation;
  /**
   * Output only. The add responsive search ad recommendation.
   */
  readonly responsiveSearchAdRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdRecommendation;
  /**
   * Output only. The Search Partners Opt-In recommendation.
   */
  readonly searchPartnersOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_SearchPartnersOptInRecommendation;
  /**
   * Output only. The set target CPA recommendation.
   */
  readonly setTargetCpaRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetCpaRecommendation;
  /**
   * Output only. The set target ROAS recommendation.
   */
  readonly setTargetRoasRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetRoasRecommendation;
  /**
   * Output only. The shopping add age group recommendation.
   */
  readonly shoppingAddAgeGroupRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping add color recommendation.
   */
  readonly shoppingAddColorRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping add gender recommendation.
   */
  readonly shoppingAddGenderRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping add GTIN recommendation.
   */
  readonly shoppingAddGtinRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping add more identifiers recommendation.
   */
  readonly shoppingAddMoreIdentifiersRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping add products to campaign recommendation.
   */
  readonly shoppingAddProductsToCampaignRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingAddProductsToCampaignRecommendation;
  /**
   * Output only. The shopping add size recommendation.
   */
  readonly shoppingAddSizeRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation;
  /**
   * Output only. The shopping fix disapproved products recommendation.
   */
  readonly shoppingFixDisapprovedProductsRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingFixDisapprovedProductsRecommendation;
  /**
   * Output only. The shopping fix Merchant Center account suspension warning
   * recommendation.
   */
  readonly shoppingFixMerchantCenterAccountSuspensionWarningRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation;
  /**
   * Output only. The shopping fix suspended Merchant Center account
   * recommendation.
   */
  readonly shoppingFixSuspendedMerchantCenterAccountRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation;
  /**
   * Output only. The shopping migrate Regular Shopping Campaign offers to
   * Performance Max recommendation.
   */
  readonly shoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation;
  /**
   * Output only. The shopping target all offers recommendation.
   */
  readonly shoppingTargetAllOffersRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_ShoppingTargetAllOffersRecommendation;
  /**
   * Output only. The sitelink asset recommendation.
   */
  readonly sitelinkAssetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_SitelinkAssetRecommendation;
  /**
   * Output only. The TargetCPA opt-in recommendation.
   */
  readonly targetCpaOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_TargetCpaOptInRecommendation;
  /**
   * Output only. The Target ROAS opt-in recommendation.
   */
  readonly targetRoasOptInRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_TargetRoasOptInRecommendation;
  /**
   * Output only. Add expanded text ad recommendation.
   */
  readonly textAdRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_TextAdRecommendation;
  /**
   * Output only. The type of recommendation.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BUDGET" | "KEYWORD" | "TEXT_AD" | "TARGET_CPA_OPT_IN" | "MAXIMIZE_CONVERSIONS_OPT_IN" | "ENHANCED_CPC_OPT_IN" | "SEARCH_PARTNERS_OPT_IN" | "MAXIMIZE_CLICKS_OPT_IN" | "OPTIMIZE_AD_ROTATION" | "KEYWORD_MATCH_TYPE" | "MOVE_UNUSED_BUDGET" | "FORECASTING_CAMPAIGN_BUDGET" | "TARGET_ROAS_OPT_IN" | "RESPONSIVE_SEARCH_AD" | "MARGINAL_ROI_CAMPAIGN_BUDGET" | "USE_BROAD_MATCH_KEYWORD" | "RESPONSIVE_SEARCH_AD_ASSET" | "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX" | "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH" | "DISPLAY_EXPANSION_OPT_IN" | "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX" | "RAISE_TARGET_CPA_BID_TOO_LOW" | "FORECASTING_SET_TARGET_ROAS" | "CALLOUT_ASSET" | "SITELINK_ASSET" | "CALL_ASSET" | "SHOPPING_ADD_AGE_GROUP" | "SHOPPING_ADD_COLOR" | "SHOPPING_ADD_GENDER" | "SHOPPING_ADD_GTIN" | "SHOPPING_ADD_MORE_IDENTIFIERS" | "SHOPPING_ADD_SIZE" | "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN" | "SHOPPING_FIX_DISAPPROVED_PRODUCTS" | "SHOPPING_TARGET_ALL_OFFERS" | "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT" | "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING" | "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX" | "DYNAMIC_IMAGE_EXTENSION_OPT_IN" | "RAISE_TARGET_CPA" | "LOWER_TARGET_ROAS" | "PERFORMANCE_MAX_OPT_IN" | "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH" | "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX" | "FORECASTING_SET_TARGET_CPA" | "SET_TARGET_CPA" | "SET_TARGET_ROAS" | "MAXIMIZE_CONVERSION_VALUE_OPT_IN" | "IMPROVE_GOOGLE_TAG_COVERAGE" | "PERFORMANCE_MAX_FINAL_URL_OPT_IN" | "REFRESH_CUSTOMER_MATCH_LIST" | "CUSTOM_AUDIENCE_OPT_IN" | "LEAD_FORM_ASSET" | "IMPROVE_DEMAND_GEN_AD_STRENGTH";
  /**
   * Output only. The upgrade a Local campaign to a Performance Max campaign
   * recommendation.
   */
  readonly upgradeLocalCampaignToPerformanceMaxRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_UpgradeLocalCampaignToPerformanceMaxRecommendation;
  /**
   * Output only. The upgrade a Smart Shopping campaign to a Performance Max
   * campaign recommendation.
   */
  readonly upgradeSmartShoppingCampaignToPerformanceMaxRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_UpgradeSmartShoppingCampaignToPerformanceMaxRecommendation;
  /**
   * Output only. The use broad match keyword recommendation.
   */
  readonly useBroadMatchKeywordRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_UseBroadMatchKeywordRecommendation;
}

/**
 * Recommendation Subscription resource
 */
export interface GoogleAdsSearchads360V23Resources__RecommendationSubscription {
  /**
   * Output only. Time in seconds when the subscription was first created. The
   * datetime is in the customer's time zone and in "yyyy-MM-dd HH:mm:ss"
   * format.
   */
  readonly createDateTime?: string;
  /**
   * Output only. Contains the time in microseconds, when the Recommendation
   * Subscription was last updated. The datetime is in the customer's time zone
   * and in "yyyy-MM-dd HH:mm:ss.ssssss" format.
   */
  readonly modifyDateTime?: string;
  /**
   * Immutable. The resource name of the recommendation subscription.
   * `customers/{customer_id}/recommendationSubscriptions/{recommendation_type}`
   */
  resourceName?: string;
  /**
   * Required. Status of the subscription, either enabled or paused.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "PAUSED";
  /**
   * Required. Immutable. The type of recommendation subscribed to.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BUDGET" | "KEYWORD" | "TEXT_AD" | "TARGET_CPA_OPT_IN" | "MAXIMIZE_CONVERSIONS_OPT_IN" | "ENHANCED_CPC_OPT_IN" | "SEARCH_PARTNERS_OPT_IN" | "MAXIMIZE_CLICKS_OPT_IN" | "OPTIMIZE_AD_ROTATION" | "KEYWORD_MATCH_TYPE" | "MOVE_UNUSED_BUDGET" | "FORECASTING_CAMPAIGN_BUDGET" | "TARGET_ROAS_OPT_IN" | "RESPONSIVE_SEARCH_AD" | "MARGINAL_ROI_CAMPAIGN_BUDGET" | "USE_BROAD_MATCH_KEYWORD" | "RESPONSIVE_SEARCH_AD_ASSET" | "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX" | "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH" | "DISPLAY_EXPANSION_OPT_IN" | "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX" | "RAISE_TARGET_CPA_BID_TOO_LOW" | "FORECASTING_SET_TARGET_ROAS" | "CALLOUT_ASSET" | "SITELINK_ASSET" | "CALL_ASSET" | "SHOPPING_ADD_AGE_GROUP" | "SHOPPING_ADD_COLOR" | "SHOPPING_ADD_GENDER" | "SHOPPING_ADD_GTIN" | "SHOPPING_ADD_MORE_IDENTIFIERS" | "SHOPPING_ADD_SIZE" | "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN" | "SHOPPING_FIX_DISAPPROVED_PRODUCTS" | "SHOPPING_TARGET_ALL_OFFERS" | "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT" | "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING" | "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX" | "DYNAMIC_IMAGE_EXTENSION_OPT_IN" | "RAISE_TARGET_CPA" | "LOWER_TARGET_ROAS" | "PERFORMANCE_MAX_OPT_IN" | "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH" | "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX" | "FORECASTING_SET_TARGET_CPA" | "SET_TARGET_CPA" | "SET_TARGET_ROAS" | "MAXIMIZE_CONVERSION_VALUE_OPT_IN" | "IMPROVE_GOOGLE_TAG_COVERAGE" | "PERFORMANCE_MAX_FINAL_URL_OPT_IN" | "REFRESH_CUSTOMER_MATCH_LIST" | "CUSTOM_AUDIENCE_OPT_IN" | "LEAD_FORM_ASSET" | "IMPROVE_DEMAND_GEN_AD_STRENGTH";
}

/**
 * A remarketing action. A snippet of JavaScript code that will collect the
 * product id and the type of page people visited (product page, shopping cart
 * page, purchase page, general site visit) on an advertiser's website.
 */
export interface GoogleAdsSearchads360V23Resources__RemarketingAction {
  /**
   * Output only. Id of the remarketing action.
   */
  readonly id?: bigint;
  /**
   * The name of the remarketing action. This field is required and should not
   * be empty when creating new remarketing actions.
   */
  name?: string;
  /**
   * Immutable. The resource name of the remarketing action. Remarketing action
   * resource names have the form:
   * `customers/{customer_id}/remarketingActions/{remarketing_action_id}`
   */
  resourceName?: string;
  /**
   * Output only. The snippets used for tracking remarketing actions.
   */
  readonly tagSnippets?: GoogleAdsSearchads360V23Common__TagSnippet[];
}

/**
 * Remarketing setting for a customer.
 */
export interface GoogleAdsSearchads360V23Resources__RemarketingSetting {
  /**
   * Output only. The Google tag.
   */
  readonly googleGlobalSiteTag?: string;
}

/**
 * Details about the employee's medical residency. Residency is a stage of
 * graduate medical education in which a qualified medical professional
 * practices under the supervision of a senior clinician.
 */
export interface GoogleAdsSearchads360V23Resources__Residency {
  /**
   * Output only. Year of completion.
   */
  readonly completionYear?: number;
  /**
   * Output only. Name of the institution at which the residency was completed.
   */
  readonly institutionName?: string;
}

/**
 * A Search Ads 360 campaign.
 */
export interface GoogleAdsSearchads360V23Resources__SearchAds360Campaign {
  /**
   * The type of product attribution filtering to apply to this campaign.
   */
  productAttributionFilterType?:  | "UNSPECIFIED" | "UNKNOWN" | "INHERIT" | "MANUAL" | "AUTO_BRAND";
  /**
   * Immutable. The resource name of the Search Ads 360 campaign. Search Ads
   * 360 campaign resource names have the form:
   * `customers/{customer_id}/searchAds360Campaigns/{campaign_id}`
   */
  resourceName?: string;
}

/**
 * A field or resource (artifact) used by SearchAds360Service.
 */
export interface GoogleAdsSearchads360V23Resources__SearchAds360Field {
  /**
   * Output only. The names of all resources that are selectable with the
   * described artifact. Fields from these resources do not segment metrics when
   * included in search queries. This field is only set for artifacts whose
   * category is RESOURCE.
   */
  readonly attributeResources?: string[];
  /**
   * Output only. The category of the artifact.
   */
  readonly category?:  | "UNSPECIFIED" | "UNKNOWN" | "RESOURCE" | "ATTRIBUTE" | "SEGMENT" | "METRIC";
  /**
   * Output only. This field determines the operators that can be used with the
   * artifact in WHERE clauses.
   */
  readonly dataType?:  | "UNSPECIFIED" | "UNKNOWN" | "BOOLEAN" | "DATE" | "DOUBLE" | "ENUM" | "FLOAT" | "INT32" | "INT64" | "MESSAGE" | "RESOURCE_NAME" | "STRING" | "UINT64";
  /**
   * Output only. Values the artifact can assume if it is a field of type ENUM.
   * This field is only set for artifacts of category SEGMENT or ATTRIBUTE.
   */
  readonly enumValues?: string[];
  /**
   * Output only. Whether the artifact can be used in a WHERE clause in search
   * queries.
   */
  readonly filterable?: boolean;
  /**
   * Output only. Whether the field artifact is repeated.
   */
  readonly isRepeated?: boolean;
  /**
   * Output only. This field lists the names of all metrics that are selectable
   * with the described artifact when it is used in the FROM clause. It is only
   * set for artifacts whose category is RESOURCE.
   */
  readonly metrics?: string[];
  /**
   * Output only. The name of the artifact.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the artifact. Artifact resource names
   * have the form: `SearchAds360Fields/{name}`
   */
  readonly resourceName?: string;
  /**
   * Output only. This field lists the names of all artifacts, whether a
   * segment or another resource, that segment metrics when included in search
   * queries and when the described artifact is used in the FROM clause. It is
   * only set for artifacts whose category is RESOURCE.
   */
  readonly segments?: string[];
  /**
   * Output only. Whether the artifact can be used in a SELECT clause in search
   * queries.
   */
  readonly selectable?: boolean;
  /**
   * Output only. The names of all resources, segments, and metrics that are
   * selectable with the described artifact.
   */
  readonly selectableWith?: string[];
  /**
   * Output only. Whether the artifact can be used in a ORDER BY clause in
   * search queries.
   */
  readonly sortable?: boolean;
  /**
   * Output only. The URL of proto describing the artifact's data type.
   */
  readonly typeUrl?: string;
}

/**
 * A search term view with metrics aggregated by search term at the ad group
 * level. This view does not include Performance Max data. If you are looking
 * for Performance Max search term data, use the CampaignSearchTermView instead.
 */
export interface GoogleAdsSearchads360V23Resources__SearchTermView {
  /**
   * Output only. The ad group the search term served in.
   */
  readonly adGroup?: string;
  /**
   * Output only. The resource name of the search term view. Search term view
   * resource names have the form:
   * `customers/{customer_id}/searchTermViews/{campaign_id}~{ad_group_id}~{URL-base64_search_term}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The search term.
   */
  readonly searchTerm?: string;
  /**
   * Output only. Indicates whether the search term is currently one of your
   * targeted or excluded keywords.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ADDED" | "EXCLUDED" | "ADDED_EXCLUDED" | "NONE";
}

/**
 * A criterion belonging to a shared set.
 */
export interface GoogleAdsSearchads360V23Resources__SharedCriterion {
  /**
   * Immutable. Brand.
   */
  brand?: GoogleAdsSearchads360V23Common__BrandInfo;
  /**
   * Output only. The ID of the criterion. This field is ignored for mutates.
   */
  readonly criterionId?: bigint;
  /**
   * Immutable. Keyword.
   */
  keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Immutable. Mobile App Category.
   */
  mobileAppCategory?: GoogleAdsSearchads360V23Common__MobileAppCategoryInfo;
  /**
   * Immutable. Mobile application.
   */
  mobileApplication?: GoogleAdsSearchads360V23Common__MobileApplicationInfo;
  /**
   * Immutable. If true, the criterion is excluded. If false, the criterion is
   * targeted.
   */
  negative?: boolean;
  /**
   * Immutable. Placement.
   */
  placement?: GoogleAdsSearchads360V23Common__PlacementInfo;
  /**
   * Immutable. The resource name of the shared criterion. Shared set resource
   * names have the form:
   * `customers/{customer_id}/sharedCriteria/{shared_set_id}~{criterion_id}`
   */
  resourceName?: string;
  /**
   * Immutable. The shared set to which the shared criterion belongs.
   */
  sharedSet?: string;
  /**
   * Output only. The type of the criterion.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD" | "PLACEMENT" | "MOBILE_APP_CATEGORY" | "MOBILE_APPLICATION" | "DEVICE" | "LOCATION" | "LISTING_GROUP" | "AD_SCHEDULE" | "AGE_RANGE" | "GENDER" | "INCOME_RANGE" | "PARENTAL_STATUS" | "YOUTUBE_VIDEO" | "YOUTUBE_CHANNEL" | "USER_LIST" | "PROXIMITY" | "TOPIC" | "LISTING_SCOPE" | "LANGUAGE" | "IP_BLOCK" | "CONTENT_LABEL" | "CARRIER" | "USER_INTEREST" | "WEBPAGE" | "OPERATING_SYSTEM_VERSION" | "APP_PAYMENT_MODEL" | "MOBILE_DEVICE" | "CUSTOM_AFFINITY" | "CUSTOM_INTENT" | "LOCATION_GROUP" | "CUSTOM_AUDIENCE" | "COMBINED_AUDIENCE" | "KEYWORD_THEME" | "AUDIENCE" | "NEGATIVE_KEYWORD_LIST" | "LOCAL_SERVICE_ID" | "SEARCH_THEME" | "BRAND" | "BRAND_LIST" | "LIFE_EVENT" | "WEBPAGE_LIST" | "VIDEO_LINEUP" | "PLACEMENT_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST" | "VERTICAL_ADS_ITEM_GROUP_RULE";
  /**
   * Immutable. Vertical ads item group rule.
   */
  verticalAdsItemGroupRule?: GoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo;
  /**
   * Immutable. Webpage.
   */
  webpage?: GoogleAdsSearchads360V23Common__WebpageInfo;
  /**
   * Immutable. YouTube Channel.
   */
  youtubeChannel?: GoogleAdsSearchads360V23Common__YouTubeChannelInfo;
  /**
   * Immutable. YouTube Video.
   */
  youtubeVideo?: GoogleAdsSearchads360V23Common__YouTubeVideoInfo;
}

function serializeGoogleAdsSearchads360V23Resources__SharedCriterion(data: any): GoogleAdsSearchads360V23Resources__SharedCriterion {
  return {
    ...data,
    verticalAdsItemGroupRule: data["verticalAdsItemGroupRule"] !== undefined ? serializeGoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo(data["verticalAdsItemGroupRule"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__SharedCriterion(data: any): GoogleAdsSearchads360V23Resources__SharedCriterion {
  return {
    ...data,
    criterionId: data["criterionId"] !== undefined ? BigInt(data["criterionId"]) : undefined,
    verticalAdsItemGroupRule: data["verticalAdsItemGroupRule"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__VerticalAdsItemGroupRuleInfo(data["verticalAdsItemGroupRule"]) : undefined,
  };
}

/**
 * SharedSets are used for sharing criterion exclusions across multiple
 * campaigns.
 */
export interface GoogleAdsSearchads360V23Resources__SharedSet {
  /**
   * Output only. The ID of this shared set. Read only.
   */
  readonly id?: bigint;
  /**
   * Output only. The number of shared criteria within this shared set. Read
   * only.
   */
  readonly memberCount?: bigint;
  /**
   * The name of this shared set. Required. Shared Sets must have names that
   * are unique among active shared sets of the same type. The length of this
   * string should be between 1 and 255 UTF-8 bytes, inclusive.
   */
  name?: string;
  /**
   * Output only. The number of campaigns associated with this shared set. Read
   * only.
   */
  readonly referenceCount?: bigint;
  /**
   * Immutable. The resource name of the shared set. Shared set resource names
   * have the form: `customers/{customer_id}/sharedSets/{shared_set_id}`
   */
  resourceName?: string;
  /**
   * Output only. The status of this shared set. Read only.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "REMOVED";
  /**
   * Immutable. The type of this shared set: each shared set holds only a
   * single kind of resource. Required. Immutable.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "NEGATIVE_KEYWORDS" | "NEGATIVE_PLACEMENTS" | "ACCOUNT_LEVEL_NEGATIVE_KEYWORDS" | "BRANDS" | "WEBPAGES" | "VERTICAL_ADS_ITEM_GROUP_RULE_LIST";
  /**
   * Immutable. Shared sets of type VERTICAL_ADS_ITEM_GROUP_RULE_LIST are
   * associated with a particular vertical (e.g. hotels, things to do, flights,
   * etc.). This field is required for shared sets of type
   * VERTICAL_ADS_ITEM_GROUP_RULE_LIST.
   */
  verticalAdsItemVerticalType?:  | "UNSPECIFIED" | "UNKNOWN" | "HOTELS" | "VACATION_RENTALS" | "RENTAL_CARS" | "EVENTS" | "THINGS_TO_DO" | "FLIGHTS";
}

/**
 * Shopping performance view. Provides Shopping campaign and Performance Max
 * campaign statistics aggregated at several product dimension levels. Product
 * dimension values from Merchant Center such as brand, category, custom
 * attributes, product condition, and product type will reflect the state of
 * each dimension as of the date and time when the corresponding event was
 * recorded. The number of impressions and clicks that
 * `shopping_performance_view` returns stats for may be different from campaign
 * reports. `shopping_performance_view` shows impressions and clicks on products
 * appearing in ads, while campaign reports show impressions and clicks on the
 * ads themselves. Depending on the format, an ad can show from zero to several
 * products, so the numbers may not match. In Search Ads 360 UI, you can query
 * impressions and clicks of products appearing in ads by selecting a column
 * from "Product attributes" in the report editor. For example, selecting the
 * "Brand" column is equivalent to selecting `segments.product_brand`.
 */
export interface GoogleAdsSearchads360V23Resources__ShoppingPerformanceView {
  /**
   * Output only. The resource name of the Shopping performance view. Shopping
   * performance view resource names have the form:
   * `customers/{customer_id}/shoppingPerformanceView`
   */
  readonly resourceName?: string;
}

/**
 * A shopping product from Google Merchant Center that can be advertised by
 * campaigns. The resource returns currently existing products from Google
 * Merchant Center accounts linked with the customer. A campaign includes a
 * product by specifying its merchant id (or, if available, the Multi Client
 * Account id of the merchant) in the `ShoppingSetting`, and can limit the
 * inclusion to products having a specified feed label. Standard Shopping
 * campaigns can also limit the inclusion through a
 * `campaign_criterion.listing_scope`. Queries to this resource specify a scope:
 * * Account: - Filters on campaigns or ad groups are not specified. - All
 * products from the linked Google Merchant Center accounts are returned. -
 * Metrics and some fields (see the per-field documentation) are aggregated
 * across all Shopping and Performance Max campaigns that include a product. *
 * Campaign: - An equality filter on `campaign` is specified. Supported campaign
 * types are Shopping, Performance Max, Demand Gen, Video, App. - Only products
 * that are included by the specified campaign are returned. - Metrics and some
 * fields (see the per-field documentation) are restricted to the specified
 * campaign. - Only the following metrics are supported for Demand Gen, Video,
 * App campaigns: impressions, clicks, ctr. * Ad group: - An equality filter on
 * `ad_group` and `campaign` is specified. Supported campaign types are
 * Shopping, Demand Gen, Video, App. - Only products that are included by the
 * specified campaign are returned. - Metrics and some fields (see the per-field
 * documentation) are restricted to the specified ad group. - Only the following
 * metrics are supported for Demand Gen, Video, App campaigns: impressions,
 * clicks, ctr. Note that segmentation by date segments is not permitted and
 * will return UNSUPPORTED_DATE_SEGMENTATION error. On the other hand, filtering
 * on date segments is allowed.
 */
export interface GoogleAdsSearchads360V23Resources__ShoppingProduct {
  /**
   * Output only. An ad group of a campaign that includes the product. This
   * field is selectable only in the ad group scope, which requires an equality
   * filter on `campaign` and `ad_group`.
   */
  readonly adGroup?: string;
  /**
   * Output only. The availability of the product as provided by the merchant.
   */
  readonly availability?:  | "UNSPECIFIED" | "UNKNOWN" | "IN_STOCK" | "OUT_OF_STOCK" | "PREORDER";
  /**
   * Output only. The brand of the product as provided by the merchant.
   */
  readonly brand?: string;
  /**
   * Output only. A campaign that includes the product. This field is
   * selectable only in the campaign scope, which requires an equality filter on
   * `campaign`.
   */
  readonly campaign?: string;
  /**
   * Output only. The category level 1 of the product.
   */
  readonly categoryLevel1?: string;
  /**
   * Output only. The category level 2 of the product.
   */
  readonly categoryLevel2?: string;
  /**
   * Output only. The category level 3 of the product.
   */
  readonly categoryLevel3?: string;
  /**
   * Output only. The category level 4 of the product.
   */
  readonly categoryLevel4?: string;
  /**
   * Output only. The category level 5 of the product.
   */
  readonly categoryLevel5?: string;
  /**
   * Output only. The product channel describing the locality of the product.
   */
  readonly channel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
  /**
   * Output only. The channel exclusivity of the product as provided by the
   * merchant.
   */
  readonly channelExclusivity?:  | "UNSPECIFIED" | "UNKNOWN" | "SINGLE_CHANNEL" | "MULTI_CHANNEL";
  /**
   * Output only. The condition of the product as provided by the merchant.
   */
  readonly condition?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "REFURBISHED" | "USED";
  /**
   * Output only. The currency code as provided by the merchant, in ISO 4217
   * format.
   */
  readonly currencyCode?: string;
  /**
   * Output only. The custom attribute 0 of the product as provided by the
   * merchant.
   */
  readonly customAttribute0?: string;
  /**
   * Output only. The custom attribute 1 of the product as provided by the
   * merchant.
   */
  readonly customAttribute1?: string;
  /**
   * Output only. The custom attribute 2 of the product as provided by the
   * merchant.
   */
  readonly customAttribute2?: string;
  /**
   * Output only. The custom attribute 3 of the product as provided by the
   * merchant.
   */
  readonly customAttribute3?: string;
  /**
   * Output only. The custom attribute 4 of the product as provided by the
   * merchant.
   */
  readonly customAttribute4?: string;
  /**
   * Output only. The effective maximum cost-per-click (effective max. CPC) of
   * the product. This field is available only if the query specifies the
   * campaign or ad group scope, and if the campaign uses manual bidding. The
   * value is the highest bid set for the product in product groups across all
   * enabled ad groups. It represents the most you're willing to pay for a click
   * on the product. This field can take up to 24 hours to update.
   */
  readonly effectiveMaxCpcMicros?: bigint;
  /**
   * Output only. The product feed label as provided by the merchant.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The list of issues affecting whether the product can show in
   * ads. The value of this field is restricted to the scope specified in the
   * query, see the documentation of the resource. This field can take up to 24
   * hours to update. This field is not supported for App campaigns.
   */
  readonly issues?: GoogleAdsSearchads360V23Resources_ShoppingProduct_ProductIssue[];
  /**
   * Output only. The item id of the product as provided by the merchant.
   */
  readonly itemId?: string;
  /**
   * Output only. The language code as provided by the merchant, in BCP 47
   * format.
   */
  readonly languageCode?: string;
  /**
   * Output only. The id of the merchant that owns the product.
   */
  readonly merchantCenterId?: bigint;
  /**
   * Output only. The id of the Multi Client Account of the merchant, if
   * present.
   */
  readonly multiClientAccountId?: bigint;
  /**
   * Output only. The price of the product in micros as provided by the
   * merchant, in the currency specified in `currency_code` (e.g. $2.97 is
   * reported as 2970000).
   */
  readonly priceMicros?: bigint;
  /**
   * Output only. The URI of the product image as provided by the merchant.
   */
  readonly productImageUri?: string;
  /**
   * Output only. The product type level 1 as provided by the merchant.
   */
  readonly productTypeLevel1?: string;
  /**
   * Output only. The product type level 2 as provided by the merchant.
   */
  readonly productTypeLevel2?: string;
  /**
   * Output only. The product type level 3 as provided by the merchant.
   */
  readonly productTypeLevel3?: string;
  /**
   * Output only. The product type level 4 as provided by the merchant.
   */
  readonly productTypeLevel4?: string;
  /**
   * Output only. The product type level 5 as provided by the merchant.
   */
  readonly productTypeLevel5?: string;
  /**
   * Output only. The resource name of the shopping product. Shopping product
   * resource names have the form:
   * `customers/{customer_id}/shoppingProducts/{merchant_center_id}~{channel}~{language_code}~{feed_label}~{item_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The status that indicates whether the product can show in
   * ads. The value of this field is restricted to the scope specified in the
   * query, see the documentation of the resource. This field can take up to 24
   * hours to update. This field is not supported for App campaigns.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_ELIGIBLE" | "ELIGIBLE_LIMITED" | "ELIGIBLE";
  /**
   * Output only. Upper-case two-letter ISO 3166-1 code of the regions where
   * the product is intended to be shown in ads.
   */
  readonly targetCountries?: string[];
  /**
   * Output only. The title of the product as provided by the merchant.
   */
  readonly title?: string;
}

/**
 * A Smart campaign search term view.
 */
export interface GoogleAdsSearchads360V23Resources__SmartCampaignSearchTermView {
  /**
   * Output only. The Smart campaign the search term served in.
   */
  readonly campaign?: string;
  /**
   * Output only. The resource name of the Smart campaign search term view.
   * Smart campaign search term view resource names have the form:
   * `customers/{customer_id}/smartCampaignSearchTermViews/{campaign_id}~{URL-base64_search_term}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The search term.
   */
  readonly searchTerm?: string;
}

/**
 * Settings for configuring Smart campaigns.
 */
export interface GoogleAdsSearchads360V23Resources__SmartCampaignSetting {
  /**
   * Settings for configuring a business profile optimized for ads as this
   * campaign's landing page. This campaign must be linked to a business profile
   * to use this option. For more information on this feature, consult
   * https://support.google.com/google-ads/answer/9827068.
   */
  adOptimizedBusinessProfileSetting?: GoogleAdsSearchads360V23Resources_SmartCampaignSetting_AdOptimizedBusinessProfileSetting;
  /**
   * The language code to advertise in from the set of [supported language
   * codes]
   * (https://developers.google.com/google-ads/api/reference/data/codes-formats#languages).
   */
  advertisingLanguageCode?: string;
  /**
   * The name of the business.
   */
  businessName?: string;
  /**
   * The resource name of a Business Profile location. Business Profile
   * location resource names can be fetched through the Business Profile API and
   * adhere to the following format: `locations/{locationId}`. See the [Business
   * Profile API]
   * (https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations)
   * for additional details.
   */
  businessProfileLocation?: string;
  /**
   * Output only. The campaign to which these settings apply.
   */
  readonly campaign?: string;
  /**
   * The user-provided landing page URL for this Campaign.
   */
  finalUrl?: string;
  /**
   * Phone number and country code.
   */
  phoneNumber?: GoogleAdsSearchads360V23Resources_SmartCampaignSetting_PhoneNumber;
  /**
   * Immutable. The resource name of the Smart campaign setting. Smart campaign
   * setting resource names have the form:
   * `customers/{customer_id}/smartCampaignSettings/{campaign_id}`
   */
  resourceName?: string;
}

/**
 * A targeting expansion view with metrics. Returns metrics for automated
 * expansion over manual targeting.
 */
export interface GoogleAdsSearchads360V23Resources__TargetingExpansionView {
  /**
   * Output only. The resource name of the targeting expansion view. Targeting
   * expansion view resource names have the form:
   * `customers/{customer_id}/targetingExpansionViews/{campaign_id}~{targeting_expansion_type}`
   */
  readonly resourceName?: string;
}

/**
 * A data sharing connection, allowing the import of third party app analytics
 * into a Google Ads Customer.
 */
export interface GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLink {
  /**
   * Immutable. The resource name of the third party app analytics link. Third
   * party app analytics link resource names have the form:
   * `customers/{customer_id}/thirdPartyAppAnalyticsLinks/{account_link_id}`
   */
  resourceName?: string;
  /**
   * Output only. The shareable link ID that should be provided to the third
   * party when setting up app analytics. This is able to be regenerated using
   * regenerate method in the ThirdPartyAppAnalyticsLinkService.
   */
  readonly shareableLinkId?: string;
}

/**
 * The identifiers of a Third Party App Analytics Link.
 */
export interface GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier {
  /**
   * Immutable. The ID of the app analytics provider. This field should not be
   * empty when creating a new third party app analytics link. It is unable to
   * be modified after the creation of the link.
   */
  appAnalyticsProviderId?: bigint;
  /**
   * Immutable. A string that uniquely identifies a mobile application from
   * which the data was collected to the Google Ads API. For iOS, the ID string
   * is the 9 digit string that appears at the end of an App Store URL (for
   * example, "422689480" for "Gmail" whose App Store link is
   * https://apps.apple.com/us/app/gmail-email-by-google/id422689480). For
   * Android, the ID string is the application's package name (for example,
   * "com.google.android.gm" for "Gmail" given Google Play link
   * https://play.google.com/store/apps/details?id=com.google.android.gm) This
   * field should not be empty when creating a new third party app analytics
   * link. It is unable to be modified after the creation of the link.
   */
  appId?: string;
  /**
   * Immutable. The vendor of the app. This field should not be empty when
   * creating a new third party app analytics link. It is unable to be modified
   * after the creation of the link.
   */
  appVendor?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLE_APP_STORE" | "GOOGLE_APP_STORE";
}

function serializeGoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier(data: any): GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier {
  return {
    ...data,
    appAnalyticsProviderId: data["appAnalyticsProviderId"] !== undefined ? String(data["appAnalyticsProviderId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier(data: any): GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLinkIdentifier {
  return {
    ...data,
    appAnalyticsProviderId: data["appAnalyticsProviderId"] !== undefined ? BigInt(data["appAnalyticsProviderId"]) : undefined,
  };
}

/**
 * Use topics to target or exclude placements in the Google Display Network
 * based on the category into which the placement falls (for example, "Pets &
 * Animals/Pets/Dogs").
 */
export interface GoogleAdsSearchads360V23Resources__TopicConstant {
  /**
   * Output only. The ID of the topic.
   */
  readonly id?: bigint;
  /**
   * Output only. The category to target or exclude. Each subsequent element in
   * the array describes a more specific sub-category. For example, {"Pets &
   * Animals", "Pets", "Dogs"} represents the "Pets & Animals/Pets/Dogs"
   * category. List of available topic categories at
   * https://developers.google.com/google-ads/api/reference/data/verticals
   */
  readonly path?: string[];
  /**
   * Output only. The resource name of the topic constant. topic constant
   * resource names have the form: `topicConstants/{topic_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Resource name of parent of the topic constant.
   */
  readonly topicConstantParent?: string;
}

/**
 * A topic view.
 */
export interface GoogleAdsSearchads360V23Resources__TopicView {
  /**
   * Output only. The resource name of the topic view. Topic view resource
   * names have the form:
   * `customers/{customer_id}/topicViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A travel activity group view.
 */
export interface GoogleAdsSearchads360V23Resources__TravelActivityGroupView {
  /**
   * Output only. The resource name of the travel activity group view. Travel
   * Activity Group view resource names have the form:
   * `customers/{customer_id}/travelActivityGroupViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * A travel activity performance view.
 */
export interface GoogleAdsSearchads360V23Resources__TravelActivityPerformanceView {
  /**
   * Output only. The resource name of the travel activity performance view.
   * Travel Activity performance view resource names have the form:
   * `customers/{customer_id}/travelActivityPerformanceView`
   */
  readonly resourceName?: string;
}

/**
 * A list of degrees this employee has obtained, and wants to feature.
 */
export interface GoogleAdsSearchads360V23Resources__UniversityDegree {
  /**
   * Output only. Name of the degree obtained.
   */
  readonly degree?: string;
  /**
   * Output only. Year of graduation.
   */
  readonly graduationYear?: number;
  /**
   * Output only. Name of the university at which the degree was obtained.
   */
  readonly institutionName?: string;
}

/**
 * A user interest: a particular interest-based vertical to be targeted.
 */
export interface GoogleAdsSearchads360V23Resources__UserInterest {
  /**
   * Output only. Availability information of the user interest.
   */
  readonly availabilities?: GoogleAdsSearchads360V23Common__CriterionCategoryAvailability[];
  /**
   * Output only. True if the user interest is launched to all channels and
   * locales.
   */
  readonly launchedToAll?: boolean;
  /**
   * Output only. The name of the user interest.
   */
  readonly name?: string;
  /**
   * Output only. The resource name of the user interest. User interest
   * resource names have the form:
   * `customers/{customer_id}/userInterests/{user_interest_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Taxonomy type of the user interest.
   */
  readonly taxonomyType?:  | "UNSPECIFIED" | "UNKNOWN" | "AFFINITY" | "IN_MARKET" | "MOBILE_APP_INSTALL_USER" | "VERTICAL_GEO" | "NEW_SMART_PHONE_USER";
  /**
   * Output only. The ID of the user interest.
   */
  readonly userInterestId?: bigint;
  /**
   * Output only. The parent of the user interest.
   */
  readonly userInterestParent?: string;
}

/**
 * A user list. This is a list of users a customer may target. The unique key
 * of a user list consists of the following fields: `id`. Note that the `name`
 * must also be unique for user lists owned by a given customer, except in some
 * cases where `access_reason` is set to `SHARED`. Violating the unique name
 * constraint produces error: `UserListError.INVALID_NAME`.
 */
export interface GoogleAdsSearchads360V23Resources__UserList {
  /**
   * Output only. Indicates the reason this account has been granted access to
   * the list. The reason can be SHARED, OWNED, LICENSED or SUBSCRIBED. This
   * field is read-only.
   */
  readonly accessReason?:  | "UNSPECIFIED" | "UNKNOWN" | "OWNED" | "SHARED" | "LICENSED" | "SUBSCRIBED" | "AFFILIATED";
  /**
   * Indicates if this share is still enabled. When a UserList is shared with
   * the user this field is set to ENABLED. Later the userList owner can decide
   * to revoke the share and make it DISABLED. The default value of this field
   * is set to ENABLED.
   */
  accountUserListStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ENABLED" | "DISABLED";
  /**
   * User list targeting as a collection of conversion or remarketing actions.
   */
  basicUserList?: GoogleAdsSearchads360V23Common__BasicUserListInfo;
  /**
   * Indicating the reason why this user list membership status is closed. It
   * is only populated on lists that were automatically closed due to
   * inactivity, and will be cleared once the list membership status becomes
   * open.
   */
  closingReason?:  | "UNSPECIFIED" | "UNKNOWN" | "UNUSED";
  /**
   * User list of CRM users provided by the advertiser.
   */
  crmBasedUserList?: GoogleAdsSearchads360V23Common__CrmBasedUserListInfo;
  /**
   * Description of this user list.
   */
  description?: string;
  /**
   * Output only. Indicates this user list is eligible for Google Display
   * Network. This field is read-only.
   */
  readonly eligibleForDisplay?: boolean;
  /**
   * Indicates if this user list is eligible for Google Search Network.
   */
  eligibleForSearch?: boolean;
  /**
   * Output only. Id of the user list.
   */
  readonly id?: bigint;
  /**
   * An ID from external system. It is used by user list sellers to correlate
   * IDs on their systems.
   */
  integrationCode?: string;
  /**
   * User list that is a custom combination of user lists.
   */
  logicalUserList?: GoogleAdsSearchads360V23Common__LogicalUserListInfo;
  /**
   * Immutable. Lookalike User List.
   */
  lookalikeUserList?: GoogleAdsSearchads360V23Common__LookalikeUserListInfo;
  /**
   * Output only. Indicates match rate for Customer Match lists. The range of
   * this field is [0-100]. This will be null for other list types or when it's
   * not possible to calculate the match rate. This field is read-only.
   */
  readonly matchRatePercentage?: number;
  /**
   * Number of days a user's cookie stays on your list since its most recent
   * addition to the list. This field must be between 0 and 540 inclusive.
   * However, for CRM based userlists, this field can be set to 10000 which
   * means no expiration. Beginning on April 7, 2025, using a value of 10000 to
   * indicate no expiration will no longer be supported. This field is ignored
   * for logical_user_list and rule_based_user_list types. Membership to lists
   * of these types depends on the rules defined by the lists.
   */
  membershipLifeSpan?: bigint;
  /**
   * Membership status of this user list. Indicates whether a user list is open
   * or active. Only open user lists can accumulate more users and can be
   * targeted to.
   */
  membershipStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "OPEN" | "CLOSED";
  /**
   * Name of this user list. Unique per user list, except in some cases where a
   * user list of the same name has `access_reason` set to `SHARED`.
   */
  name?: string;
  /**
   * Output only. An option that indicates if a user may edit a list. Depends
   * on the list ownership and list type. For example, external remarketing user
   * lists are not editable. This field is -only.
   */
  readonly readOnly?: boolean;
  /**
   * Immutable. The resource name of the user list. User list resource names
   * have the form: `customers/{customer_id}/userLists/{user_list_id}`
   */
  resourceName?: string;
  /**
   * User list generated by a rule.
   */
  ruleBasedUserList?: GoogleAdsSearchads360V23Common__RuleBasedUserListInfo;
  /**
   * Output only. User list which are similar to users from another UserList.
   * These lists are readonly and automatically created by google.
   */
  readonly similarUserList?: GoogleAdsSearchads360V23Common__SimilarUserListInfo;
  /**
   * Output only. Estimated number of users in this user list, on the Google
   * Display Network. This value is if the number of users has not yet been
   * determined. This field is -only.
   */
  readonly sizeForDisplay?: bigint;
  /**
   * Output only. Estimated number of users in this user list in the google.com
   * domain. These are the users available for targeting in Search campaigns.
   * This value is null if the number of users has not yet been determined. This
   * field is read-only.
   */
  readonly sizeForSearch?: bigint;
  /**
   * Output only. Size range in terms of number of users of the UserList, on
   * the Google Display Network. This field is read-only.
   */
  readonly sizeRangeForDisplay?:  | "UNSPECIFIED" | "UNKNOWN" | "LESS_THAN_FIVE_HUNDRED" | "LESS_THAN_ONE_THOUSAND" | "ONE_THOUSAND_TO_TEN_THOUSAND" | "TEN_THOUSAND_TO_FIFTY_THOUSAND" | "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND" | "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND" | "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND" | "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION" | "ONE_MILLION_TO_TWO_MILLION" | "TWO_MILLION_TO_THREE_MILLION" | "THREE_MILLION_TO_FIVE_MILLION" | "FIVE_MILLION_TO_TEN_MILLION" | "TEN_MILLION_TO_TWENTY_MILLION" | "TWENTY_MILLION_TO_THIRTY_MILLION" | "THIRTY_MILLION_TO_FIFTY_MILLION" | "OVER_FIFTY_MILLION";
  /**
   * Output only. Size range in terms of number of users of the UserList, for
   * Search ads. This field is read-only.
   */
  readonly sizeRangeForSearch?:  | "UNSPECIFIED" | "UNKNOWN" | "LESS_THAN_FIVE_HUNDRED" | "LESS_THAN_ONE_THOUSAND" | "ONE_THOUSAND_TO_TEN_THOUSAND" | "TEN_THOUSAND_TO_FIFTY_THOUSAND" | "FIFTY_THOUSAND_TO_ONE_HUNDRED_THOUSAND" | "ONE_HUNDRED_THOUSAND_TO_THREE_HUNDRED_THOUSAND" | "THREE_HUNDRED_THOUSAND_TO_FIVE_HUNDRED_THOUSAND" | "FIVE_HUNDRED_THOUSAND_TO_ONE_MILLION" | "ONE_MILLION_TO_TWO_MILLION" | "TWO_MILLION_TO_THREE_MILLION" | "THREE_MILLION_TO_FIVE_MILLION" | "FIVE_MILLION_TO_TEN_MILLION" | "TEN_MILLION_TO_TWENTY_MILLION" | "TWENTY_MILLION_TO_THIRTY_MILLION" | "THIRTY_MILLION_TO_FIFTY_MILLION" | "OVER_FIFTY_MILLION";
  /**
   * Output only. Type of this list. This field is read-only.
   */
  readonly type?:  | "UNSPECIFIED" | "UNKNOWN" | "REMARKETING" | "LOGICAL" | "EXTERNAL_REMARKETING" | "RULE_BASED" | "SIMILAR" | "CRM_BASED" | "LOOKALIKE";
}

function serializeGoogleAdsSearchads360V23Resources__UserList(data: any): GoogleAdsSearchads360V23Resources__UserList {
  return {
    ...data,
    lookalikeUserList: data["lookalikeUserList"] !== undefined ? serializeGoogleAdsSearchads360V23Common__LookalikeUserListInfo(data["lookalikeUserList"]) : undefined,
    membershipLifeSpan: data["membershipLifeSpan"] !== undefined ? String(data["membershipLifeSpan"]) : undefined,
    ruleBasedUserList: data["ruleBasedUserList"] !== undefined ? serializeGoogleAdsSearchads360V23Common__RuleBasedUserListInfo(data["ruleBasedUserList"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources__UserList(data: any): GoogleAdsSearchads360V23Resources__UserList {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
    lookalikeUserList: data["lookalikeUserList"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__LookalikeUserListInfo(data["lookalikeUserList"]) : undefined,
    membershipLifeSpan: data["membershipLifeSpan"] !== undefined ? BigInt(data["membershipLifeSpan"]) : undefined,
    ruleBasedUserList: data["ruleBasedUserList"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__RuleBasedUserListInfo(data["ruleBasedUserList"]) : undefined,
    sizeForDisplay: data["sizeForDisplay"] !== undefined ? BigInt(data["sizeForDisplay"]) : undefined,
    sizeForSearch: data["sizeForSearch"] !== undefined ? BigInt(data["sizeForSearch"]) : undefined,
  };
}

/**
 * A user list customer type
 */
export interface GoogleAdsSearchads360V23Resources__UserListCustomerType {
  /**
   * Immutable. The user list customer type category
   */
  customerTypeCategory?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_CUSTOMERS" | "PURCHASERS" | "HIGH_VALUE_CUSTOMERS" | "DISENGAGED_CUSTOMERS" | "QUALIFIED_LEADS" | "CONVERTED_LEADS" | "PAID_SUBSCRIBERS" | "LOYALTY_SIGN_UPS" | "CART_ABANDONERS" | "LOYALTY_TIER_1_MEMBERS" | "LOYALTY_TIER_2_MEMBERS" | "LOYALTY_TIER_3_MEMBERS" | "LOYALTY_TIER_4_MEMBERS" | "LOYALTY_TIER_5_MEMBERS" | "LOYALTY_TIER_6_MEMBERS" | "LOYALTY_TIER_7_MEMBERS";
  /**
   * Immutable. The resource name of the user list customer type User list
   * customer type resource names have the form:
   * `customers/{customer_id}/userListCustomerTypes/{user_list_id}~{customer_type_category}`
   */
  resourceName?: string;
  /**
   * Immutable. The resource name for the user list this user list customer
   * type is associated with
   */
  userList?: string;
}

/**
 * A user location view. User Location View includes all metrics aggregated at
 * the country level, one row per country. It reports metrics at the actual
 * physical location of the user by targeted or not targeted location. If other
 * segment fields are used, you may get more than one row per country.
 */
export interface GoogleAdsSearchads360V23Resources__UserLocationView {
  /**
   * Output only. Criterion Id for the country.
   */
  readonly countryCriterionId?: bigint;
  /**
   * Output only. The resource name of the user location view. UserLocation
   * view resource names have the form:
   * `customers/{customer_id}/userLocationViews/{country_criterion_id}~{targeting_location}`
   */
  readonly resourceName?: string;
  /**
   * Output only. Indicates whether location was targeted or not.
   */
  readonly targetingLocation?: boolean;
}

export interface GoogleAdsSearchads360V23Resources__Video {
  /**
   * Output only. The owner channel id of the video.
   */
  readonly channelId?: string;
  /**
   * Output only. The duration of the video in milliseconds.
   */
  readonly durationMillis?: bigint;
  /**
   * Output only. The ID of the video.
   */
  readonly id?: string;
  /**
   * Output only. The resource name of the video. Video resource names have the
   * form: `customers/{customer_id}/videos/{video_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The title of the video.
   */
  readonly title?: string;
}

/**
 * Video specific information about a Customer.
 */
export interface GoogleAdsSearchads360V23Resources__VideoCustomer {
  /**
   * Third Party integration partners.
   */
  thirdPartyIntegrationPartners?: GoogleAdsSearchads360V23Common__CustomerThirdPartyIntegrationPartners;
}

/**
 * A visit.
 */
export interface GoogleAdsSearchads360V23Resources__Visit {
  /**
   * Output only. Ad ID. A value of 0 indicates that the ad is unattributed.
   */
  readonly adId?: bigint;
  /**
   * Output only. Asset field type of the visit event.
   */
  readonly assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. ID of the asset which was interacted with during the visit
   * event.
   */
  readonly assetId?: bigint;
  /**
   * Output only. A unique string for each visit that is passed to the landing
   * page as the click id URL parameter.
   */
  readonly clickId?: string;
  /**
   * Output only. Search Ads 360 keyword ID. A value of 0 indicates that the
   * keyword is unattributed.
   */
  readonly criterionId?: bigint;
  /**
   * Output only. The ID of the visit.
   */
  readonly id?: bigint;
  /**
   * Output only. The Search Ads 360 inventory account ID containing the
   * product that was clicked on. Search Ads 360 generates this ID when you link
   * an inventory account in Search Ads 360.
   */
  readonly merchantId?: bigint;
  /**
   * Output only. The sales channel of the product that was clicked on: Online
   * or Local.
   */
  readonly productChannel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
  /**
   * Output only. The country (ISO-3166 format) registered for the inventory
   * feed that contains the product clicked on.
   */
  readonly productCountryCode?: string;
  /**
   * Output only. The ID of the product clicked on.
   */
  readonly productId?: string;
  /**
   * Output only. The language (ISO-639-1) that has been set for the Merchant
   * Center feed containing data about the product.
   */
  readonly productLanguageCode?: string;
  /**
   * Output only. The store in the Local Inventory Ad that was clicked on. This
   * should match the store IDs used in your local products feed.
   */
  readonly productStoreId?: string;
  /**
   * Output only. The resource name of the visit. Visit resource names have the
   * form:
   * `customers/{customer_id}/visits/{ad_group_id}~{criterion_id}~{ds_visit_id}`
   */
  readonly resourceName?: string;
  /**
   * Output only. The timestamp of the visit event. The timestamp is in the
   * customer's time zone and in "yyyy-MM-dd HH:mm:ss" format.
   */
  readonly visitDateTime?: string;
}

/**
 * A webpage view.
 */
export interface GoogleAdsSearchads360V23Resources__WebpageView {
  /**
   * Output only. The resource name of the webpage view. Webpage view resource
   * names have the form:
   * `customers/{customer_id}/webpageViews/{ad_group_id}~{criterion_id}`
   */
  readonly resourceName?: string;
}

/**
 * The identifier for YouTube video
 */
export interface GoogleAdsSearchads360V23Resources__YoutubeVideoIdentifier {
  /**
   * Immutable. The ID of the hosting channel of the video. This is a string
   * value with “UC” prefix. For example, "UCK8sQmJBp8GCxrOtXWBpyEA".
   */
  channelId?: string;
  /**
   * Immutable. The ID of the video associated with the video link. This is the
   * 11 character string value used in the YouTube video URL. For example, video
   * ID is jV1vkHv4zq8 from the YouTube video URL
   * "https://www.youtube.com/watch?v=jV1vkHv4zq8&t=2s".
   */
  videoId?: string;
}

/**
 * An automated bidding strategy to help get the most conversions for your
 * campaigns while spending your budget.
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_MaximizeConversions {
  /**
   * Output only. The target cost per acquisition (CPA) option. This is the
   * average amount that you would like to spend per acquisition.
   */
  readonly targetCpaMicros?: bigint;
}

/**
 * An automated bidding strategy to help get the most conversion value for your
 * campaigns while spending your budget.
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_MaximizeConversionValue {
  /**
   * Output only. The target return on ad spend (ROAS) option. If set, the bid
   * strategy will maximize revenue while averaging the target return on ad
   * spend. If the target ROAS is high, the bid strategy may not be able to
   * spend the full budget. If the target ROAS is not set, the bid strategy will
   * aim to achieve the highest possible ROAS for the budget.
   */
  readonly targetRoas?: number;
}

/**
 * An automated bid strategy that sets bids to help get as many conversions as
 * possible at the target cost-per-acquisition (CPA) you set.
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetCpa {
  /**
   * Output only. Average CPA target. This target should be greater than or
   * equal to minimum billable unit based on the currency for the account.
   */
  readonly targetCpaMicros?: bigint;
}

/**
 * An automated bidding strategy that sets bids so that a certain percentage of
 * search ads are shown at the top of the first page (or other targeted
 * location).
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare {
  /**
   * Output only. The highest CPC bid the automated bidding system is permitted
   * to specify. This is a required field entered by the advertiser that sets
   * the ceiling and specified in local micros.
   */
  readonly cpcBidCeilingMicros?: bigint;
  /**
   * Output only. The targeted location on the search results page.
   */
  readonly location?:  | "UNSPECIFIED" | "UNKNOWN" | "ANYWHERE_ON_PAGE" | "TOP_OF_PAGE" | "ABSOLUTE_TOP_OF_PAGE";
  /**
   * The chosen fraction of ads to be shown in the targeted location in micros.
   * For example, 1% equals 10,000.
   */
  locationFractionMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare(data: any): GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare {
  return {
    ...data,
    locationFractionMicros: data["locationFractionMicros"] !== undefined ? String(data["locationFractionMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare(data: any): GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetImpressionShare {
  return {
    ...data,
    cpcBidCeilingMicros: data["cpcBidCeilingMicros"] !== undefined ? BigInt(data["cpcBidCeilingMicros"]) : undefined,
    locationFractionMicros: data["locationFractionMicros"] !== undefined ? BigInt(data["locationFractionMicros"]) : undefined,
  };
}

/**
 * An automated bidding strategy that helps you maximize revenue while
 * averaging a specific target return on ad spend (ROAS).
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetRoas {
  /**
   * Output only. The chosen revenue (based on conversion data) per unit of
   * spend.
   */
  readonly targetRoas?: number;
}

/**
 * An automated bid strategy that sets your bids to help get as many clicks as
 * possible within your budget.
 */
export interface GoogleAdsSearchads360V23Resources_AccessibleBiddingStrategy_TargetSpend {
  /**
   * Output only. Maximum bid limit that can be set by the bid strategy. The
   * limit applies to all keywords managed by the strategy.
   */
  readonly cpcBidCeilingMicros?: bigint;
  /**
   * Output only. The spend target under which to maximize clicks. A
   * TargetSpend bidder will attempt to spend the smaller of this value or the
   * natural throttling spend amount. If not specified, the budget is used as
   * the spend target. This field is deprecated and should no longer be used.
   * See
   * https://ads-developers.googleblog.com/2020/05/reminder-about-sunset-creation-of.html
   * for details.
   */
  readonly targetSpendMicros?: bigint;
}

/**
 * A pending proposal associated with the enclosing account-level budget, if
 * applicable.
 */
export interface GoogleAdsSearchads360V23Resources_AccountBudget_PendingAccountBudgetProposal {
  /**
   * Output only. The resource name of the proposal. AccountBudgetProposal
   * resource names have the form:
   * `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
   */
  readonly accountBudgetProposal?: string;
  /**
   * Output only. The time when this account-level budget proposal was created.
   * Formatted as yyyy-MM-dd HH:mm:ss.
   */
  readonly creationDateTime?: string;
  /**
   * Output only. The end time in yyyy-MM-dd HH:mm:ss format.
   */
  readonly endDateTime?: string;
  /**
   * Output only. The end time as a well-defined type, for example, FOREVER.
   */
  readonly endTimeType?:  | "UNSPECIFIED" | "UNKNOWN" | "NOW" | "FOREVER";
  /**
   * Output only. The name to assign to the account-level budget.
   */
  readonly name?: string;
  /**
   * Output only. Notes associated with this budget.
   */
  readonly notes?: string;
  /**
   * Output only. The type of this proposal, for example, END to end the budget
   * associated with this proposal.
   */
  readonly proposalType?:  | "UNSPECIFIED" | "UNKNOWN" | "CREATE" | "UPDATE" | "END" | "REMOVE";
  /**
   * Output only. A purchase order number is a value that helps users reference
   * this budget in their monthly invoices.
   */
  readonly purchaseOrderNumber?: string;
  /**
   * Output only. The spending limit in micros. One million is equivalent to
   * one unit.
   */
  readonly spendingLimitMicros?: bigint;
  /**
   * Output only. The spending limit as a well-defined type, for example,
   * INFINITE.
   */
  readonly spendingLimitType?:  | "UNSPECIFIED" | "UNKNOWN" | "INFINITE";
  /**
   * Output only. The start time in yyyy-MM-dd HH:mm:ss format.
   */
  readonly startDateTime?: string;
}

/**
 * Settings for AI Max feature in standard search adgroups.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroup_AiMaxAdGroupSetting {
  /**
   * Disable search term matching for this adgroup when AI Max is enabled.
   * Search term matching uses broad match, asset-based, and landing page-based
   * technology to improve reach.
   */
  disableSearchTermMatching?: boolean;
}

/**
 * Settings for the audience targeting.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroup_AudienceSetting {
  /**
   * Immutable. If true, this ad group uses an Audience resource for audience
   * targeting. If false, this ad group may use audience segment criteria
   * instead.
   */
  useAudienceGrouped?: boolean;
}

/**
 * Settings for Demand Gen ad groups.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroup_DemandGenAdGroupSettings {
  /**
   * Channel controls for Demand Gen ad groups.
   */
  channelControls?: GoogleAdsSearchads360V23Resources_AdGroupDemandGenAdGroupSettings_DemandGenChannelControls;
}

/**
 * Vertical ads setting feature to enable/disable ad group format controls in
 * search campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroup_VerticalAdsFormatSetting {
  /**
   * If true, text ads will be disabled for this ad group.
   */
  disableTextAds?: boolean;
  /**
   * If true, booking links will be enabled for this ad group.
   */
  enableBookingLinks?: boolean;
  /**
   * If true, vertical promotion ads will be enabled for this ad group.
   */
  enableVerticalPromotionAds?: boolean;
}

/**
 * Estimates for criterion bids at various positions.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroupCriterion_PositionEstimates {
  /**
   * Output only. Estimate of how many clicks per week you might get by
   * changing your keyword bid to the value in first_position_cpc_micros.
   */
  readonly estimatedAddClicksAtFirstPositionCpc?: bigint;
  /**
   * Output only. Estimate of how your cost per week might change when changing
   * your keyword bid to the value in first_position_cpc_micros.
   */
  readonly estimatedAddCostAtFirstPositionCpc?: bigint;
  /**
   * Output only. The estimate of the CPC bid required for ad to be shown on
   * first page of search results.
   */
  readonly firstPageCpcMicros?: bigint;
  /**
   * Output only. The estimate of the CPC bid required for ad to be displayed
   * in first position, at the top of the first page of search results.
   */
  readonly firstPositionCpcMicros?: bigint;
  /**
   * Output only. The estimate of the CPC bid required for ad to be displayed
   * at the top of the first page of search results.
   */
  readonly topOfPageCpcMicros?: bigint;
}

/**
 * A container for ad group criterion quality information.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroupCriterion_QualityInfo {
  /**
   * Output only. The performance of the ad compared to other advertisers.
   */
  readonly creativeQualityScore?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
  /**
   * Output only. The quality score of the landing page.
   */
  readonly postClickQualityScore?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
  /**
   * Output only. The quality score. This field may not be populated if Google
   * does not have enough information to determine a value.
   */
  readonly qualityScore?: number;
  /**
   * Output only. The click-through rate compared to that of other advertisers.
   */
  readonly searchPredictedCtr?:  | "UNSPECIFIED" | "UNKNOWN" | "BELOW_AVERAGE" | "AVERAGE" | "ABOVE_AVERAGE";
}

/**
 * Channel controls for Demand Gen ad groups.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroupDemandGenAdGroupSettings_DemandGenChannelControls {
  /**
   * Output only. Channel configuration reflecting which field in the oneof is
   * populated.
   */
  readonly channelConfig?:  | "UNSPECIFIED" | "UNKNOWN" | "CHANNEL_STRATEGY" | "SELECTED_CHANNELS";
  /**
   * High level channel strategy.
   */
  channelStrategy?:  | "UNSPECIFIED" | "UNKNOWN" | "ALL_CHANNELS" | "ALL_OWNED_AND_OPERATED_CHANNELS";
  /**
   * Explicitly selected channels. This field should be set with at least one
   * true value when present.
   */
  selectedChannels?: GoogleAdsSearchads360V23Resources_AdGroupDemandGenAdGroupSettingsDemandGenChannelControls_DemandGenSelectedChannels;
}

/**
 * Explicitly selected channels for channel controls in Demand Gen ad groups.
 */
export interface GoogleAdsSearchads360V23Resources_AdGroupDemandGenAdGroupSettingsDemandGenChannelControls_DemandGenSelectedChannels {
  /**
   * Whether to enable ads on the Discover channel.
   */
  discover?: boolean;
  /**
   * Whether to enable ads on the Display channel.
   */
  display?: boolean;
  /**
   * Whether to enable ads on the Gmail channel.
   */
  gmail?: boolean;
  /**
   * Whether to enable ads on the YouTube In-Feed channel.
   */
  youtubeInFeed?: boolean;
  /**
   * Whether to enable ads on the YouTube In-Stream channel.
   */
  youtubeInStream?: boolean;
  /**
   * Whether to enable ads on the YouTube Shorts channel.
   */
  youtubeShorts?: boolean;
}

/**
 * The details of the asset to add.
 */
export interface GoogleAdsSearchads360V23Resources_AdStrengthActionItem_AddAssetDetails {
  /**
   * Output only. The number of assets to add.
   */
  readonly assetCount?: number;
  /**
   * Output only. The asset field type of the asset(s) to add.
   */
  readonly assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Output only. For video field types, the required aspect ratio of the
   * video. When unset and asset_field_type is YOUTUBE_VIDEO, the system
   * recommends the advertiser upload any YouTube video, regardless of aspect
   * ratio.
   */
  readonly videoAspectRatioRequirement?:  | "UNSPECIFIED" | "UNKNOWN" | "HORIZONTAL" | "SQUARE" | "VERTICAL";
}

/**
 * For Performance Max for travel goals campaigns with a Hotel Center account
 * link. Read-only.
 */
export interface GoogleAdsSearchads360V23Resources_AssetSet_HotelPropertyData {
  /**
   * Output only. The hotel center ID of the partner.
   */
  readonly hotelCenterId?: bigint;
  /**
   * Output only. Name of the hotel partner.
   */
  readonly partnerName?: string;
}

/**
 * Merchant ID and Feed Label from Google Merchant Center.
 */
export interface GoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed {
  /**
   * Optional. Feed Label from Google Merchant Center.
   */
  feedLabel?: string;
  /**
   * Required. Merchant ID from Google Merchant Center
   */
  merchantId?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed(data: any): GoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed {
  return {
    ...data,
    merchantId: data["merchantId"] !== undefined ? String(data["merchantId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed(data: any): GoogleAdsSearchads360V23Resources_AssetSet_MerchantCenterFeed {
  return {
    ...data,
    merchantId: data["merchantId"] !== undefined ? BigInt(data["merchantId"]) : undefined,
  };
}

/**
 * Additional information about the batch job. This message is also used as
 * metadata returned in batch job Long Running Operations.
 */
export interface GoogleAdsSearchads360V23Resources_BatchJob_BatchJobMetadata {
  /**
   * Output only. The time when this batch job was completed. Formatted as
   * yyyy-MM-dd HH:mm:ss. Example: "2018-03-05 09:16:00"
   */
  readonly completionDateTime?: string;
  /**
   * Output only. The time when this batch job was created. Formatted as
   * yyyy-mm-dd hh:mm:ss. Example: "2018-03-05 09:15:00"
   */
  readonly creationDateTime?: string;
  /**
   * Output only. The fraction (between 0.0 and 1.0) of mutates that have been
   * processed. This is empty if the job hasn't started running yet.
   */
  readonly estimatedCompletionRatio?: number;
  /**
   * Output only. The number of mutate operations executed by the batch job.
   * Present only if the job has started running.
   */
  readonly executedOperationCount?: bigint;
  /**
   * Immutable. The approximate upper bound for how long a batch job can be
   * executed, in seconds. If the job runs more than the given upper bound, the
   * job will be canceled.
   */
  executionLimitSeconds?: number;
  /**
   * Output only. The number of mutate operations in the batch job.
   */
  readonly operationCount?: bigint;
  /**
   * Output only. The time when this batch job started running. Formatted as
   * yyyy-mm-dd hh:mm:ss. Example: "2018-03-05 09:15:30"
   */
  readonly startDateTime?: string;
}

/**
 * Container of payments account information for this billing.
 */
export interface GoogleAdsSearchads360V23Resources_BillingSetup_PaymentsAccountInfo {
  /**
   * Output only. A 16 digit id used to identify the payments account
   * associated with the billing setup. This must be passed as a string with
   * dashes, for example, "1234-5678-9012-3456".
   */
  readonly paymentsAccountId?: string;
  /**
   * Immutable. The name of the payments account associated with the billing
   * setup. This enables the user to specify a meaningful name for a payments
   * account to aid in reconciling monthly invoices. This name will be printed
   * in the monthly invoices.
   */
  paymentsAccountName?: string;
  /**
   * Immutable. A 12 digit id used to identify the payments profile associated
   * with the billing setup. This must be passed in as a string with dashes, for
   * example, "1234-5678-9012".
   */
  paymentsProfileId?: string;
  /**
   * Output only. The name of the payments profile associated with the billing
   * setup.
   */
  readonly paymentsProfileName?: string;
  /**
   * Output only. A secondary payments profile id present in uncommon
   * situations, for example, when a sequential liability agreement has been
   * arranged.
   */
  readonly secondaryPaymentsProfileId?: string;
}

/**
 * Settings for AI Max in search campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_AiMaxSetting {
  /**
   * Output only. Indicates whether a search campaign has adopted AI Max
   * before, and is required to have AI Max enabled to adopt campaign-level text
   * asset automation and brand list targeting in all API versions.
   */
  readonly bundlingRequired?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_REQUIRED" | "REQUIRED";
  /**
   * Controls whether or not AI Max features are served for this campaign.
   * Individual AI Max features are enabled or disabled by their respective
   * settings. But if enable_ai_max is set to false or cleared, then no AI Max
   * features will serve for this campaign, regardless of the other settings.
   * Search Term Matching is enabled by default when AI Max is enabled, and can
   * be disabled at the ad group level.
   */
  enableAiMax?: boolean;
}

/**
 * Campaign-level settings for App Campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_AppCampaignSetting {
  /**
   * Immutable. A string that uniquely identifies a mobile application.
   */
  appId?: string;
  /**
   * Immutable. The application store that distributes this specific app.
   */
  appStore?:  | "UNSPECIFIED" | "UNKNOWN" | "APPLE_APP_STORE" | "GOOGLE_APP_STORE";
  /**
   * Represents the goal which the bidding strategy of this app campaign should
   * optimize towards.
   */
  biddingStrategyGoalType?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTIMIZE_INSTALLS_TARGET_INSTALL_COST" | "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST" | "OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST" | "OPTIMIZE_RETURN_ON_ADVERTISING_SPEND" | "OPTIMIZE_PRE_REGISTRATION_CONVERSION_VOLUME" | "OPTIMIZE_INSTALLS_WITHOUT_TARGET_INSTALL_COST" | "OPTIMIZE_IN_APP_CONVERSIONS_WITHOUT_TARGET_CPA" | "OPTIMIZE_TOTAL_VALUE_WITHOUT_TARGET_ROAS";
}

/**
 * Asset automation setting contains pair of AssetAutomationType and the asset
 * automation opt-in/out status
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_AssetAutomationSetting {
  /**
   * The opt-in/out status of asset automation type.
   */
  assetAutomationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTED_IN" | "OPTED_OUT";
  /**
   * The asset automation type advertiser would like to opt-in/out.
   */
  assetAutomationType?:  | "UNSPECIFIED" | "UNKNOWN" | "TEXT_ASSET_AUTOMATION" | "GENERATE_VERTICAL_YOUTUBE_VIDEOS" | "GENERATE_SHORTER_YOUTUBE_VIDEOS" | "GENERATE_LANDING_PAGE_PREVIEW" | "GENERATE_ENHANCED_YOUTUBE_VIDEOS" | "GENERATE_IMAGE_ENHANCEMENT" | "GENERATE_IMAGE_EXTRACTION" | "GENERATE_DESIGN_VERSIONS_FOR_IMAGES" | "FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION" | "GENERATE_VIDEOS_FROM_OTHER_ASSETS";
}

/**
 * Settings for the audience targeting.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_AudienceSetting {
  /**
   * Immutable. If true, this campaign uses an Audience resource for audience
   * targeting. If false, this campaign may use audience segment criteria
   * instead.
   */
  useAudienceGrouped?: boolean;
}

/**
 * Settings that control the visual appearance of your brand in a campaign's
 * automatically generated assets and formats. Only applicable to Performance
 * Max campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_BrandGuidelines {
  /**
   * The accent brand color, entered as a hex code (e.g., #00ff00). You must
   * provide the accent_color if you provide a main_color.
   */
  accentColor?: string;
  /**
   * The main brand color, entered as a hex code (e.g., #00ff00). You must
   * provide the main_color if you provide an accent_color.
   */
  mainColor?: string;
  /**
   * The brand's font family. Must be one of the following Google Fonts (case
   * sensitive): Open Sans, Roboto, Montserrat, Poppins, Lato, Oswald, Playfair
   * Display, Roboto Slab.
   */
  predefinedFontFamily?: string;
}

/**
 * Category bids in LocalServicesReportingCampaignSettings.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_CategoryBid {
  /**
   * Category for which the bid will be associated with. For example,
   * xcat:service_area_business_plumber.
   */
  categoryId?: string;
  /**
   * Manual CPA bid for the category. Bid must be greater than the reserve
   * price associated for that category. Value is in micros and in the
   * advertiser's currency.
   */
  manualCpaBidMicros?: bigint;
  /**
   * Target CPA bid for the category. Value is in micros and in the
   * advertiser's currency.
   */
  targetCpaBidMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources_Campaign_CategoryBid(data: any): GoogleAdsSearchads360V23Resources_Campaign_CategoryBid {
  return {
    ...data,
    manualCpaBidMicros: data["manualCpaBidMicros"] !== undefined ? String(data["manualCpaBidMicros"]) : undefined,
    targetCpaBidMicros: data["targetCpaBidMicros"] !== undefined ? String(data["targetCpaBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_Campaign_CategoryBid(data: any): GoogleAdsSearchads360V23Resources_Campaign_CategoryBid {
  return {
    ...data,
    manualCpaBidMicros: data["manualCpaBidMicros"] !== undefined ? BigInt(data["manualCpaBidMicros"]) : undefined,
    targetCpaBidMicros: data["targetCpaBidMicros"] !== undefined ? BigInt(data["targetCpaBidMicros"]) : undefined,
  };
}

/**
 * Settings for Demand Gen campaign.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_DemandGenCampaignSettings {
  /**
   * Immutable. Specifies whether this campaign uses upgraded targeting
   * options. When this field is set to `true`, you can use location and
   * language targeting at the ad group level as opposed to the standard
   * campaign-level targeting.
   */
  upgradedTargeting?: boolean;
}

/**
 * The setting for controlling Dynamic Search Ads (DSA).
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_DynamicSearchAdsSetting {
  /**
   * Required. The Internet domain name that this setting represents, for
   * example, "google.com" or "www.google.com".
   */
  domainName?: string;
  /**
   * Required. The language code specifying the language of the domain, for
   * example, "en".
   */
  languageCode?: string;
  /**
   * Whether the campaign uses advertiser supplied URLs exclusively.
   */
  useSuppliedUrlsOnly?: boolean;
}

/**
 * Represents a collection of settings related to ads geotargeting.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_GeoTargetTypeSetting {
  /**
   * The setting used for negative geotargeting in this particular campaign.
   */
  negativeGeoTargetType?:  | "UNSPECIFIED" | "UNKNOWN" | "PRESENCE_OR_INTEREST" | "PRESENCE";
  /**
   * The setting used for positive geotargeting in this particular campaign.
   */
  positiveGeoTargetType?:  | "UNSPECIFIED" | "UNKNOWN" | "PRESENCE_OR_INTEREST" | "SEARCH_INTEREST" | "PRESENCE";
}

/**
 * Campaign-level settings for hotel ads.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_HotelSettingInfo {
  /**
   * Output only. The linked Hotel Center account.
   */
  readonly hotelCenterId?: bigint;
}

/**
 * Campaign setting for local campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_LocalCampaignSetting {
  /**
   * The location source type for this local campaign.
   */
  locationSourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_MY_BUSINESS" | "AFFILIATE";
}

/**
 * Settings for LocalServicesCampaign subresource.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings {
  /**
   * Categorical level bids associated with MANUAL_CPA bidding strategy.
   */
  categoryBids?: GoogleAdsSearchads360V23Resources_Campaign_CategoryBid[];
}

function serializeGoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings(data: any): GoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings {
  return {
    ...data,
    categoryBids: data["categoryBids"] !== undefined ? data["categoryBids"].map((item: any) => (serializeGoogleAdsSearchads360V23Resources_Campaign_CategoryBid(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings(data: any): GoogleAdsSearchads360V23Resources_Campaign_LocalServicesCampaignSettings {
  return {
    ...data,
    categoryBids: data["categoryBids"] !== undefined ? data["categoryBids"].map((item: any) => (deserializeGoogleAdsSearchads360V23Resources_Campaign_CategoryBid(item))) : undefined,
  };
}

/**
 * The network settings for the campaign.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_NetworkSettings {
  /**
   * Whether ads will be served on specified placements in the Google Display
   * Network. Placements are specified using the Placement criterion.
   */
  targetContentNetwork?: boolean;
  /**
   * Whether ads will be served with google.com search results.
   */
  targetGoogleSearch?: boolean;
  /**
   * Whether ads will be served on the Google TV network.
   */
  targetGoogleTvNetwork?: boolean;
  /**
   * Whether ads will be served on the partner network. This is available only
   * to some select partner accounts. Unless you have been instructed to use
   * this field, it likely does not apply to your account. This does not control
   * whether ads will be served on Google Search Partners Network; use
   * `target_search_network` for that instead.
   */
  targetPartnerSearchNetwork?: boolean;
  /**
   * Whether ads will be served on sites in the Google Search Partners Network
   * (requires `target_google_search` to also be `true`).
   */
  targetSearchNetwork?: boolean;
  /**
   * Whether ads will be served on YouTube.
   */
  targetYoutube?: boolean;
}

/**
 * Optimization goal setting for this campaign, which includes a set of
 * optimization goal types.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_OptimizationGoalSetting {
  /**
   * The list of optimization goal types.
   */
  optimizationGoalTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "CALL_CLICKS" | "DRIVING_DIRECTIONS" | "APP_PRE_REGISTRATION"[];
}

/**
 * Information about a campaign being upgraded to Performance Max.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_PerformanceMaxUpgrade {
  /**
   * Output only. The resource name of the Performance Max campaign the
   * campaign is upgraded to.
   */
  readonly performanceMaxCampaign?: string;
  /**
   * Output only. The resource name of the legacy campaign upgraded to
   * Performance Max.
   */
  readonly preUpgradeCampaign?: string;
  /**
   * Output only. The upgrade status of a campaign requested to be upgraded to
   * Performance Max.
   */
  readonly status?:  | "UNSPECIFIED" | "UNKNOWN" | "UPGRADE_IN_PROGRESS" | "UPGRADE_COMPLETE" | "UPGRADE_FAILED" | "UPGRADE_ELIGIBLE";
}

/**
 * Settings for Performance Max campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_PmaxCampaignSettings {
  /**
   * Overrides of brand targeting for various ad types.
   */
  brandTargetingOverrides?: GoogleAdsSearchads360V23Resources_CampaignPmaxCampaignSettings_BrandTargetingOverrides;
}

/**
 * Selective optimization setting for this campaign, which includes a set of
 * conversion actions to optimize this campaign towards. This feature only
 * applies to app campaigns that use MULTI_CHANNEL as AdvertisingChannelType and
 * APP_CAMPAIGN or APP_CAMPAIGN_FOR_ENGAGEMENT as AdvertisingChannelSubType.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_SelectiveOptimization {
  /**
   * The selected set of resource names for conversion actions for optimizing
   * this campaign.
   */
  conversionActions?: string[];
}

/**
 * The setting for Shopping campaigns. Defines the universe of products that
 * can be advertised by the campaign, and how this campaign interacts with other
 * Shopping campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting {
  /**
   * The list of Google Ads accounts IDs of advertising partners cooperating
   * within the campaign. This feature is currently available only for accounts
   * having an advertising partner link. This feature is currently supported
   * only for Performance Max, Shopping, Search and Demand Gen campaign types.
   */
  advertisingPartnerIds?: bigint[];
  /**
   * Priority of the campaign. Campaigns with numerically higher priorities
   * take precedence over those with lower priorities. This field is required
   * for Shopping campaigns, with values between 0 and 2, inclusive. This field
   * is optional for Smart Shopping campaigns, but must be equal to 3 if set.
   */
  campaignPriority?: number;
  /**
   * Disable the optional product feed. This field is currently supported only
   * for Demand Gen campaigns. See
   * https://support.google.com/google-ads/answer/13721750 to learn more about
   * this feature.
   */
  disableProductFeed?: boolean;
  /**
   * Whether to include local products.
   */
  enableLocal?: boolean;
  /**
   * Feed label of products to include in the campaign. Valid feed labels may
   * contain a maximum of 20 characters including uppercase letters, numbers,
   * hyphens, and underscores. If you previously used the deprecated
   * `sales_country` in the two-letter country code (`XX`) format, the
   * `feed_label` field should be used instead. For more information see the
   * [feed label](//support.google.com/merchants/answer/12453549) support
   * article.
   */
  feedLabel?: string;
  /**
   * ID of the Merchant Center account. This field is required for create
   * operations. This field is immutable for Shopping campaigns.
   */
  merchantId?: bigint;
  /**
   * Immutable. Whether to target Vehicle Listing inventory.
   */
  useVehicleInventory?: boolean;
}

function serializeGoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting(data: any): GoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting {
  return {
    ...data,
    advertisingPartnerIds: data["advertisingPartnerIds"] !== undefined ? data["advertisingPartnerIds"].map((item: any) => (String(item))) : undefined,
    merchantId: data["merchantId"] !== undefined ? String(data["merchantId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting(data: any): GoogleAdsSearchads360V23Resources_Campaign_ShoppingSetting {
  return {
    ...data,
    advertisingPartnerIds: data["advertisingPartnerIds"] !== undefined ? data["advertisingPartnerIds"].map((item: any) => (BigInt(item))) : undefined,
    merchantId: data["merchantId"] !== undefined ? BigInt(data["merchantId"]) : undefined,
  };
}

/**
 * Campaign-level settings for tracking information.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_TrackingSetting {
  /**
   * Output only. The url used for dynamic tracking.
   */
  readonly trackingUrl?: string;
}

/**
 * Settings for Travel campaign.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings {
  /**
   * Immutable. The Travel account ID associated with the Travel campaign.
   */
  travelAccountId?: bigint;
}

function serializeGoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings(data: any): GoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings {
  return {
    ...data,
    travelAccountId: data["travelAccountId"] !== undefined ? String(data["travelAccountId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings(data: any): GoogleAdsSearchads360V23Resources_Campaign_TravelCampaignSettings {
  return {
    ...data,
    travelAccountId: data["travelAccountId"] !== undefined ? BigInt(data["travelAccountId"]) : undefined,
  };
}

/**
 * Describes how unbranded pharma ads will be displayed.
 */
export interface GoogleAdsSearchads360V23Resources_Campaign_VanityPharma {
  /**
   * The display mode for vanity pharma URLs.
   */
  vanityPharmaDisplayUrlMode?:  | "UNSPECIFIED" | "UNKNOWN" | "MANUFACTURER_WEBSITE_URL" | "WEBSITE_DESCRIPTION";
  /**
   * The text that will be displayed in display URL of the text ad when website
   * description is the selected display mode for vanity pharma URLs.
   */
  vanityPharmaText?:  | "UNSPECIFIED" | "UNKNOWN" | "PRESCRIPTION_TREATMENT_WEBSITE_EN" | "PRESCRIPTION_TREATMENT_WEBSITE_ES" | "PRESCRIPTION_DEVICE_WEBSITE_EN" | "PRESCRIPTION_DEVICE_WEBSITE_ES" | "MEDICAL_DEVICE_WEBSITE_EN" | "MEDICAL_DEVICE_WEBSITE_ES" | "PREVENTATIVE_TREATMENT_WEBSITE_EN" | "PREVENTATIVE_TREATMENT_WEBSITE_ES" | "PRESCRIPTION_CONTRACEPTION_WEBSITE_EN" | "PRESCRIPTION_CONTRACEPTION_WEBSITE_ES" | "PRESCRIPTION_VACCINE_WEBSITE_EN" | "PRESCRIPTION_VACCINE_WEBSITE_ES";
}

/**
 * Overrides of brand targeting for various ad types.
 */
export interface GoogleAdsSearchads360V23Resources_CampaignPmaxCampaignSettings_BrandTargetingOverrides {
  /**
   * If true, brand exclusions are ignored for Shopping ads.
   */
  ignoreExclusionsForShoppingAds?: boolean;
}

/**
 * A wrapper proto presenting all supported resources. Only the resource of the
 * change_resource_type will be set.
 */
export interface GoogleAdsSearchads360V23Resources_ChangeEvent_ChangedResource {
  /**
   * Output only. Set if change_resource_type == AD.
   */
  readonly ad?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * Output only. Set if change_resource_type == AD_GROUP.
   */
  readonly adGroup?: GoogleAdsSearchads360V23Resources__AdGroup;
  /**
   * Output only. Set if change_resource_type == AD_GROUP_AD.
   */
  readonly adGroupAd?: GoogleAdsSearchads360V23Resources__AdGroupAd;
  /**
   * Output only. Set if change_resource_type == AD_GROUP_ASSET.
   */
  readonly adGroupAsset?: GoogleAdsSearchads360V23Resources__AdGroupAsset;
  /**
   * Output only. Set if change_resource_type == AD_GROUP_BID_MODIFIER.
   */
  readonly adGroupBidModifier?: GoogleAdsSearchads360V23Resources__AdGroupBidModifier;
  /**
   * Output only. Set if change_resource_type == AD_GROUP_CRITERION.
   */
  readonly adGroupCriterion?: GoogleAdsSearchads360V23Resources__AdGroupCriterion;
  /**
   * Output only. Set if change_resource_type == ASSET.
   */
  readonly asset?: GoogleAdsSearchads360V23Resources__Asset;
  /**
   * Output only. Set if change_resource_type == ASSET_SET.
   */
  readonly assetSet?: GoogleAdsSearchads360V23Resources__AssetSet;
  /**
   * Output only. Set if change_resource_type == ASSET_SET_ASSET.
   */
  readonly assetSetAsset?: GoogleAdsSearchads360V23Resources__AssetSetAsset;
  /**
   * Output only. Set if change_resource_type == CAMPAIGN.
   */
  readonly campaign?: GoogleAdsSearchads360V23Resources__Campaign;
  /**
   * Output only. Set if change_resource_type == CAMPAIGN_ASSET.
   */
  readonly campaignAsset?: GoogleAdsSearchads360V23Resources__CampaignAsset;
  /**
   * Output only. Set if change_resource_type == CAMPAIGN_ASSET_SET.
   */
  readonly campaignAssetSet?: GoogleAdsSearchads360V23Resources__CampaignAssetSet;
  /**
   * Output only. Set if change_resource_type == CAMPAIGN_BUDGET.
   */
  readonly campaignBudget?: GoogleAdsSearchads360V23Resources__CampaignBudget;
  /**
   * Output only. Set if change_resource_type == CAMPAIGN_CRITERION.
   */
  readonly campaignCriterion?: GoogleAdsSearchads360V23Resources__CampaignCriterion;
  /**
   * Output only. Set if change_resource_type == CUSTOMER_ASSET.
   */
  readonly customerAsset?: GoogleAdsSearchads360V23Resources__CustomerAsset;
}

/**
 * Settings related to this conversion action's attribution model.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_AttributionModelSettings {
  /**
   * The attribution model type of this conversion action.
   */
  attributionModel?:  | "UNSPECIFIED" | "UNKNOWN" | "EXTERNAL" | "GOOGLE_ADS_LAST_CLICK" | "GOOGLE_SEARCH_ATTRIBUTION_FIRST_CLICK" | "GOOGLE_SEARCH_ATTRIBUTION_LINEAR" | "GOOGLE_SEARCH_ATTRIBUTION_TIME_DECAY" | "GOOGLE_SEARCH_ATTRIBUTION_POSITION_BASED" | "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN";
  /**
   * Output only. The status of the data-driven attribution model for the
   * conversion action.
   */
  readonly dataDrivenModelStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "AVAILABLE" | "STALE" | "EXPIRED" | "NEVER_GENERATED";
}

/**
 * Settings related to a Firebase conversion action.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_FirebaseSettings {
  /**
   * Output only. The event name of a Firebase conversion.
   */
  readonly eventName?: string;
  /**
   * Output only. The Firebase project ID of the conversion.
   */
  readonly projectId?: string;
  /**
   * Output only. The GA property ID of the conversion.
   */
  readonly propertyId?: bigint;
  /**
   * Output only. The GA property name of the conversion.
   */
  readonly propertyName?: string;
}

/**
 * Settings related to a Floodlight conversion action.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_FloodlightSettings {
  /**
   * Output only. String used to identify a Floodlight activity group when
   * reporting conversions.
   */
  readonly activityGroupTag?: string;
  /**
   * Output only. ID of the Floodlight activity in DoubleClick Campaign Manager
   * (DCM).
   */
  readonly activityId?: bigint;
  /**
   * Output only. String used to identify a Floodlight activity when reporting
   * conversions.
   */
  readonly activityTag?: string;
}

/**
 * Settings related to a Google Analytics 4 conversion action.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_GoogleAnalytics4Settings {
  /**
   * Output only. The name of the GA 4 event.
   */
  readonly eventName?: string;
  /**
   * Output only. The ID of the GA 4 property.
   */
  readonly propertyId?: bigint;
  /**
   * Output only. The name of the GA 4 property.
   */
  readonly propertyName?: string;
}

/**
 * Settings related to a third party app analytics conversion action.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_ThirdPartyAppAnalyticsSettings {
  /**
   * Output only. The event name of a third-party app analytics conversion.
   */
  readonly eventName?: string;
  /**
   * Output only. Name of the third-party app analytics provider.
   */
  readonly providerName?: string;
}

/**
 * Settings related to the value for conversion events associated with this
 * conversion action.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionAction_ValueSettings {
  /**
   * Controls whether the default value and default currency code are used in
   * place of the value and currency code specified in conversion events for
   * this conversion action.
   */
  alwaysUseDefaultValue?: boolean;
  /**
   * The currency code to use when conversion events for this conversion action
   * are sent with an invalid or missing currency code, or when this conversion
   * action is configured to always use the default value.
   */
  defaultCurrencyCode?: string;
  /**
   * The value to use when conversion events for this conversion action are
   * sent with an invalid, disallowed or missing value, or when this conversion
   * action is configured to always use the default value.
   */
  defaultValue?: number;
}

/**
 * Information for Search Ads 360 Floodlight Conversion Custom Variables.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionCustomVariable_FloodlightConversionCustomVariableInfo {
  /**
   * Output only. Floodlight variable data type defined in Search Ads 360.
   */
  readonly floodlightVariableDataType?:  | "UNSPECIFIED" | "UNKNOWN" | "NUMBER" | "STRING";
  /**
   * Output only. Floodlight variable type defined in Search Ads 360.
   */
  readonly floodlightVariableType?:  | "UNSPECIFIED" | "UNKNOWN" | "DIMENSION" | "METRIC" | "UNSET";
}

/**
 * Action applied when rule is applied.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleAction {
  /**
   * Specifies applied operation.
   */
  operation?:  | "UNSPECIFIED" | "UNKNOWN" | "ADD" | "MULTIPLY" | "SET";
  /**
   * Specifies applied value.
   */
  value?: number;
}

/**
 * Condition on Audience dimension.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleAudienceCondition {
  /**
   * User Interests.
   */
  userInterests?: string[];
  /**
   * User Lists.
   */
  userLists?: string[];
}

/**
 * Condition on Device dimension.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleDeviceCondition {
  /**
   * Value for device type condition.
   */
  deviceTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "MOBILE" | "DESKTOP" | "TABLET"[];
}

/**
 * Condition on Geo dimension.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleGeoLocationCondition {
  /**
   * Excluded Geo location match type.
   */
  excludedGeoMatchType?:  | "UNSPECIFIED" | "UNKNOWN" | "ANY" | "LOCATION_OF_PRESENCE";
  /**
   * Geo locations that advertisers want to exclude.
   */
  excludedGeoTargetConstants?: string[];
  /**
   * Included Geo location match type.
   */
  geoMatchType?:  | "UNSPECIFIED" | "UNKNOWN" | "ANY" | "LOCATION_OF_PRESENCE";
  /**
   * Geo locations that advertisers want to include.
   */
  geoTargetConstants?: string[];
}

/**
 * Range for the number of days between the date of the booking and the start
 * of the itinerary.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryAdvanceBookingWindow {
  /**
   * Maximum number of days between the date of the booking the start date.
   */
  maxDays?: number;
  /**
   * Minimum number of days between the date of the booking the start date.
   */
  minDays?: number;
}

/**
 * Condition on Itinerary dimension.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryCondition {
  /**
   * Range for the number of days between the date of the booking and the start
   * of the itinerary.
   */
  advanceBookingWindow?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryAdvanceBookingWindow;
  /**
   * Range for the itinerary length in number of nights.
   */
  travelLength?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryTravelLength;
  /**
   * The days of the week on which this itinerary's travel can start.
   */
  travelStartDay?: GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryTravelStartDay;
}

/**
 * Range for the itinerary length in number of nights.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryTravelLength {
  /**
   * Maximum number of days between the start date and the end date.
   */
  maxNights?: number;
  /**
   * Minimum number of nights between the start date and the end date.
   */
  minNights?: number;
}

/**
 * The days of the week on which an itinerary's travel can start.
 */
export interface GoogleAdsSearchads360V23Resources_ConversionValueRule_ValueRuleItineraryTravelStartDay {
  /**
   * The travel can start on Friday.
   */
  friday?: boolean;
  /**
   * The travel can start on Monday.
   */
  monday?: boolean;
  /**
   * The travel can start on Saturday.
   */
  saturday?: boolean;
  /**
   * The travel can start on Sunday.
   */
  sunday?: boolean;
  /**
   * The travel can start on Thursday.
   */
  thursday?: boolean;
  /**
   * The travel can start on Tuesday.
   */
  tuesday?: boolean;
  /**
   * The travel can start on Wednesday.
   */
  wednesday?: boolean;
}

/**
 * The CustomerLink specific SkAdNetworkConversionValueSchema.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchema_SkAdNetworkConversionValueSchema {
  /**
   * Required. Output only. Apple App Store app ID.
   */
  readonly appId?: string;
  /**
   * Output only. Fine grained conversion value mappings.
   */
  readonly fineGrainedConversionValueMappings?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_FineGrainedConversionValueMappings[];
  /**
   * Output only. A time window (measured in hours) post-install, after which
   * the App Attribution Partner or advertiser stops calling
   * [updateConversionValue]
   * (https://developer.apple.com/documentation/storekit/skadnetwork/3566697-updateconversionvalue).
   */
  readonly measurementWindowHours?: number;
  /**
   * Output only. Per-postback conversion value mappings for postbacks in
   * multiple conversion windows. Only applicable for SkAdNetwork versions >=
   * 4.0.
   */
  readonly postbackMappings?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_PostbackMapping[];
}

/**
 * Mappings for coarse grained conversion values.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_CoarseGrainedConversionValueMappings {
  /**
   * Output only. Mapping for "high" coarse conversion value.
   */
  readonly highConversionValueMapping?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping;
  /**
   * Output only. Mapping for "low" coarse conversion value.
   */
  readonly lowConversionValueMapping?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping;
  /**
   * Output only. Mapping for "medium" coarse conversion value.
   */
  readonly mediumConversionValueMapping?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping;
}

/**
 * Represents mapping from one conversion value to one or more conversion
 * events.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping {
  /**
   * Output only. The conversion value may be mapped to multiple events with
   * various attributes.
   */
  readonly mappedEvents?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_Event[];
  /**
   * Output only. The maximum of the time range in which a user was last active
   * during the measurement window.
   */
  readonly maxTimePostInstallHours?: bigint;
  /**
   * Output only. The minimum of the time range in which a user was last active
   * during the measurement window.
   */
  readonly minTimePostInstallHours?: bigint;
}

/**
 * Defines a Google conversion event that the conversion value is mapped to.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_Event {
  /**
   * Output only. The reported currency for the event_revenue. ISO 4217
   * three-letter currency code, for example, "USD"
   */
  readonly currencyCode?: string;
  /**
   * Output only. For specific event counter values.
   */
  readonly eventCounter?: bigint;
  /**
   * Output only. The event counter range.
   */
  readonly eventOccurrenceRange?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_EventOccurrenceRange;
  /**
   * Output only. The event revenue range.
   */
  readonly eventRevenueRange?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_RevenueRange;
  /**
   * Output only. The specific event revenue value.
   */
  readonly eventRevenueValue?: number;
  /**
   * Output only. Google event name represented by this conversion value.
   */
  readonly mappedEventName?: string;
}

/**
 * Mappings for fine grained conversion value.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_FineGrainedConversionValueMappings {
  /**
   * Output only. Conversion events the fine grained conversion value maps to.
   */
  readonly conversionValueMapping?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_ConversionValueMapping;
  /**
   * Output only. Fine grained conversion value. Valid values are in the
   * inclusive range [0,63].
   */
  readonly fineGrainedConversionValue?: number;
}

/**
 * Mappings for each postback in multiple conversion windows.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_PostbackMapping {
  /**
   * Output only. Conversion value mappings for all coarse grained conversion
   * values.
   */
  readonly coarseGrainedConversionValueMappings?: GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchema_CoarseGrainedConversionValueMappings;
  /**
   * Output only. Coarse grained conversion value that triggers conversion
   * window lock.
   */
  readonly lockWindowCoarseConversionValue?:  | "UNSPECIFIED" | "UNKNOWN" | "UNAVAILABLE" | "LOW" | "MEDIUM" | "HIGH" | "NONE";
  /**
   * Output only. Event name that triggers conversion window lock.
   */
  readonly lockWindowEvent?: string;
  /**
   * Output only. Fine grained conversion value that triggers conversion window
   * lock.
   */
  readonly lockWindowFineConversionValue?: number;
  /**
   * Output only. 0-based index that indicates the order of postback. Valid
   * values are in the inclusive range [0,2].
   */
  readonly postbackSequenceIndex?: number;
}

/**
 * Defines a range for event counter values.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_EventOccurrenceRange {
  /**
   * Output only. For event counter ranges, the maximum of the defined range. A
   * value of 0 will be treated as unset.
   */
  readonly maxEventCount?: bigint;
  /**
   * Output only. For event counter ranges, the minimum of the defined range. A
   * value of 0 will be treated as unset.
   */
  readonly minEventCount?: bigint;
}

/**
 * Defines a range for revenue values.
 */
export interface GoogleAdsSearchads360V23Resources_CustomerSkAdNetworkConversionValueSchemaSkAdNetworkConversionValueSchemaEvent_RevenueRange {
  /**
   * Output only. For revenue ranges, the maximum value in `currency_code` for
   * which this conversion value would be updated. A value of 0 will be treated
   * as unset.
   */
  readonly maxEventRevenue?: number;
  /**
   * Output only. For revenue ranges, the minimum value in `currency_code` for
   * which this conversion value would be updated. A value of 0 will be treated
   * as unset.
   */
  readonly minEventRevenue?: number;
}

/**
 * Holds the details of an asset within an asset group for an Optimize Assets
 * experiment arm.
 */
export interface GoogleAdsSearchads360V23Resources_ExperimentArm_AssetGroupAssetInfo {
  /**
   * Asset resource name of the asset group asset.
   */
  asset?: string;
  /**
   * Field type of the asset group asset.
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
}

/**
 * Holds the asset groups included in an arm of an Optimize Assets experiment.
 */
export interface GoogleAdsSearchads360V23Resources_ExperimentArm_AssetGroupInfo {
  /**
   * Asset group resource name.
   */
  assetGroup?: string;
  /**
   * List of asset group assets under the asset group.
   */
  assetGroupAssets?: GoogleAdsSearchads360V23Resources_ExperimentArm_AssetGroupAssetInfo[];
}

/**
 * Represents a summarized account budget billable cost.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_AccountBudgetSummary {
  /**
   * Output only. The resource name of the account budget associated with this
   * summarized billable cost. AccountBudget resource names have the form:
   * `customers/{customer_id}/accountBudgets/{account_budget_id}`
   */
  readonly accountBudget?: string;
  /**
   * Output only. The name of the account budget. It appears on the invoice PDF
   * as "Account budget".
   */
  readonly accountBudgetName?: string;
  /**
   * Output only. The billable activity date range of the account budget,
   * within the service date range of this invoice. The end date is inclusive.
   * This can be different from the account budget's start and end time.
   */
  readonly billableActivityDateRange?: GoogleAdsSearchads360V23Common__DateRange;
  /**
   * Output only. The pretax billed amount attributable to this budget during
   * the service period, in micros. This does not account for any adjustments.
   */
  readonly billedAmountMicros?: bigint;
  /**
   * Output only. The list of summarized campaign level information associated
   * with this account budget.
   */
  readonly campaignSummaries?: GoogleAdsSearchads360V23Resources_Invoice_CampaignSummary[];
  /**
   * Output only. The resource name of the customer associated with this
   * account budget. This contains the customer ID, which appears on the invoice
   * PDF as "Account ID". Customer resource names have the form:
   * `customers/{customer_id}`
   */
  readonly customer?: string;
  /**
   * Output only. The descriptive name of the account budget's customer. It
   * appears on the invoice PDF as "Account".
   */
  readonly customerDescriptiveName?: string;
  /**
   * Output only. The pretax invalid activity amount attributable to this
   * budget in previous months, in micros (negative value).
   */
  readonly invalidActivityAmountMicros?: bigint;
  /**
   * Output only. The list of summarized invalid activity credits with original
   * linkages.
   */
  readonly invalidActivitySummaries?: GoogleAdsSearchads360V23Resources_Invoice_InvalidActivitySummary[];
  /**
   * Output only. The pretax overdelivery amount attributable to this budget
   * during the service period, in micros (negative value).
   */
  readonly overdeliveryAmountMicros?: bigint;
  /**
   * Output only. The purchase order number of the account budget. It appears
   * on the invoice PDF as "Purchase order".
   */
  readonly purchaseOrderNumber?: string;
  /**
   * Output only. The pretax served amount attributable to this budget during
   * the service period, in micros. This is only useful to reconcile invoice and
   * delivery data.
   */
  readonly servedAmountMicros?: bigint;
  /**
   * Output only. The pretax subtotal amount attributable to this budget during
   * the service period, in micros.
   */
  readonly subtotalAmountMicros?: bigint;
  /**
   * Output only. The tax amount attributable to this budget during the service
   * period, in micros.
   */
  readonly taxAmountMicros?: bigint;
  /**
   * Output only. The total amount attributable to this budget during the
   * service period, in micros. This equals the sum of the account budget
   * subtotal amount and the account budget tax amount.
   */
  readonly totalAmountMicros?: bigint;
}

/**
 * Represents a summarized view at account level.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_AccountSummary {
  /**
   * Output only. The list of adjustment information associated with this
   * account.
   */
  readonly adjustmentSummaries?: GoogleAdsSearchads360V23Resources_Invoice_AdjustmentSummary[];
  /**
   * Output only. Pretax billing correction subtotal amount, in micros.
   */
  readonly billingCorrectionSubtotalAmountMicros?: bigint;
  /**
   * Output only. Tax on billing correction, in micros.
   */
  readonly billingCorrectionTaxAmountMicros?: bigint;
  /**
   * Output only. Total billing correction amount, in micros.
   */
  readonly billingCorrectionTotalAmountMicros?: bigint;
  /**
   * Output only. Pretax coupon adjustment subtotal amount, in micros.
   */
  readonly couponAdjustmentSubtotalAmountMicros?: bigint;
  /**
   * Output only. Tax on coupon adjustment, in micros.
   */
  readonly couponAdjustmentTaxAmountMicros?: bigint;
  /**
   * Output only. Total coupon adjustment amount, in micros.
   */
  readonly couponAdjustmentTotalAmountMicros?: bigint;
  /**
   * Output only. The account associated with the account summary.
   */
  readonly customer?: string;
  /**
   * Output only. Pretax excess credit adjustment subtotal amount, in micros.
   */
  readonly excessCreditAdjustmentSubtotalAmountMicros?: bigint;
  /**
   * Output only. Tax on excess credit adjustment, in micros.
   */
  readonly excessCreditAdjustmentTaxAmountMicros?: bigint;
  /**
   * Output only. Total excess credit adjustment amount, in micros.
   */
  readonly excessCreditAdjustmentTotalAmountMicros?: bigint;
  /**
   * Output only. Pretax export charge subtotal amount, in micros.
   */
  readonly exportChargeSubtotalAmountMicros?: bigint;
  /**
   * Output only. Tax on export charge, in micros.
   */
  readonly exportChargeTaxAmountMicros?: bigint;
  /**
   * Output only. Total export charge amount, in micros.
   */
  readonly exportChargeTotalAmountMicros?: bigint;
  /**
   * Output only. Pretax regulatory costs subtotal amount, in micros.
   */
  readonly regulatoryCostsSubtotalAmountMicros?: bigint;
  /**
   * Output only. Tax on regulatory costs, in micros.
   */
  readonly regulatoryCostsTaxAmountMicros?: bigint;
  /**
   * Output only. Total regulatory costs amount, in micros.
   */
  readonly regulatoryCostsTotalAmountMicros?: bigint;
  /**
   * Output only. The list of regulatory cost information associated with this
   * account.
   */
  readonly regulatoryCostSummaries?: GoogleAdsSearchads360V23Resources_Invoice_RegulatoryCostSummary[];
  /**
   * Output only. Total pretax subtotal amount attributable to the account
   * during the service period, in micros.
   */
  readonly subtotalAmountMicros?: bigint;
  /**
   * Output only. Total tax amount attributable to the account during the
   * service period, in micros.
   */
  readonly taxAmountMicros?: bigint;
  /**
   * Output only. Total amount attributable to the account during the service
   * period, in micros. This equals the sum of the subtotal_amount_micros and
   * tax_amount_micros.
   */
  readonly totalAmountMicros?: bigint;
}

/**
 * Represents adjustment information associated with an account.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_AdjustmentSummary {
  /**
   * Output only. The description of the adjustment. Example: Incentive
   * Adjustment, discount.
   */
  readonly adjustmentDescription?: string;
  /**
   * Output only. The amount of the adjustment, in micros. The currency code
   * for this amount is the same as the Invoice.currency_code.
   */
  readonly amountMicros?: bigint;
}

/**
 * Represents campaign level billable cost information associated with an
 * account budget.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_CampaignSummary {
  /**
   * Output only. The amount attributable to this campaign for the given unit
   * of measure during the service period, in micros. The currency code for this
   * amount is the same as the Invoice.currency_code.
   */
  readonly amountMicros?: bigint;
  /**
   * Output only. The description of the campaign. This is generally the same
   * as the campaign name, but may differ.
   */
  readonly campaignDescription?: string;
  /**
   * Output only. The quantity served for the given unit of measure.
   */
  readonly quantity?: bigint;
  /**
   * Output only. The unit of measure for the quantity served.
   */
  readonly unitOfMeasure?:  | "UNSPECIFIED" | "UNKNOWN" | "CLICKS" | "IMPRESSIONS" | "ACQUISITIONS" | "PHONE_CALLS" | "VIDEO_PLAYS" | "DAYS" | "AUDIO_PLAYS" | "ENGAGEMENTS" | "SECONDS" | "LEADS" | "GUEST_STAYS" | "HOURS";
}

/**
 * Details about the invalid activity for the invoice that contain additional
 * details about invoice against which corrections are made.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_InvalidActivitySummary {
  /**
   * Output only. Invalid activity amount in micros.
   */
  readonly amountMicros?: bigint;
  /**
   * Output only. Original account budget name related to this invalid activity
   * credit.
   */
  readonly originalAccountBudgetName?: string;
  /**
   * Output only. Original invoice number related to this invalid activity
   * credit.
   */
  readonly originalInvoiceId?: string;
  /**
   * Output only. Original month of service related to this invalid activity
   * credit.
   */
  readonly originalMonthOfService?:  | "UNSPECIFIED" | "UNKNOWN" | "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER";
  /**
   * Output only. Original purchase order number related to this invalid
   * activity credit.
   */
  readonly originalPurchaseOrderNumber?: string;
  /**
   * Output only. Original year of service related to this invalid activity
   * credit.
   */
  readonly originalYearOfService?: string;
}

/**
 * Represents regulatory cost information associated with an account.
 */
export interface GoogleAdsSearchads360V23Resources_Invoice_RegulatoryCostSummary {
  /**
   * Output only. The amount of the regulatory fee, in micros. The currency
   * code for this amount is the same as the Invoice.currency_code.
   */
  readonly amountMicros?: bigint;
  /**
   * Output only. The type of regulatory fee.
   */
  readonly regulatoryFeeType?:  | "UNSPECIFIED" | "UNKNOWN" | "AUSTRIA_DST_FEE" | "TURKIYE_REGULATORY_OPERATING_COST" | "UK_DST_FEE" | "SPAIN_REGULATORY_OPERATING_COST" | "FRANCE_REGULATORY_OPERATING_COST" | "ITALY_REGULATORY_OPERATING_COST" | "INDIA_REGULATORY_OPERATING_COST" | "POLAND_REGULATORY_OPERATING_COST" | "OPERATING_CHARGES" | "CANADA_DST_FEE";
}

/**
 * Brand of the product.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductBrand {
  /**
   * String value of the product brand.
   */
  value?: string;
}

/**
 * One element of a category at a certain level. Top-level categories are at
 * level 1, their children at level 2, and so on. We currently support up to 5
 * levels. The user must specify a dimension type that indicates the level of
 * the category. All cases of the same subdivision must have the same dimension
 * type (category level).
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory {
  /**
   * ID of the product category. This ID is equivalent to the
   * google_product_category ID as described in this article:
   * https://support.google.com/merchants/answer/6324436
   */
  categoryId?: bigint;
  /**
   * Indicates the level of the category in the taxonomy.
   */
  level?:  | "UNSPECIFIED" | "UNKNOWN" | "LEVEL1" | "LEVEL2" | "LEVEL3" | "LEVEL4" | "LEVEL5";
}

function serializeGoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory(data: any): GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory {
  return {
    ...data,
    categoryId: data["categoryId"] !== undefined ? String(data["categoryId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory(data: any): GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCategory {
  return {
    ...data,
    categoryId: data["categoryId"] !== undefined ? BigInt(data["categoryId"]) : undefined,
  };
}

/**
 * Locality of a product offer.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductChannel {
  /**
   * Value of the locality.
   */
  channel?:  | "UNSPECIFIED" | "UNKNOWN" | "ONLINE" | "LOCAL";
}

/**
 * Condition of a product offer.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCondition {
  /**
   * Value of the condition.
   */
  condition?:  | "UNSPECIFIED" | "UNKNOWN" | "NEW" | "REFURBISHED" | "USED";
}

/**
 * Custom attribute of a product offer.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductCustomAttribute {
  /**
   * Indicates the index of the custom attribute.
   */
  index?:  | "UNSPECIFIED" | "UNKNOWN" | "INDEX0" | "INDEX1" | "INDEX2" | "INDEX3" | "INDEX4";
  /**
   * String value of the product custom attribute.
   */
  value?: string;
}

/**
 * Item id of a product offer.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductItemId {
  /**
   * Value of the id.
   */
  value?: string;
}

/**
 * Type of a product offer.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_ProductType {
  /**
   * Level of the type.
   */
  level?:  | "UNSPECIFIED" | "UNKNOWN" | "LEVEL1" | "LEVEL2" | "LEVEL3" | "LEVEL4" | "LEVEL5";
  /**
   * Value of the type.
   */
  value?: string;
}

/**
 * Filters for URLs in a page feed and URLs from the advertiser web domain.
 * Several root nodes with this dimension are allowed in an asset group and
 * their conditions are considered in OR.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_Webpage {
  /**
   * The webpage conditions are case sensitive and these are and-ed together
   * when evaluated for filtering. All the conditions should be of same type.
   * Example1: for URL1 = www.ads.google.com?ocid=1&euid=2 and URL2 =
   * www.ads.google.com?ocid=1 and with "ocid" and "euid" as url_contains
   * conditions, URL1 will be matched, but URL2 not. Example2 : If URL1 has
   * Label1, Label2 and URL2 has Label2, Label3, then with Label1 and Label2 as
   * custom_label conditions, URL1 will be matched but not URL2. With Label2 as
   * the only custom_label condition then both URL1 and URL2 will be matched.
   */
  conditions?: GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_WebpageCondition[];
}

/**
 * Matching condition for URL filtering.
 */
export interface GoogleAdsSearchads360V23Resources_ListingGroupFilterDimension_WebpageCondition {
  /**
   * Filters the URLs in a page feed that have this custom label. A custom
   * label can be added to a campaign by creating an AssetSet of type PAGE_FEED
   * and linking it to the campaign using CampaignAssetSet.
   */
  customLabel?: string;
  /**
   * Filters the URLs in a page feed and the URLs from the advertiser web
   * domain that contain this string.
   */
  urlContains?: string;
}

/**
 * Localization for the product category.
 */
export interface GoogleAdsSearchads360V23Resources_ProductCategoryConstant_ProductCategoryLocalization {
  /**
   * Output only. Two-letter ISO 639-1 language code of the localized category.
   */
  readonly languageCode?: string;
  /**
   * Output only. Upper-case two-letter ISO 3166-1 country code of the
   * localized category.
   */
  readonly regionCode?: string;
  /**
   * Output only. The name of the category in the specified locale.
   */
  readonly value?: string;
}

/**
 * Wrapper for information about a Google Ads account.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_AccountInfo {
  /**
   * Output only. The customer ID of the account.
   */
  readonly customerId?: bigint;
  /**
   * Output only. The descriptive name of the account.
   */
  readonly descriptiveName?: string;
}

/**
 * The call asset recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_CallAssetRecommendation {
}

/**
 * The callout asset recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_CalloutAssetRecommendation {
  /**
   * Output only. New callout extension assets recommended at the campaign
   * level.
   */
  readonly recommendedCampaignCalloutAssets?: GoogleAdsSearchads360V23Resources__Asset[];
  /**
   * Output only. New callout extension assets recommended at the customer
   * level.
   */
  readonly recommendedCustomerCalloutAssets?: GoogleAdsSearchads360V23Resources__Asset[];
}

/**
 * A campaign budget shared amongst various budget recommendation types.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudget {
  /**
   * Output only. Current budget amount.
   */
  readonly currentAmountMicros?: bigint;
  /**
   * Output only. The date when the new budget would start being used. This
   * field will be set for the following recommendation types:
   * FORECASTING_SET_TARGET_ROAS YYYY-MM-DD format, for example, 2018-04-17.
   */
  readonly newStartDate?: string;
  /**
   * Output only. Recommended budget amount.
   */
  readonly recommendedNewAmountMicros?: bigint;
}

/**
 * The budget recommendation for budget constrained campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudgetRecommendation {
  /**
   * Output only. The budget amounts and associated impact estimates for some
   * values of possible budget amounts.
   */
  readonly budgetOptions?: GoogleAdsSearchads360V23Resources_RecommendationCampaignBudgetRecommendation_CampaignBudgetRecommendationOption[];
  /**
   * Output only. The current budget amount in micros.
   */
  readonly currentBudgetAmountMicros?: bigint;
  /**
   * Output only. The recommended budget amount in micros.
   */
  readonly recommendedBudgetAmountMicros?: bigint;
}

/**
 * The Custom Audience Opt In recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_CustomAudienceOptInRecommendation {
  /**
   * Output only. The list of keywords to use for custom audience creation.
   */
  readonly keywords?: GoogleAdsSearchads360V23Common__KeywordInfo[];
}

/**
 * The Display Expansion opt-in recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_DisplayExpansionOptInRecommendation {
}

/**
 * Recommendation to enable dynamic image extensions on the account, allowing
 * Google to find the best images from ad landing pages and complement text ads.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_DynamicImageExtensionOptInRecommendation {
}

/**
 * The Enhanced Cost-Per-Click Opt-In recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_EnhancedCpcOptInRecommendation {
}

/**
 * The set target CPA recommendations.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetCpaRecommendation {
  /**
   * Output only. The campaign budget.
   */
  readonly campaignBudget?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudget;
  /**
   * Output only. The recommended target CPA.
   */
  readonly recommendedTargetCpaMicros?: bigint;
}

/**
 * The forecasting set target ROAS recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ForecastingSetTargetRoasRecommendation {
  /**
   * Output only. The campaign budget.
   */
  readonly campaignBudget?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudget;
  /**
   * Output only. The recommended target ROAS (revenue per unit of spend). The
   * value is between 0.01 and 1000.0, inclusive.
   */
  readonly recommendedTargetRoas?: number;
}

/**
 * The improve Demand Gen ad strength recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ImproveDemandGenAdStrengthRecommendation {
  /**
   * Output only. The resource name of the ad that can be improved.
   */
  readonly ad?: string;
  /**
   * Output only. The current ad strength.
   */
  readonly adStrength?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "NO_ADS" | "POOR" | "AVERAGE" | "GOOD" | "EXCELLENT";
  /**
   * Output only. A list of recommendations to improve the ad strength.
   */
  readonly demandGenAssetActionItems?: string[];
}

/**
 * Recommendation to deploy Google Tag on more pages.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ImproveGoogleTagCoverageRecommendation {
}

/**
 * Recommendation to improve the asset group strength of a Performance Max
 * campaign to an "Excellent" rating.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ImprovePerformanceMaxAdStrengthRecommendation {
  /**
   * Output only. The current ad strength score of the asset group.
   */
  readonly adStrength?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING" | "NO_ADS" | "POOR" | "AVERAGE" | "GOOD" | "EXCELLENT";
  /**
   * Output only. The asset group resource name.
   */
  readonly assetGroup?: string;
}

/**
 * The keyword match type recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_KeywordMatchTypeRecommendation {
  /**
   * Output only. The existing keyword where the match type should be more
   * broad.
   */
  readonly keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Output only. The recommended new match type.
   */
  readonly recommendedMatchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
}

/**
 * The keyword recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_KeywordRecommendation {
  /**
   * Output only. The recommended keyword.
   */
  readonly keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * Output only. The recommended CPC (cost-per-click) bid.
   */
  readonly recommendedCpcBidMicros?: bigint;
  /**
   * Output only. A list of search terms this keyword matches. The same search
   * term may be repeated for multiple keywords.
   */
  readonly searchTerms?: GoogleAdsSearchads360V23Resources_RecommendationKeywordRecommendation_SearchTerm[];
}

/**
 * The lead form asset recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_LeadFormAssetRecommendation {
}

/**
 * Recommendation to lower Target ROAS.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_LowerTargetRoasRecommendation {
  /**
   * Output only. The relevant information describing the recommended target
   * adjustment.
   */
  readonly targetAdjustment?: GoogleAdsSearchads360V23Resources_Recommendation_TargetAdjustmentInfo;
}

/**
 * The Maximize Clicks opt-in recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MaximizeClicksOptInRecommendation {
  /**
   * Output only. The recommended new budget amount. Only set if the current
   * budget is too high.
   */
  readonly recommendedBudgetAmountMicros?: bigint;
}

/**
 * The Maximize Conversions Opt-In recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MaximizeConversionsOptInRecommendation {
  /**
   * Output only. The recommended new budget amount.
   */
  readonly recommendedBudgetAmountMicros?: bigint;
}

/**
 * Recommendation to opt into Maximize Conversion Value bidding strategy.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MaximizeConversionValueOptInRecommendation {
}

/**
 * The Merchant Center account details.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo {
  /**
   * Output only. The Merchant Center account ID.
   */
  readonly id?: bigint;
  /**
   * Output only. Whether the Merchant Center account is a Multi-Client account
   * (MCA).
   */
  readonly multiClient?: boolean;
  /**
   * Output only. The name of the Merchant Center account.
   */
  readonly name?: string;
}

/**
 * The Dynamic Search Ads to Performance Max migration recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MigrateDynamicSearchAdsCampaignToPerformanceMaxRecommendation {
  /**
   * Output only. A link to the Google Ads UI where the customer can manually
   * apply the recommendation.
   */
  readonly applyLink?: string;
}

/**
 * The move unused budget recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_MoveUnusedBudgetRecommendation {
  /**
   * Output only. The recommendation for the constrained budget to increase.
   */
  readonly budgetRecommendation?: GoogleAdsSearchads360V23Resources_Recommendation_CampaignBudgetRecommendation;
  /**
   * Output only. The excess budget's resource_name.
   */
  readonly excessCampaignBudget?: string;
}

/**
 * The Optimize Ad Rotation recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_OptimizeAdRotationRecommendation {
}

/**
 * Recommendation to turn on Final URL expansion for your Performance Max
 * campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_PerformanceMaxFinalUrlOptInRecommendation {
}

/**
 * The Performance Max Opt In recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_PerformanceMaxOptInRecommendation {
}

/**
 * The raise target CPA bid too low recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_RaiseTargetCpaBidTooLowRecommendation {
  /**
   * Output only. The current average target CPA of the campaign, in micros of
   * customer local currency.
   */
  readonly averageTargetCpaMicros?: bigint;
  /**
   * Output only. A number greater than 1.0 indicating the factor by which we
   * recommend the target CPA should be increased.
   */
  readonly recommendedTargetMultiplier?: number;
}

/**
 * Recommendation to raise Target CPA.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_RaiseTargetCpaRecommendation {
  /**
   * Output only. Represents the goal towards which the bidding strategy should
   * optimize. Only populated for App Campaigns.
   */
  readonly appBiddingGoal?:  | "UNSPECIFIED" | "UNKNOWN" | "OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME" | "OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME" | "OPTIMIZE_FOR_TOTAL_CONVERSION_VALUE" | "OPTIMIZE_FOR_TARGET_IN_APP_CONVERSION" | "OPTIMIZE_FOR_RETURN_ON_ADVERTISING_SPEND" | "OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME_WITHOUT_TARGET_CPI" | "OPTIMIZE_FOR_PRE_REGISTRATION_CONVERSION_VOLUME";
  /**
   * Output only. The relevant information describing the recommended target
   * adjustment.
   */
  readonly targetAdjustment?: GoogleAdsSearchads360V23Resources_Recommendation_TargetAdjustmentInfo;
}

/**
 * The impact of making the change as described in the recommendation. Some
 * types of recommendations may not have impact information.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_RecommendationImpact {
  /**
   * Output only. Base metrics at the time the recommendation was generated.
   */
  readonly baseMetrics?: GoogleAdsSearchads360V23Resources_Recommendation_RecommendationMetrics;
  /**
   * Output only. Estimated metrics if the recommendation is applied.
   */
  readonly potentialMetrics?: GoogleAdsSearchads360V23Resources_Recommendation_RecommendationMetrics;
}

/**
 * Weekly account performance metrics. For some recommendation types, these are
 * averaged over the past 90-day period and hence can be fractional.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_RecommendationMetrics {
  /**
   * Output only. Number of ad clicks.
   */
  readonly clicks?: number;
  /**
   * Output only. Number of conversions.
   */
  readonly conversions?: number;
  /**
   * Output only. Sum of the conversion value of the conversions.
   */
  readonly conversionsValue?: number;
  /**
   * Output only. Cost (in micros) for advertising, in the local currency for
   * the account.
   */
  readonly costMicros?: bigint;
  /**
   * Output only. Number of ad impressions.
   */
  readonly impressions?: number;
  /**
   * Output only. Number of video views for a video ad campaign.
   */
  readonly videoViews?: number;
}

/**
 * The recommendation to update a customer list that hasn't been updated in the
 * last 90 days. The customer receiving the recommendation is not necessarily
 * the owner account. The owner account should update the customer list.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_RefreshCustomerMatchListRecommendation {
  /**
   * Output only. Days since last refresh.
   */
  readonly daysSinceLastRefresh?: bigint;
  /**
   * Output only. The owner account. This is the account that should update the
   * customer list.
   */
  readonly ownerAccount?: GoogleAdsSearchads360V23Resources_Recommendation_AccountInfo;
  /**
   * Output only. User lists can be shared with other accounts by the owner.
   * targeting_accounts_count is the number of those accounts that can use it
   * for targeting.
   */
  readonly targetingAccountsCount?: bigint;
  /**
   * Output only. The top spending account.
   */
  readonly topSpendingAccount?: GoogleAdsSearchads360V23Resources_Recommendation_AccountInfo[];
  /**
   * Output only. The user list ID.
   */
  readonly userListId?: bigint;
  /**
   * Output only. The name of the list.
   */
  readonly userListName?: string;
}

/**
 * The add responsive search ad asset recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdAssetRecommendation {
  /**
   * Output only. The current ad to be updated.
   */
  readonly currentAd?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * Output only. The recommended assets. This is populated only with the new
   * headlines and/or descriptions, and is otherwise empty.
   */
  readonly recommendedAssets?: GoogleAdsSearchads360V23Resources__Ad;
}

/**
 * The responsive search ad improve ad strength recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdImproveAdStrengthRecommendation {
  /**
   * Output only. The current ad to be updated.
   */
  readonly currentAd?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * Output only. The updated ad.
   */
  readonly recommendedAd?: GoogleAdsSearchads360V23Resources__Ad;
}

/**
 * The add responsive search ad recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ResponsiveSearchAdRecommendation {
  /**
   * Output only. Recommended ad.
   */
  readonly ad?: GoogleAdsSearchads360V23Resources__Ad;
}

/**
 * The Search Partners Opt-In recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_SearchPartnersOptInRecommendation {
}

/**
 * The shopping recommendation to add products to a Shopping Campaign
 * Inventory.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingAddProductsToCampaignRecommendation {
  /**
   * Output only. The feed label for the campaign.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
  /**
   * Output only. The reason why no products are attached to the campaign.
   */
  readonly reason?:  | "UNSPECIFIED" | "UNKNOWN" | "MERCHANT_CENTER_ACCOUNT_HAS_NO_SUBMITTED_PRODUCTS" | "MERCHANT_CENTER_ACCOUNT_HAS_NO_SUBMITTED_PRODUCTS_IN_FEED" | "ADS_ACCOUNT_EXCLUDES_OFFERS_FROM_CAMPAIGN" | "ALL_PRODUCTS_ARE_EXCLUDED_FROM_CAMPAIGN";
}

/**
 * The shopping recommendation to fix disapproved products in a Shopping
 * Campaign Inventory.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingFixDisapprovedProductsRecommendation {
  /**
   * Output only. The numbers of products of the campaign that are disapproved.
   */
  readonly disapprovedProductsCount?: bigint;
  /**
   * Output only. The feed label for the campaign.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
  /**
   * Output only. The number of products of the campaign.
   */
  readonly productsCount?: bigint;
}

/**
 * The shopping recommendation to fix Merchant Center account suspension
 * issues.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingMerchantCenterAccountSuspensionRecommendation {
  /**
   * Output only. The feed label of the campaign for which the suspension
   * happened.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
}

/**
 * The shopping recommendation to migrate Regular Shopping Campaign targeted
 * offers to Performance Max campaigns.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingMigrateRegularShoppingCampaignOffersToPerformanceMaxRecommendation {
  /**
   * Output only. The feed label of the offers targeted by the campaigns
   * sharing this suggestion.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
}

/**
 * The shopping recommendation to add an attribute to offers that are demoted
 * because it is missing.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingOfferAttributeRecommendation {
  /**
   * Output only. The number of online, servable offers that are demoted for
   * missing attributes. Visit the Merchant Center for more details.
   */
  readonly demotedOffersCount?: bigint;
  /**
   * Output only. The campaign feed label.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
  /**
   * Output only. The number of online, servable offers.
   */
  readonly offersCount?: bigint;
}

/**
 * The shopping recommendation to create a catch-all campaign that targets all
 * offers.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_ShoppingTargetAllOffersRecommendation {
  /**
   * Output only. The offer feed label.
   */
  readonly feedLabel?: string;
  /**
   * Output only. The details of the Merchant Center account.
   */
  readonly merchant?: GoogleAdsSearchads360V23Resources_Recommendation_MerchantInfo;
  /**
   * Output only. The number of untargeted offers.
   */
  readonly untargetedOffersCount?: bigint;
}

/**
 * The sitelink asset recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_SitelinkAssetRecommendation {
  /**
   * Output only. New sitelink assets recommended at the campaign level.
   */
  readonly recommendedCampaignSitelinkAssets?: GoogleAdsSearchads360V23Resources__Asset[];
  /**
   * Output only. New sitelink assets recommended at the customer level.
   */
  readonly recommendedCustomerSitelinkAssets?: GoogleAdsSearchads360V23Resources__Asset[];
}

/**
 * Information of a target adjustment recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_TargetAdjustmentInfo {
  /**
   * Output only. The current average target of the campaign or portfolio
   * targeted by this recommendation.
   */
  readonly currentAverageTargetMicros?: bigint;
  /**
   * Output only. The factor by which we recommend the target to be adjusted
   * by.
   */
  readonly recommendedTargetMultiplier?: number;
  /**
   * Output only. The shared set resource name of the portfolio bidding
   * strategy where the target is defined. Only populated if the recommendation
   * is portfolio level.
   */
  readonly sharedSet?: string;
}

/**
 * The Target CPA opt-in recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_TargetCpaOptInRecommendation {
  /**
   * Output only. The available goals and corresponding options for Target CPA
   * strategy.
   */
  readonly options?: GoogleAdsSearchads360V23Resources_RecommendationTargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption[];
  /**
   * Output only. The recommended average CPA target. See required budget
   * amount and impact of using this recommendation in options list.
   */
  readonly recommendedTargetCpaMicros?: bigint;
}

/**
 * The Target ROAS opt-in recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_TargetRoasOptInRecommendation {
  /**
   * Output only. The recommended target ROAS (revenue per unit of spend). The
   * value is between 0.01 and 1000.0, inclusive.
   */
  readonly recommendedTargetRoas?: number;
  /**
   * Output only. The minimum campaign budget, in local currency for the
   * account, required to achieve the target ROAS. Amount is specified in
   * micros, where one million is equivalent to one currency unit.
   */
  readonly requiredCampaignBudgetAmountMicros?: bigint;
}

/**
 * The text ad recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_TextAdRecommendation {
  /**
   * Output only. Recommended ad.
   */
  readonly ad?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * Output only. Date, if present, is the earliest when the recommendation
   * will be auto applied. YYYY-MM-DD format, for example, 2018-04-17.
   */
  readonly autoApplyDate?: string;
  /**
   * Output only. Creation date of the recommended ad. YYYY-MM-DD format, for
   * example, 2018-04-17.
   */
  readonly creationDate?: string;
}

/**
 * The Upgrade Local campaign to Performance Max campaign recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_UpgradeLocalCampaignToPerformanceMaxRecommendation {
}

/**
 * The upgrade a Smart Shopping campaign to a Performance Max campaign
 * recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_UpgradeSmartShoppingCampaignToPerformanceMaxRecommendation {
  /**
   * Output only. ID of Merchant Center account.
   */
  readonly merchantId?: bigint;
  /**
   * Output only. Country whose products from merchant's inventory should be
   * included.
   */
  readonly salesCountryCode?: string;
}

/**
 * The use broad match keyword recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_Recommendation_UseBroadMatchKeywordRecommendation {
  /**
   * Output only. Total number of keywords in the campaign.
   */
  readonly campaignKeywordsCount?: bigint;
  /**
   * Output only. Whether the associated campaign uses a shared budget.
   */
  readonly campaignUsesSharedBudget?: boolean;
  /**
   * Output only. Sample of keywords to be expanded to Broad Match.
   */
  readonly keyword?: GoogleAdsSearchads360V23Common__KeywordInfo[];
  /**
   * Output only. The budget recommended to avoid becoming budget constrained
   * after applying the recommendation.
   */
  readonly requiredCampaignBudgetAmountMicros?: bigint;
  /**
   * Output only. Total number of keywords to be expanded to Broad Match in the
   * campaign.
   */
  readonly suggestedKeywordsCount?: bigint;
}

/**
 * The impact estimates for a given budget amount.
 */
export interface GoogleAdsSearchads360V23Resources_RecommendationCampaignBudgetRecommendation_CampaignBudgetRecommendationOption {
  /**
   * Output only. The budget amount for this option.
   */
  readonly budgetAmountMicros?: bigint;
  /**
   * Output only. The impact estimate if budget is changed to amount specified
   * in this option.
   */
  readonly impact?: GoogleAdsSearchads360V23Resources_Recommendation_RecommendationImpact;
}

/**
 * Information about a search term as related to a keyword recommendation.
 */
export interface GoogleAdsSearchads360V23Resources_RecommendationKeywordRecommendation_SearchTerm {
  /**
   * Output only. Estimated number of historical weekly searches for this
   * search term.
   */
  readonly estimatedWeeklySearchCount?: bigint;
  /**
   * Output only. The text of the search term.
   */
  readonly text?: string;
}

/**
 * The Target CPA opt-in option with impact estimate.
 */
export interface GoogleAdsSearchads360V23Resources_RecommendationTargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption {
  /**
   * Output only. The goal achieved by this option.
   */
  readonly goal?:  | "UNSPECIFIED" | "UNKNOWN" | "SAME_COST" | "SAME_CONVERSIONS" | "SAME_CPA" | "CLOSEST_CPA";
  /**
   * Output only. The impact estimate if this option is selected.
   */
  readonly impact?: GoogleAdsSearchads360V23Resources_Recommendation_RecommendationImpact;
  /**
   * Output only. The minimum campaign budget, in local currency for the
   * account, required to achieve the target CPA. Amount is specified in micros,
   * where one million is equivalent to one currency unit.
   */
  readonly requiredCampaignBudgetAmountMicros?: bigint;
  /**
   * Output only. Average CPA target.
   */
  readonly targetCpaMicros?: bigint;
}

/**
 * An issue affecting whether a product can show in ads.
 */
export interface GoogleAdsSearchads360V23Resources_ShoppingProduct_ProductIssue {
  /**
   * Output only. The severity of the issue in Google Ads.
   */
  readonly adsSeverity?:  | "UNSPECIFIED" | "UNKNOWN" | "WARNING" | "ERROR";
  /**
   * Output only. List of upper-case two-letter ISO 3166-1 codes of the regions
   * affected by the issue. If empty, all regions are affected.
   */
  readonly affectedRegions?: string[];
  /**
   * Output only. The name of the product's attribute, if any, that triggered
   * the issue.
   */
  readonly attributeName?: string;
  /**
   * Output only. The short description of the issue in English.
   */
  readonly description?: string;
  /**
   * Output only. The detailed description of the issue in English.
   */
  readonly detail?: string;
  /**
   * Output only. The URL of the Help Center article for the issue.
   */
  readonly documentation?: string;
  /**
   * Output only. The error code that identifies the issue.
   */
  readonly errorCode?: string;
}

/**
 * Settings for configuring a business profile optimized for ads as this
 * campaign's landing page.
 */
export interface GoogleAdsSearchads360V23Resources_SmartCampaignSetting_AdOptimizedBusinessProfileSetting {
  /**
   * Enabling a lead form on your business profile enables prospective
   * customers to contact your business by filling out a simple form, and you'll
   * receive their information through email.
   */
  includeLeadForm?: boolean;
}

/**
 * Phone number and country code in smart campaign settings.
 */
export interface GoogleAdsSearchads360V23Resources_SmartCampaignSetting_PhoneNumber {
  /**
   * Upper-case, two-letter country code as defined by ISO-3166.
   */
  countryCode?: string;
  /**
   * Phone number of the smart campaign.
   */
  phoneNumber?: string;
}

/**
 * A single operation to propose the creation of a new account-level budget or
 * edit/end/remove an existing one.
 */
export interface GoogleAdsSearchads360V23Services__AccountBudgetProposalOperation {
  /**
   * Create operation: A new proposal to create a new budget, edit an existing
   * budget, end an actively running budget, or remove an approved budget
   * scheduled to start in the future. No resource name is expected for the new
   * proposal.
   */
  create?: GoogleAdsSearchads360V23Resources__AccountBudgetProposal;
  /**
   * Remove operation: A resource name for the removed proposal is expected, in
   * this format:
   * `customers/{customer_id}/accountBudgetProposals/{account_budget_proposal_id}`
   * A request may be cancelled iff it is pending.
   */
  remove?: string;
  /**
   * FieldMask that determines which budget fields are modified. While budgets
   * may be modified, proposals that propose such modifications are final.
   * Therefore, update operations are not supported for proposals. Proposals
   * that modify budgets have the 'update' proposal type. Specifying a mask for
   * any other proposal type is considered an error.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AccountBudgetProposalOperation(data: any): GoogleAdsSearchads360V23Services__AccountBudgetProposalOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data["create"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AccountBudgetProposalOperation(data: any): GoogleAdsSearchads360V23Services__AccountBudgetProposalOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data["create"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single update on an account link.
 */
export interface GoogleAdsSearchads360V23Services__AccountLinkOperation {
  /**
   * Remove operation: A resource name for the account link to remove is
   * expected, in this format:
   * `customers/{customer_id}/accountLinks/{account_link_id}`
   */
  remove?: string;
  /**
   * Update operation: The account link is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__AccountLink;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AccountLinkOperation(data: any): GoogleAdsSearchads360V23Services__AccountLinkOperation {
  return {
    ...data,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AccountLink(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AccountLinkOperation(data: any): GoogleAdsSearchads360V23Services__AccountLinkOperation {
  return {
    ...data,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AccountLink(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Request message for BatchJobService.AddBatchJobOperations.
 */
export interface GoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest {
  /**
   * Required. The list of mutates being added. Operations can use negative
   * integers as temp ids to signify dependencies between entities created in
   * this batch job. For example, a customer with id = 1234 can create a
   * campaign and an ad group in that same campaign by creating a campaign in
   * the first operation with the resource name explicitly set to
   * "customers/1234/campaigns/-1", and creating an ad group in the second
   * operation with the campaign field also set to
   * "customers/1234/campaigns/-1".
   */
  mutateOperations?: GoogleAdsSearchads360V23Services__MutateOperation[];
  /**
   * A token used to enforce sequencing. The first AddBatchJobOperations
   * request for a batch job should not set sequence_token. Subsequent requests
   * must set sequence_token to the value of next_sequence_token received in the
   * previous AddBatchJobOperations response.
   */
  sequenceToken?: string;
}

function serializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest(data: any): GoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest {
  return {
    ...data,
    mutateOperations: data["mutateOperations"] !== undefined ? data["mutateOperations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest(data: any): GoogleAdsSearchads360V23Services__AddBatchJobOperationsRequest {
  return {
    ...data,
    mutateOperations: data["mutateOperations"] !== undefined ? data["mutateOperations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateOperation(item))) : undefined,
  };
}

/**
 * Response message for BatchJobService.AddBatchJobOperations.
 */
export interface GoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse {
  /**
   * The sequence token to be used when calling AddBatchJobOperations again if
   * more operations need to be added. The next AddBatchJobOperations request
   * must set the sequence_token field to the value of this field.
   */
  nextSequenceToken?: string;
  /**
   * The total number of operations added so far for this batch job.
   */
  totalOperations?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse(data: any): GoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse {
  return {
    ...data,
    totalOperations: data["totalOperations"] !== undefined ? String(data["totalOperations"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse(data: any): GoogleAdsSearchads360V23Services__AddBatchJobOperationsResponse {
  return {
    ...data,
    totalOperations: data["totalOperations"] !== undefined ? BigInt(data["totalOperations"]) : undefined,
  };
}

/**
 * Request message for
 * OfflineUserDataJobService.AddOfflineUserDataJobOperations.
 */
export interface GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest {
  /**
   * True to enable partial failure for the offline user data job.
   */
  enablePartialFailure?: boolean;
  /**
   * True to enable warnings for the offline user data job. When enabled, a
   * warning will not block the OfflineUserDataJobOperation, and will also
   * return warning messages about malformed field values.
   */
  enableWarnings?: boolean;
  /**
   * Required. The list of operations to be done.
   */
  operations?: GoogleAdsSearchads360V23Services__OfflineUserDataJobOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest(data: any): GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__OfflineUserDataJobOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest(data: any): GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__OfflineUserDataJobOperation(item))) : undefined,
  };
}

/**
 * Response message for
 * OfflineUserDataJobService.AddOfflineUserDataJobOperations.
 */
export interface GoogleAdsSearchads360V23Services__AddOfflineUserDataJobOperationsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * Non blocking errors that pertain to operation failures in the warnings
   * mode. Returned only when enable_warnings = true.
   */
  warning?: GoogleRpc__Status;
}

/**
 * A single operation (create, remove) on an ad group ad label.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupAdLabelOperation {
  /**
   * Create operation: No resource name is expected for the new ad group ad
   * label.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupAdLabel;
  /**
   * Remove operation: A resource name for the ad group ad label being removed,
   * in this format:
   * `customers/{customer_id}/adGroupAdLabels/{ad_group_id}~{ad_id}~{label_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, update, remove) on an ad group ad.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupAdOperation {
  /**
   * Create operation: No resource name is expected for the new ad.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupAd;
  /**
   * Configuration for how policies are validated.
   */
  policyValidationParameter?: GoogleAdsSearchads360V23Common__PolicyValidationParameter;
  /**
   * Remove operation: A resource name for the removed ad is expected, in this
   * format: `customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}`
   */
  remove?: string;
  /**
   * Update operation: The ad is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdGroupAd;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupAdOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupAdOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on an ad group asset.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupAssetOperation {
  /**
   * Create operation: No resource name is expected for the new ad group asset.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupAsset;
  /**
   * Remove operation: A resource name for the removed ad group asset is
   * expected, in this format:
   * `customers/{customer_id}/adGroupAssets/{ad_group_id}~{asset_id}~{field_type}`
   */
  remove?: string;
  /**
   * Update operation: The ad group asset is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdGroupAsset;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on an ad group asset set.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupAssetSetOperation {
  /**
   * Create operation: No resource name is expected for the new ad group asset
   * set.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupAssetSet;
  /**
   * Remove operation: A resource name for the removed ad group asset set is
   * expected, in this format:
   * `customers/{customer_id}/adGroupAssetSets/{ad_group_id}~{asset_set_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove, update) on an ad group bid modifier.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupBidModifierOperation {
  /**
   * Create operation: No resource name is expected for the new ad group bid
   * modifier.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupBidModifier;
  /**
   * Remove operation: A resource name for the removed ad group bid modifier is
   * expected, in this format:
   * `customers/{customer_id}/adGroupBidModifiers/{ad_group_id}~{criterion_id}`
   */
  remove?: string;
  /**
   * Update operation: The ad group bid modifier is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdGroupBidModifier;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupBidModifierOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupBidModifierOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customizer attribute.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupCriterionCustomizerOperation {
  /**
   * Create operation: No resource name is expected for the new ad group
   * criterion customizer.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupCriterionCustomizer;
  /**
   * Remove operation: A resource name for the removed ad group criterion
   * customizer is expected, in this format:
   * `customers/{customer_id}/adGroupCriterionCustomizers/{ad_group_id}~{criterion_id}~{customizer_attribute_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove) on an ad group criterion label.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupCriterionLabelOperation {
  /**
   * Create operation: No resource name is expected for the new ad group label.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupCriterionLabel;
  /**
   * Remove operation: A resource name for the ad group criterion label being
   * removed, in this format:
   * `customers/{customer_id}/adGroupCriterionLabels/{ad_group_id}~{criterion_id}~{label_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove, update) on an ad group criterion.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupCriterionOperation {
  /**
   * Create operation: No resource name is expected for the new criterion.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupCriterion;
  /**
   * The list of policy violation keys that should not cause a
   * PolicyViolationError to be reported. Not all policy violations are
   * exemptable, refer to the is_exemptible field in the returned
   * PolicyViolationError. Resources violating these polices will be saved, but
   * will not be eligible to serve. They may begin serving at a later time due
   * to a change in policies, re-review of the resource, or a change in
   * advertiser certificates.
   */
  exemptPolicyViolationKeys?: GoogleAdsSearchads360V23Common__PolicyViolationKey[];
  /**
   * Remove operation: A resource name for the removed criterion is expected,
   * in this format:
   * `customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id}`
   */
  remove?: string;
  /**
   * Update operation: The criterion is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdGroupCriterion;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customizer attribute.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupCustomizerOperation {
  /**
   * Create operation: No resource name is expected for the new ad group
   * customizer
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupCustomizer;
  /**
   * Remove operation: A resource name for the removed ad group customizer is
   * expected, in this format:
   * `customers/{customer_id}/adGroupCustomizers/{ad_group_id}~{customizer_attribute_id}`
   */
  remove?: string;
}

/**
 * The suggested text and AdGroup/Campaign pairing for a given keyword.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupKeywordSuggestion {
  /**
   * The original keyword text.
   */
  keywordText?: string;
  /**
   * The suggested AdGroup for the keyword. Resource name format:
   * `customers/{customer_id}/adGroups/{ad_group_id}`
   */
  suggestedAdGroup?: string;
  /**
   * The suggested Campaign for the keyword. Resource name format:
   * `customers/{customer_id}/campaigns/{campaign_id}`
   */
  suggestedCampaign?: string;
  /**
   * The normalized version of keyword_text for BROAD/EXACT/PHRASE suggestions.
   */
  suggestedKeywordText?: string;
  /**
   * The suggested keyword match type.
   */
  suggestedMatchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
}

/**
 * A single operation (create, remove) on an ad group label.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupLabelOperation {
  /**
   * Create operation: No resource name is expected for the new ad group label.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroupLabel;
  /**
   * Remove operation: A resource name for the ad group label being removed, in
   * this format:
   * `customers/{customer_id}/adGroupLabels/{ad_group_id}~{label_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, update, remove) on an ad group.
 */
export interface GoogleAdsSearchads360V23Services__AdGroupOperation {
  /**
   * Create operation: No resource name is expected for the new ad group.
   */
  create?: GoogleAdsSearchads360V23Resources__AdGroup;
  /**
   * Remove operation: A resource name for the removed ad group is expected, in
   * this format: `customers/{customer_id}/adGroups/{ad_group_id}`
   */
  remove?: string;
  /**
   * Update operation: The ad group is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdGroup;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdGroupOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroup(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroup(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdGroupOperation(data: any): GoogleAdsSearchads360V23Services__AdGroupOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroup(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroup(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single update operation on an ad.
 */
export interface GoogleAdsSearchads360V23Services__AdOperation {
  /**
   * Configuration for how policies are validated.
   */
  policyValidationParameter?: GoogleAdsSearchads360V23Common__PolicyValidationParameter;
  /**
   * Update operation: The ad is expected to have a valid resource name in this
   * format: `customers/{customer_id}/ads/{ad_id}`
   */
  update?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdOperation(data: any): GoogleAdsSearchads360V23Services__AdOperation {
  return {
    ...data,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdOperation(data: any): GoogleAdsSearchads360V23Services__AdOperation {
  return {
    ...data,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on ad parameter.
 */
export interface GoogleAdsSearchads360V23Services__AdParameterOperation {
  /**
   * Create operation: No resource name is expected for the new ad parameter.
   */
  create?: GoogleAdsSearchads360V23Resources__AdParameter;
  /**
   * Remove operation: A resource name for the ad parameter to remove is
   * expected in this format:
   * `customers/{customer_id}/adParameters/{ad_group_id}~{criterion_id}~{parameter_index}`
   */
  remove?: string;
  /**
   * Update operation: The ad parameter is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__AdParameter;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AdParameterOperation(data: any): GoogleAdsSearchads360V23Services__AdParameterOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdParameter(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdParameter(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdParameterOperation(data: any): GoogleAdsSearchads360V23Services__AdParameterOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdParameter(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdParameter(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Advanced targeting settings for products.
 */
export interface GoogleAdsSearchads360V23Services__AdvancedProductTargeting {
  /**
   * Surface targeting settings for this product.
   */
  surfaceTargetingSettings?: GoogleAdsSearchads360V23Services__SurfaceTargeting;
  /**
   * Settings for a Target frequency campaign. Must be set when selecting the
   * TARGET_FREQUENCY product. See
   * https://support.google.com/google-ads/answer/12400225 for more information
   * about Target Frequency campaigns.
   */
  targetFrequencySettings?: GoogleAdsSearchads360V23Services__TargetFrequencySettings;
  /**
   * Settings for YouTube Select targeting.
   */
  youtubeSelectSettings?: GoogleAdsSearchads360V23Services__YouTubeSelectSettings;
}

function serializeGoogleAdsSearchads360V23Services__AdvancedProductTargeting(data: any): GoogleAdsSearchads360V23Services__AdvancedProductTargeting {
  return {
    ...data,
    youtubeSelectSettings: data["youtubeSelectSettings"] !== undefined ? serializeGoogleAdsSearchads360V23Services__YouTubeSelectSettings(data["youtubeSelectSettings"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AdvancedProductTargeting(data: any): GoogleAdsSearchads360V23Services__AdvancedProductTargeting {
  return {
    ...data,
    youtubeSelectSettings: data["youtubeSelectSettings"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__YouTubeSelectSettings(data["youtubeSelectSettings"]) : undefined,
  };
}

/**
 * Request message for LocalServicesLeadService.AppendLeadConversation.
 */
export interface GoogleAdsSearchads360V23Services__AppendLeadConversationRequest {
  /**
   * Required. Conversations that are being appended.
   */
  conversations?: GoogleAdsSearchads360V23Services__Conversation[];
}

/**
 * Response message for LocalServicesLeadService.AppendLeadConversation.
 */
export interface GoogleAdsSearchads360V23Services__AppendLeadConversationResponse {
  /**
   * Required. List of append conversation operation results.
   */
  responses?: GoogleAdsSearchads360V23Services__ConversationOrError[];
}

/**
 * Request message for applying an incentive.
 */
export interface GoogleAdsSearchads360V23Services__ApplyIncentiveRequest {
  /**
   * Required. User's country code. Required. This field must be equal to the
   * Google Ads account's billing country. Incentive eligibility, terms of
   * service, and reward values are often country-specific. This country code is
   * used to ensure the selected incentive is applicable to the user. Possible
   * country codes:
   * https://developers.google.com/google-ads/api/data/codes-formats#country_codes
   */
  countryCode?: string;
}

/**
 * Response for applying an incentive.
 */
export interface GoogleAdsSearchads360V23Services__ApplyIncentiveResponse {
  /**
   * The coupon code of the applied incentive. A globally unique identifier of
   * the applied incentive. This code is separate and distinct from the
   * selected_incentive_id in the request.
   */
  couponCode?: string;
  /**
   * The timestamp when this incentive was applied. The timestamp is in UTC
   * timezone and in "yyyy-MM-dd HH:mm:ss" format.
   */
  creationTime?: string;
}

/**
 * Information about the operation to apply a recommendation and any parameters
 * to customize it.
 */
export interface GoogleAdsSearchads360V23Services__ApplyRecommendationOperation {
  /**
   * Parameters to use when applying call asset recommendation.
   */
  callAsset?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters;
  /**
   * Parameters to use when applying call extension recommendation.
   */
  callExtension?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallExtensionParameters;
  /**
   * Parameters to use when applying callout asset recommendation.
   */
  calloutAsset?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters;
  /**
   * Parameters to use when applying callout extension recommendation.
   */
  calloutExtension?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutExtensionParameters;
  /**
   * Optional parameters to use when applying a campaign budget recommendation.
   */
  campaignBudget?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters;
  /**
   * Parameters to use when applying forecasting set target CPA recommendation.
   */
  forecastingSetTargetCpa?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters;
  /**
   * Parameters to use when applying a forecasting set target ROAS
   * recommendation.
   */
  forecastingSetTargetRoas?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters;
  /**
   * Optional parameters to use when applying keyword recommendation.
   */
  keyword?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters;
  /**
   * Parameters to use when applying lead form asset recommendation.
   */
  leadFormAsset?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters;
  /**
   * Parameters to use when applying lower Target ROAS recommendation.
   */
  lowerTargetRoas?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LowerTargetRoasParameters;
  /**
   * Parameters to use when applying move unused budget recommendation.
   */
  moveUnusedBudget?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters;
  /**
   * Parameters to use when applying raise Target CPA recommendation.
   */
  raiseTargetCpa?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_RaiseTargetCpaParameters;
  /**
   * Parameters to use when applying a raise target CPA bid too low
   * recommendation. The apply is asynchronous and can take minutes depending on
   * the number of ad groups there is in the related campaign.
   */
  raiseTargetCpaBidTooLow?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_RaiseTargetCpaBidTooLowParameters;
  /**
   * The resource name of the recommendation to apply.
   */
  resourceName?: string;
  /**
   * Parameters to use when applying a responsive search ad recommendation.
   */
  responsiveSearchAd?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters;
  /**
   * Parameters to use when applying a responsive search ad asset
   * recommendation.
   */
  responsiveSearchAdAsset?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters;
  /**
   * Parameters to use when applying a responsive search ad improve ad strength
   * recommendation.
   */
  responsiveSearchAdImproveAdStrength?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters;
  /**
   * Parameters to use when applying set target CPA recommendation.
   */
  setTargetCpa?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters;
  /**
   * Parameters to use when applying set target ROAS recommendation.
   */
  setTargetRoas?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters;
  /**
   * Parameters to use when applying sitelink asset recommendation.
   */
  sitelinkAsset?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters;
  /**
   * Parameters to use when applying sitelink recommendation.
   */
  sitelinkExtension?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkExtensionParameters;
  /**
   * Optional parameters to use when applying target CPA opt-in recommendation.
   */
  targetCpaOptIn?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters;
  /**
   * Optional parameters to use when applying target ROAS opt-in
   * recommendation.
   */
  targetRoasOptIn?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters;
  /**
   * Optional parameters to use when applying a text ad recommendation.
   */
  textAd?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters;
  /**
   * Parameters to use when applying a use broad match keyword recommendation.
   */
  useBroadMatchKeyword?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters;
}

function serializeGoogleAdsSearchads360V23Services__ApplyRecommendationOperation(data: any): GoogleAdsSearchads360V23Services__ApplyRecommendationOperation {
  return {
    ...data,
    callAsset: data["callAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters(data["callAsset"]) : undefined,
    calloutAsset: data["calloutAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters(data["calloutAsset"]) : undefined,
    campaignBudget: data["campaignBudget"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters(data["campaignBudget"]) : undefined,
    forecastingSetTargetCpa: data["forecastingSetTargetCpa"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data["forecastingSetTargetCpa"]) : undefined,
    forecastingSetTargetRoas: data["forecastingSetTargetRoas"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data["forecastingSetTargetRoas"]) : undefined,
    keyword: data["keyword"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters(data["keyword"]) : undefined,
    leadFormAsset: data["leadFormAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters(data["leadFormAsset"]) : undefined,
    moveUnusedBudget: data["moveUnusedBudget"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters(data["moveUnusedBudget"]) : undefined,
    responsiveSearchAd: data["responsiveSearchAd"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters(data["responsiveSearchAd"]) : undefined,
    responsiveSearchAdAsset: data["responsiveSearchAdAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters(data["responsiveSearchAdAsset"]) : undefined,
    responsiveSearchAdImproveAdStrength: data["responsiveSearchAdImproveAdStrength"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters(data["responsiveSearchAdImproveAdStrength"]) : undefined,
    setTargetCpa: data["setTargetCpa"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data["setTargetCpa"]) : undefined,
    setTargetRoas: data["setTargetRoas"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data["setTargetRoas"]) : undefined,
    sitelinkAsset: data["sitelinkAsset"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters(data["sitelinkAsset"]) : undefined,
    targetCpaOptIn: data["targetCpaOptIn"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters(data["targetCpaOptIn"]) : undefined,
    targetRoasOptIn: data["targetRoasOptIn"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters(data["targetRoasOptIn"]) : undefined,
    textAd: data["textAd"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters(data["textAd"]) : undefined,
    useBroadMatchKeyword: data["useBroadMatchKeyword"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters(data["useBroadMatchKeyword"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ApplyRecommendationOperation(data: any): GoogleAdsSearchads360V23Services__ApplyRecommendationOperation {
  return {
    ...data,
    callAsset: data["callAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters(data["callAsset"]) : undefined,
    calloutAsset: data["calloutAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters(data["calloutAsset"]) : undefined,
    campaignBudget: data["campaignBudget"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters(data["campaignBudget"]) : undefined,
    forecastingSetTargetCpa: data["forecastingSetTargetCpa"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data["forecastingSetTargetCpa"]) : undefined,
    forecastingSetTargetRoas: data["forecastingSetTargetRoas"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data["forecastingSetTargetRoas"]) : undefined,
    keyword: data["keyword"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters(data["keyword"]) : undefined,
    leadFormAsset: data["leadFormAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters(data["leadFormAsset"]) : undefined,
    moveUnusedBudget: data["moveUnusedBudget"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters(data["moveUnusedBudget"]) : undefined,
    responsiveSearchAd: data["responsiveSearchAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters(data["responsiveSearchAd"]) : undefined,
    responsiveSearchAdAsset: data["responsiveSearchAdAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters(data["responsiveSearchAdAsset"]) : undefined,
    responsiveSearchAdImproveAdStrength: data["responsiveSearchAdImproveAdStrength"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters(data["responsiveSearchAdImproveAdStrength"]) : undefined,
    setTargetCpa: data["setTargetCpa"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data["setTargetCpa"]) : undefined,
    setTargetRoas: data["setTargetRoas"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data["setTargetRoas"]) : undefined,
    sitelinkAsset: data["sitelinkAsset"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters(data["sitelinkAsset"]) : undefined,
    targetCpaOptIn: data["targetCpaOptIn"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters(data["targetCpaOptIn"]) : undefined,
    targetRoasOptIn: data["targetRoasOptIn"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters(data["targetRoasOptIn"]) : undefined,
    textAd: data["textAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters(data["textAd"]) : undefined,
    useBroadMatchKeyword: data["useBroadMatchKeyword"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters(data["useBroadMatchKeyword"]) : undefined,
  };
}

/**
 * Request message for RecommendationService.ApplyRecommendation.
 */
export interface GoogleAdsSearchads360V23Services__ApplyRecommendationRequest {
  /**
   * Required. The list of operations to apply recommendations. If
   * partial_failure=false all recommendations should be of the same type There
   * is a limit of 100 operations per request.
   */
  operations?: GoogleAdsSearchads360V23Services__ApplyRecommendationOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, operations will be carried out as a
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__ApplyRecommendationRequest(data: any): GoogleAdsSearchads360V23Services__ApplyRecommendationRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ApplyRecommendationOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ApplyRecommendationRequest(data: any): GoogleAdsSearchads360V23Services__ApplyRecommendationRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ApplyRecommendationOperation(item))) : undefined,
  };
}

/**
 * Response message for RecommendationService.ApplyRecommendation.
 */
export interface GoogleAdsSearchads360V23Services__ApplyRecommendationResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors) we return the RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * Results of operations to apply recommendations.
   */
  results?: GoogleAdsSearchads360V23Services__ApplyRecommendationResult[];
}

/**
 * The result of applying a recommendation.
 */
export interface GoogleAdsSearchads360V23Services__ApplyRecommendationResult {
  /**
   * Returned for successful applies.
   */
  resourceName?: string;
}

/**
 * A single operation (create, remove) on an asset group asset.
 */
export interface GoogleAdsSearchads360V23Services__AssetGroupAssetOperation {
  /**
   * Create operation: No resource name is expected for the new asset group
   * asset.
   */
  create?: GoogleAdsSearchads360V23Resources__AssetGroupAsset;
  /**
   * Remove operation: A resource name for the removed asset group asset is
   * expected, in this format:
   * `customers/{customer_id}/assetGroupAssets/{asset_group_id}~{asset_id}~{field_type}`
   */
  remove?: string;
  /**
   * Update operation: The asset group asset is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AssetGroupAsset;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on an asset group listing group filter.
 */
export interface GoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation {
  /**
   * Create operation: No resource name is expected for the new asset group
   * listing group filter.
   */
  create?: GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter;
  /**
   * Remove operation: A resource name for the removed asset group listing
   * group filter is expected, in this format:
   * `customers/{customer_id}/assetGroupListingGroupFilters/{asset_group_id}~{listing_group_filter_id}`
   * An entity can be removed only if it's not referenced by other
   * parent_listing_group_id. If multiple entities are being deleted, the
   * mutates must be in the correct order.
   */
  remove?: string;
  /**
   * Update operation: The asset group listing group filter is expected to have
   * a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on an asset group.
 */
export interface GoogleAdsSearchads360V23Services__AssetGroupOperation {
  /**
   * Create operation: No resource name is expected for the new asset group
   */
  create?: GoogleAdsSearchads360V23Resources__AssetGroup;
  /**
   * Remove operation: A resource name for the removed asset group is expected,
   * in this format: `customers/{customer_id}/assetGroups/{asset_group_id}`
   */
  remove?: string;
  /**
   * Update operation: The asset group is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__AssetGroup;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AssetGroupOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AssetGroupOperation(data: any): GoogleAdsSearchads360V23Services__AssetGroupOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on an asset group signal.
 */
export interface GoogleAdsSearchads360V23Services__AssetGroupSignalOperation {
  /**
   * Create operation: No resource name is expected for the new asset group
   * signal.
   */
  create?: GoogleAdsSearchads360V23Resources__AssetGroupSignal;
  /**
   * Optional. The list of policy violation keys that should not cause a
   * PolicyViolationError to be reported. Not all policy violations are
   * exemptable, refer to the is_exemptible field in the returned
   * PolicyViolationError. Resources violating these polices will be saved, but
   * will not be eligible to serve. They may begin serving at a later time due
   * to a change in policies, re-review of the resource, or a change in
   * advertiser certificates.
   */
  exemptPolicyViolationKeys?: GoogleAdsSearchads360V23Common__PolicyViolationKey[];
  /**
   * Remove operation: A resource name for the removed asset group signal is
   * expected, in this format:
   * `customers/{customer_id}/assetGroupSignals/{asset_group_id}~{criterion_id}`
   */
  remove?: string;
}

/**
 * A single operation to create an asset. Supported asset types are
 * YoutubeVideoAsset, MediaBundleAsset, ImageAsset, LeadFormAsset,
 * LocationAsset, and ImageAsset. TextAsset can be created with an Ad inline,
 * but it can also be created apart from an Ad like other assets.
 */
export interface GoogleAdsSearchads360V23Services__AssetOperation {
  /**
   * Create operation: No resource name is expected for the new asset.
   */
  create?: GoogleAdsSearchads360V23Resources__Asset;
  /**
   * Update operation: The asset is expected to have a valid resource name in
   * this format: `customers/{customer_id}/assets/{asset_id}`
   */
  update?: GoogleAdsSearchads360V23Resources__Asset;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AssetOperation(data: any): GoogleAdsSearchads360V23Services__AssetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Asset(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Asset(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AssetOperation(data: any): GoogleAdsSearchads360V23Services__AssetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Asset(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Asset(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on an asset set asset.
 */
export interface GoogleAdsSearchads360V23Services__AssetSetAssetOperation {
  /**
   * Create operation: No resource name is expected for the new asset set asset
   */
  create?: GoogleAdsSearchads360V23Resources__AssetSetAsset;
  /**
   * Remove operation: A resource name for the removed asset set asset is
   * expected, in this format:
   * `customers/{customer_id}/assetSetAssets/{asset_set_id}~{asset_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove) on an asset set.
 */
export interface GoogleAdsSearchads360V23Services__AssetSetOperation {
  /**
   * Create operation: No resource name is expected for the new asset set
   */
  create?: GoogleAdsSearchads360V23Resources__AssetSet;
  /**
   * Remove operation: A resource name for the removed asset set is expected,
   * in this format: `customers/{customer_id}/assetSets/{asset_set_id}`
   */
  remove?: string;
  /**
   * Update operation: The asset set is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__AssetSet;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AssetSetOperation(data: any): GoogleAdsSearchads360V23Services__AssetSetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetSet(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetSet(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AssetSetOperation(data: any): GoogleAdsSearchads360V23Services__AssetSetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetSet(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetSet(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * The combination of system asset and field type to remove.
 */
export interface GoogleAdsSearchads360V23Services__AssetsWithFieldType {
  /**
   * Required. The resource name of the asset to be removed.
   */
  asset?: string;
  /**
   * Required. The asset field type.
   */
  assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
}

/**
 * An audience attribute with metadata and metrics.
 */
export interface GoogleAdsSearchads360V23Services__AudienceCompositionAttribute {
  /**
   * The attribute with its metadata.
   */
  attributeMetadata?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata;
  /**
   * Share and index metrics for the attribute.
   */
  metrics?: GoogleAdsSearchads360V23Services__AudienceCompositionMetrics;
}

function serializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionAttribute {
  return {
    ...data,
    attributeMetadata: data["attributeMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["attributeMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionAttribute {
  return {
    ...data,
    attributeMetadata: data["attributeMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["attributeMetadata"]) : undefined,
  };
}

/**
 * A collection of related attributes, with metadata and metrics, in an
 * audience composition insights report.
 */
export interface GoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster {
  /**
   * The individual attributes that make up this cluster, with metadata and
   * metrics.
   */
  attributes?: GoogleAdsSearchads360V23Services__AudienceCompositionAttribute[];
  /**
   * The name of this cluster of attributes
   */
  clusterDisplayName?: string;
  /**
   * If the dimension associated with this cluster is YOUTUBE_CHANNEL, then
   * cluster_metrics are metrics associated with the cluster as a whole. For
   * other dimensions, this field is unset.
   */
  clusterMetrics?: GoogleAdsSearchads360V23Services__AudienceCompositionMetrics;
}

function serializeGoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(item))) : undefined,
  };
}

/**
 * The share and index metrics associated with an attribute in an audience
 * composition insights report.
 */
export interface GoogleAdsSearchads360V23Services__AudienceCompositionMetrics {
  /**
   * The fraction (from 0 to 1 inclusive) of the specific audience that match
   * the attribute.
   */
  audienceShare?: number;
  /**
   * The fraction (from 0 to 1 inclusive) of the baseline audience that match
   * the attribute.
   */
  baselineAudienceShare?: number;
  /**
   * The ratio of audience_share to baseline_audience_share, or zero if this
   * ratio is undefined or is not meaningful.
   */
  index?: number;
  /**
   * A relevance score from 0 to 1 inclusive.
   */
  score?: number;
}

/**
 * A collection of related attributes of the same type in an audience
 * composition insights report.
 */
export interface GoogleAdsSearchads360V23Services__AudienceCompositionSection {
  /**
   * Additional attributes for this audience, grouped into clusters. Only
   * populated if dimension is YOUTUBE_CHANNEL.
   */
  clusteredAttributes?: GoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster[];
  /**
   * The type of the attributes in this section.
   */
  dimension?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST";
  /**
   * The most relevant segments for this audience. If dimension is GENDER,
   * AGE_RANGE or PARENTAL_STATUS, then this list of attributes is exhaustive.
   */
  topAttributes?: GoogleAdsSearchads360V23Services__AudienceCompositionAttribute[];
}

function serializeGoogleAdsSearchads360V23Services__AudienceCompositionSection(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionSection {
  return {
    ...data,
    clusteredAttributes: data["clusteredAttributes"] !== undefined ? data["clusteredAttributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster(item))) : undefined,
    topAttributes: data["topAttributes"] !== undefined ? data["topAttributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AudienceCompositionSection(data: any): GoogleAdsSearchads360V23Services__AudienceCompositionSection {
  return {
    ...data,
    clusteredAttributes: data["clusteredAttributes"] !== undefined ? data["clusteredAttributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceCompositionAttributeCluster(item))) : undefined,
    topAttributes: data["topAttributes"] !== undefined ? data["topAttributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceCompositionAttribute(item))) : undefined,
  };
}

/**
 * A collection of dimensions to be used for generating insights.
 */
export interface GoogleAdsSearchads360V23Services__AudienceInsightsDimensions {
  /**
   * Required. A list of dimensions.
   */
  dimensions?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST"[];
}

/**
 * A single operation (create, update) on an audience.
 */
export interface GoogleAdsSearchads360V23Services__AudienceOperation {
  /**
   * Create operation: No resource name is expected for the new audience
   */
  create?: GoogleAdsSearchads360V23Resources__Audience;
  /**
   * Update operation: The audience is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__Audience;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__AudienceOperation(data: any): GoogleAdsSearchads360V23Services__AudienceOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AudienceOperation(data: any): GoogleAdsSearchads360V23Services__AudienceOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * An audience attribute, with metadata including the overlap between this
 * attribute's potential YouTube reach and that of a primary attribute.
 */
export interface GoogleAdsSearchads360V23Services__AudienceOverlapItem {
  /**
   * The attribute and its metadata, including potential YouTube reach.
   */
  attributeMetadata?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata;
  /**
   * The estimated size of the intersection of this audience attribute with the
   * primary attribute, that is, the number of reachable YouTube users who match
   * BOTH the primary attribute and this one.
   */
  potentialYoutubeReachIntersection?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__AudienceOverlapItem(data: any): GoogleAdsSearchads360V23Services__AudienceOverlapItem {
  return {
    ...data,
    attributeMetadata: data["attributeMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["attributeMetadata"]) : undefined,
    potentialYoutubeReachIntersection: data["potentialYoutubeReachIntersection"] !== undefined ? String(data["potentialYoutubeReachIntersection"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__AudienceOverlapItem(data: any): GoogleAdsSearchads360V23Services__AudienceOverlapItem {
  return {
    ...data,
    attributeMetadata: data["attributeMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["attributeMetadata"]) : undefined,
    potentialYoutubeReachIntersection: data["potentialYoutubeReachIntersection"] !== undefined ? BigInt(data["potentialYoutubeReachIntersection"]) : undefined,
  };
}

/**
 * Audience targeting for reach forecast.
 */
export interface GoogleAdsSearchads360V23Services__AudienceTargeting {
  /**
   * List of audiences based on user interests to be targeted.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestInfo[];
  /**
   * List of audiences based on user lists to be targeted.
   */
  userLists?: GoogleAdsSearchads360V23Common__UserListInfo[];
}

/**
 * A single operation on a batch job.
 */
export interface GoogleAdsSearchads360V23Services__BatchJobOperation {
  /**
   * Create operation: No resource name is expected for the new batch job.
   */
  create?: GoogleAdsSearchads360V23Resources__BatchJob;
  /**
   * Remove operation: The batch job must not have been run. A resource name
   * for the removed batch job is expected, in this format:
   * `customers/{customer_id}/batchJobs/{batch_job_id}`
   */
  remove?: string;
}

/**
 * An individual batch job result.
 */
export interface GoogleAdsSearchads360V23Services__BatchJobResult {
  /**
   * Response for the mutate. May be empty if errors occurred.
   */
  mutateOperationResponse?: GoogleAdsSearchads360V23Services__MutateOperationResponse;
  /**
   * Index of the mutate operation.
   */
  operationIndex?: bigint;
  /**
   * Details of the errors when processing the operation.
   */
  status?: GoogleRpc__Status;
}

function serializeGoogleAdsSearchads360V23Services__BatchJobResult(data: any): GoogleAdsSearchads360V23Services__BatchJobResult {
  return {
    ...data,
    mutateOperationResponse: data["mutateOperationResponse"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateOperationResponse(data["mutateOperationResponse"]) : undefined,
    operationIndex: data["operationIndex"] !== undefined ? String(data["operationIndex"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BatchJobResult(data: any): GoogleAdsSearchads360V23Services__BatchJobResult {
  return {
    ...data,
    mutateOperationResponse: data["mutateOperationResponse"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateOperationResponse(data["mutateOperationResponse"]) : undefined,
    operationIndex: data["operationIndex"] !== undefined ? BigInt(data["operationIndex"]) : undefined,
  };
}

/**
 * A location that supports benchmarks data.
 */
export interface GoogleAdsSearchads360V23Services__BenchmarksLocation {
  /**
   * Information on the geographic location, including the location ID.
   */
  locationInfo?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * The unique location name in English.
   */
  locationName?: string;
  /**
   * The location's type. Location types correspond to target_type returned by
   * searching location type in GoogleAdsService.Search/SearchStream.
   */
  locationType?: string;
}

/**
 * The metadata associated with a product supported for benchmarks data.
 */
export interface GoogleAdsSearchads360V23Services__BenchmarksProductMetadata {
  /**
   * The marketing objective associated with the product. A marketing objective
   * is a broader classification of products.
   */
  marketingObjective?:  | "UNSPECIFIED" | "UNKNOWN" | "AWARENESS" | "CONSIDERATION" | "ACTION";
  /**
   * The identifier of the product. The identifier can be used as inputs for
   * BenchmarksService.GenerateBenchmarksMetrics.
   */
  productCode?: string;
  /**
   * The name of the product.
   */
  productName?: string;
}

/**
 * The source used to generate benchmarks metrics for. The ID of the source can
 * be obtained from BenchmarksService.ListBenchmarksSources.
 */
export interface GoogleAdsSearchads360V23Services__BenchmarksSource {
  /**
   * The ID of the Industry Vertical.
   */
  industryVerticalId?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__BenchmarksSource(data: any): GoogleAdsSearchads360V23Services__BenchmarksSource {
  return {
    ...data,
    industryVerticalId: data["industryVerticalId"] !== undefined ? String(data["industryVerticalId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BenchmarksSource(data: any): GoogleAdsSearchads360V23Services__BenchmarksSource {
  return {
    ...data,
    industryVerticalId: data["industryVerticalId"] !== undefined ? BigInt(data["industryVerticalId"]) : undefined,
  };
}

/**
 * The metadata associated with a benchmarks source.
 */
export interface GoogleAdsSearchads360V23Services__BenchmarksSourceMetadata {
  /**
   * The type of benchmarks source.
   */
  benchmarksSourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "INDUSTRY_VERTICAL";
  /**
   * Information on the Industry Vertical.
   */
  industryVerticalInfo?: GoogleAdsSearchads360V23Services__IndustryVerticalInfo;
}

function serializeGoogleAdsSearchads360V23Services__BenchmarksSourceMetadata(data: any): GoogleAdsSearchads360V23Services__BenchmarksSourceMetadata {
  return {
    ...data,
    industryVerticalInfo: data["industryVerticalInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Services__IndustryVerticalInfo(data["industryVerticalInfo"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BenchmarksSourceMetadata(data: any): GoogleAdsSearchads360V23Services__BenchmarksSourceMetadata {
  return {
    ...data,
    industryVerticalInfo: data["industryVerticalInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__IndustryVerticalInfo(data["industryVerticalInfo"]) : undefined,
  };
}

/**
 * A biddable keyword part of an ad group.
 */
export interface GoogleAdsSearchads360V23Services__BiddableKeyword {
  /**
   * Required. Keyword. Must have text and match type.
   */
  keyword?: GoogleAdsSearchads360V23Common__KeywordInfo;
  /**
   * A max cpc bid in micros that overrides the ad group level max cpc bid in
   * forecast simulation. This value will override the max cpc value set in the
   * bidding strategy and ad group. Only specify this field for bidding
   * strategies that support max cpc values.
   */
  maxCpcBidMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__BiddableKeyword(data: any): GoogleAdsSearchads360V23Services__BiddableKeyword {
  return {
    ...data,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? String(data["maxCpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BiddableKeyword(data: any): GoogleAdsSearchads360V23Services__BiddableKeyword {
  return {
    ...data,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? BigInt(data["maxCpcBidMicros"]) : undefined,
  };
}

/**
 * A single operation (create, remove, update) on a data exclusion.
 */
export interface GoogleAdsSearchads360V23Services__BiddingDataExclusionOperation {
  /**
   * Create operation: No resource name is expected for the new data exclusion.
   */
  create?: GoogleAdsSearchads360V23Resources__BiddingDataExclusion;
  /**
   * Remove operation: A resource name for the removed data exclusion is
   * expected, in this format:
   * `customers/{customer_id}/biddingDataExclusions/{data_exclusion_id}`
   */
  remove?: string;
  /**
   * Update operation: The data exclusion is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__BiddingDataExclusion;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(data: any): GoogleAdsSearchads360V23Services__BiddingDataExclusionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(data: any): GoogleAdsSearchads360V23Services__BiddingDataExclusionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove, update) on a seasonality adjustment.
 */
export interface GoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation {
  /**
   * Create operation: No resource name is expected for the new seasonality
   * adjustment.
   */
  create?: GoogleAdsSearchads360V23Resources__BiddingSeasonalityAdjustment;
  /**
   * Remove operation: A resource name for the removed seasonality adjustment
   * is expected, in this format:
   * `customers/{customer_id}/biddingSeasonalityAdjustments/{seasonality_adjustment_id}`
   */
  remove?: string;
  /**
   * Update operation: The seasonality adjustment is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__BiddingSeasonalityAdjustment;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(data: any): GoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(data: any): GoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a bidding strategy.
 */
export interface GoogleAdsSearchads360V23Services__BiddingStrategyOperation {
  /**
   * Create operation: No resource name is expected for the new bidding
   * strategy.
   */
  create?: GoogleAdsSearchads360V23Resources__BiddingStrategy;
  /**
   * Remove operation: A resource name for the removed bidding strategy is
   * expected, in this format:
   * `customers/{customer_id}/biddingStrategies/{bidding_strategy_id}`
   */
  remove?: string;
  /**
   * Update operation: The bidding strategy is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__BiddingStrategy;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(data: any): GoogleAdsSearchads360V23Services__BiddingStrategyOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(data: any): GoogleAdsSearchads360V23Services__BiddingStrategyOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation on a billing setup, which describes the cancellation of
 * an existing billing setup.
 */
export interface GoogleAdsSearchads360V23Services__BillingSetupOperation {
  /**
   * Creates a billing setup. No resource name is expected for the new billing
   * setup.
   */
  create?: GoogleAdsSearchads360V23Resources__BillingSetup;
  /**
   * Resource name of the billing setup to remove. A setup cannot be removed
   * unless it is in a pending state or its scheduled start time is in the
   * future. The resource name looks like
   * `customers/{customer_id}/billingSetups/{billing_id}`.
   */
  remove?: string;
}

/**
 * Assets linked at the campaign level. A business_name and at least one
 * logo_asset are required.
 */
export interface GoogleAdsSearchads360V23Services__BrandCampaignAssets {
  /**
   * Required. The resource name of the business name text asset.
   */
  businessNameAsset?: string;
  /**
   * Optional. The resource name of landscape logo assets.
   */
  landscapeLogoAsset?: string[];
  /**
   * Required. The resource name of square logo assets.
   */
  logoAsset?: string[];
}

/**
 * A single operation (create, remove) on a campaign asset.
 */
export interface GoogleAdsSearchads360V23Services__CampaignAssetOperation {
  /**
   * Create operation: No resource name is expected for the new campaign asset.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignAsset;
  /**
   * Remove operation: A resource name for the removed campaign asset is
   * expected, in this format:
   * `customers/{customer_id}/campaignAssets/{campaign_id}~{asset_id}~{field_type}`
   */
  remove?: string;
  /**
   * Update operation: The campaign asset is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignAsset;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(data: any): GoogleAdsSearchads360V23Services__CampaignAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(data: any): GoogleAdsSearchads360V23Services__CampaignAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a campaign asset set.
 */
export interface GoogleAdsSearchads360V23Services__CampaignAssetSetOperation {
  /**
   * Create operation: No resource name is expected for the new campaign asset
   * set.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignAssetSet;
  /**
   * Remove operation: A resource name for the removed campaign asset set is
   * expected, in this format:
   * `customers/{customer_id}/campaignAssetSets/{campaign_id}~{asset_set_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove, update) on a campaign bid modifier.
 */
export interface GoogleAdsSearchads360V23Services__CampaignBidModifierOperation {
  /**
   * Create operation: No resource name is expected for the new campaign bid
   * modifier.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignBidModifier;
  /**
   * Remove operation: A resource name for the removed campaign bid modifier is
   * expected, in this format:
   * `customers/{customer_id}/CampaignBidModifiers/{campaign_id}~{criterion_id}`
   */
  remove?: string;
  /**
   * Update operation: The campaign bid modifier is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignBidModifier;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(data: any): GoogleAdsSearchads360V23Services__CampaignBidModifierOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(data: any): GoogleAdsSearchads360V23Services__CampaignBidModifierOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * The mapping of experiment campaign and budget to be graduated.
 */
export interface GoogleAdsSearchads360V23Services__CampaignBudgetMapping {
  /**
   * Required. The budget that should be attached to the graduating experiment
   * campaign.
   */
  campaignBudget?: string;
  /**
   * Required. The experiment campaign to graduate.
   */
  experimentCampaign?: string;
}

/**
 * A single operation (create, update, remove) on a campaign budget.
 */
export interface GoogleAdsSearchads360V23Services__CampaignBudgetOperation {
  /**
   * Create operation: No resource name is expected for the new budget.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignBudget;
  /**
   * Remove operation: A resource name for the removed budget is expected, in
   * this format: `customers/{customer_id}/campaignBudgets/{budget_id}`
   */
  remove?: string;
  /**
   * Update operation: The campaign budget is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignBudget;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(data: any): GoogleAdsSearchads360V23Services__CampaignBudgetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(data: any): GoogleAdsSearchads360V23Services__CampaignBudgetOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (update) on a campaign conversion goal.
 */
export interface GoogleAdsSearchads360V23Services__CampaignConversionGoalOperation {
  /**
   * Update operation: The customer conversion goal is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignConversionGoal;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CampaignConversionGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CampaignConversionGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a campaign criterion.
 */
export interface GoogleAdsSearchads360V23Services__CampaignCriterionOperation {
  /**
   * Create operation: No resource name is expected for the new criterion.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignCriterion;
  /**
   * Remove operation: A resource name for the removed criterion is expected,
   * in this format:
   * `customers/{customer_id}/campaignCriteria/{campaign_id}~{criterion_id}`
   */
  remove?: string;
  /**
   * Update operation: The criterion is expected to have a valid resource name.
   * Note that for smart campaigns, you cannot use the update method to edit the
   * geolocation target.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignCriterion;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(data: any): GoogleAdsSearchads360V23Services__CampaignCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(data: any): GoogleAdsSearchads360V23Services__CampaignCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customizer attribute.
 */
export interface GoogleAdsSearchads360V23Services__CampaignCustomizerOperation {
  /**
   * Create operation: No resource name is expected for the new campaign
   * customizer
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignCustomizer;
  /**
   * Remove operation: A resource name for the removed campaign customizer is
   * expected, in this format:
   * `customers/{customer_id}/campaignCustomizers/{campaign_id}~{customizer_attribute_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, update, remove) on a campaign draft.
 */
export interface GoogleAdsSearchads360V23Services__CampaignDraftOperation {
  /**
   * Create operation: No resource name is expected for the new campaign draft.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignDraft;
  /**
   * Remove operation: The campaign draft is expected to have a valid resource
   * name, in this format:
   * `customers/{customer_id}/campaignDrafts/{base_campaign_id}~{draft_id}`
   */
  remove?: string;
  /**
   * Update operation: The campaign draft is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignDraft;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(data: any): GoogleAdsSearchads360V23Services__CampaignDraftOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(data: any): GoogleAdsSearchads360V23Services__CampaignDraftOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * The duration of a planned campaign.
 */
export interface GoogleAdsSearchads360V23Services__CampaignDuration {
  /**
   * Date range of the campaign. Dates are in the yyyy-mm-dd format and
   * inclusive. The end date must be < 1 year in the future and the date range
   * must be <= 92 days long. This field cannot be combined with the
   * duration_in_days field.
   */
  dateRange?: GoogleAdsSearchads360V23Common__DateRange;
  /**
   * The duration value in days. This field cannot be combined with the
   * date_range field.
   */
  durationInDays?: number;
}

/**
 * A single mutate operation on the campaign goal config.
 */
export interface GoogleAdsSearchads360V23Services__CampaignGoalConfigOperation {
  /**
   * Create a new campaign goal config.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignGoalConfig;
  /**
   * Remove an existing campaign goal config.
   */
  remove?: string;
  /**
   * Update an existing campaign goal config.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignGoalConfig;
  /**
   * FieldMask that determines which fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignGoalConfigOperation(data: any): GoogleAdsSearchads360V23Services__CampaignGoalConfigOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignGoalConfigOperation(data: any): GoogleAdsSearchads360V23Services__CampaignGoalConfigOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a campaign group.
 */
export interface GoogleAdsSearchads360V23Services__CampaignGroupOperation {
  /**
   * Create operation: No resource name is expected for the new campaign group.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignGroup;
  /**
   * Remove operation: A resource name for the removed campaign group is
   * expected, in this format:
   * `customers/{customer_id}/campaignGroups/{campaign_group_id}`
   */
  remove?: string;
  /**
   * Update operation: The campaign group is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignGroup;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(data: any): GoogleAdsSearchads360V23Services__CampaignGroupOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(data: any): GoogleAdsSearchads360V23Services__CampaignGroupOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a campaign-label relationship.
 */
export interface GoogleAdsSearchads360V23Services__CampaignLabelOperation {
  /**
   * Create operation: No resource name is expected for the new campaign-label
   * relationship.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignLabel;
  /**
   * Remove operation: A resource name for the campaign-label relationship
   * being removed, in this format:
   * `customers/{customer_id}/campaignLabels/{campaign_id}~{label_id}`
   */
  remove?: string;
}

/**
 * A single operation on a campaign lifecycle goal.
 */
export interface GoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation {
  create?: GoogleAdsSearchads360V23Resources__CampaignLifecycleGoal;
  /**
   * Update operation: Update an existing campaign lifecycle goal. The campaign
   * field should not be set for this operation.
   */
  update?: GoogleAdsSearchads360V23Resources__CampaignLifecycleGoal;
  /**
   * Optional. FieldMask that determines which resource fields are modified in
   * an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation(data: any): GoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation(data: any): GoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a campaign.
 */
export interface GoogleAdsSearchads360V23Services__CampaignOperation {
  /**
   * Create operation: No resource name is expected for the new campaign.
   */
  create?: GoogleAdsSearchads360V23Resources__Campaign;
  /**
   * Remove operation: A resource name for the removed campaign is expected, in
   * this format: `customers/{customer_id}/campaigns/{campaign_id}`
   */
  remove?: string;
  /**
   * Update operation: The campaign is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__Campaign;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CampaignOperation(data: any): GoogleAdsSearchads360V23Services__CampaignOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Campaign(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Campaign(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignOperation(data: any): GoogleAdsSearchads360V23Services__CampaignOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Campaign(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Campaign(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a campaign shared set.
 */
export interface GoogleAdsSearchads360V23Services__CampaignSharedSetOperation {
  /**
   * Create operation: No resource name is expected for the new campaign shared
   * set.
   */
  create?: GoogleAdsSearchads360V23Resources__CampaignSharedSet;
  /**
   * Remove operation: A resource name for the removed campaign shared set is
   * expected, in this format:
   * `customers/{customer_id}/campaignSharedSets/{campaign_id}~{shared_set_id}`
   */
  remove?: string;
}

/**
 * A campaign to do a keyword campaign forecast.
 */
export interface GoogleAdsSearchads360V23Services__CampaignToForecast {
  /**
   * The ad groups in the new campaign to forecast.
   */
  adGroups?: GoogleAdsSearchads360V23Services__ForecastAdGroup[];
  /**
   * Required. The bidding strategy for the campaign.
   */
  biddingStrategy?: GoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy;
  /**
   * The expected conversion rate (number of conversions divided by number of
   * total clicks) as defined by the user. This value is expressed as a decimal
   * value, so an expected conversion rate of 2% should be entered as 0.02. If
   * left empty, an estimated conversion rate will be used.
   */
  conversionRate?: number;
  /**
   * Locations to be targeted. Locations must be unique.
   */
  geoModifiers?: GoogleAdsSearchads360V23Services__CriterionBidModifier[];
  /**
   * Required. The network used for targeting.
   */
  keywordPlanNetwork?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_SEARCH" | "GOOGLE_SEARCH_AND_PARTNERS";
  /**
   * The list of resource names of languages to be targeted. The resource name
   * is of the format "languageConstants/{criterion_id}". See
   * https://developers.google.com/google-ads/api/data/codes-formats#languages
   * for the list of language criterion codes.
   */
  languageConstants?: string[];
  /**
   * The list of negative keywords to be used in the campaign when doing the
   * forecast.
   */
  negativeKeywords?: GoogleAdsSearchads360V23Common__KeywordInfo[];
}

function serializeGoogleAdsSearchads360V23Services__CampaignToForecast(data: any): GoogleAdsSearchads360V23Services__CampaignToForecast {
  return {
    ...data,
    adGroups: data["adGroups"] !== undefined ? data["adGroups"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ForecastAdGroup(item))) : undefined,
    biddingStrategy: data["biddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy(data["biddingStrategy"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CampaignToForecast(data: any): GoogleAdsSearchads360V23Services__CampaignToForecast {
  return {
    ...data,
    adGroups: data["adGroups"] !== undefined ? data["adGroups"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ForecastAdGroup(item))) : undefined,
    biddingStrategy: data["biddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy(data["biddingStrategy"]) : undefined,
  };
}

/**
 * Request message for
 * CampaignLifecycleGoalService.ConfigureCampaignLifecycleGoals.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest {
  /**
   * Required. The operation to perform campaign lifecycle goal update.
   */
  operation?: GoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation;
  /**
   * Optional. If true, the request is validated but not executed. Only errors
   * are returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest(data: any): GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest(data: any): GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignLifecycleGoalOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for
 * CampaignLifecycleGoalService.ConfigureCampaignLifecycleGoals.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsResponse {
  /**
   * Result for the campaign lifecycle goal configuration.
   */
  result?: GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsResult;
}

/**
 * The result for the campaign lifecycle goal configuration.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCampaignLifecycleGoalsResult {
  /**
   * Returned for the successful operation.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CustomerLifecycleGoalService.ConfigureCustomerLifecycleGoals.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest {
  /**
   * Required. The operation to perform customer lifecycle goal update.
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation;
  /**
   * Optional. If true, the request is validated but not executed. Only errors
   * are returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest(data: any): GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest(data: any): GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for
 * CustomerLifecycleGoalService.ConfigureCustomerLifecycleGoals.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsResponse {
  /**
   * result for the customer lifecycle goal configuration.
   */
  result?: GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsResult;
}

/**
 * The result for the customer lifecycle goal configuration.
 */
export interface GoogleAdsSearchads360V23Services__ConfigureCustomerLifecycleGoalsResult {
  /**
   * Returned for the successful operation.
   */
  resourceName?: string;
}

/**
 * Details of the conversation that needs to be appended.
 */
export interface GoogleAdsSearchads360V23Services__Conversation {
  /**
   * Required. The resource name of the local services lead that the
   * conversation should be applied to.
   */
  localServicesLead?: string;
  /**
   * Required. Text message that user wanted to append to lead.
   */
  text?: string;
}

/**
 * Result of the append conversation operation.
 */
export interface GoogleAdsSearchads360V23Services__ConversationOrError {
  /**
   * The resource name of the appended local services lead conversation.
   */
  localServicesLeadConversation?: string;
  /**
   * Failure status when the request could not be processed.
   */
  partialFailureError?: GoogleRpc__Status;
}

/**
 * A single operation (create, update, remove) on a conversion action.
 */
export interface GoogleAdsSearchads360V23Services__ConversionActionOperation {
  /**
   * Create operation: No resource name is expected for the new conversion
   * action.
   */
  create?: GoogleAdsSearchads360V23Resources__ConversionAction;
  /**
   * Remove operation: A resource name for the removed conversion action is
   * expected, in this format:
   * `customers/{customer_id}/conversionActions/{conversion_action_id}`
   */
  remove?: string;
  /**
   * Update operation: The conversion action is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__ConversionAction;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ConversionActionOperation(data: any): GoogleAdsSearchads360V23Services__ConversionActionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ConversionAction(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ConversionAction(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionActionOperation(data: any): GoogleAdsSearchads360V23Services__ConversionActionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ConversionAction(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ConversionAction(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Message for conversion custom dimension header.
 */
export interface GoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader {
  /**
   * The conversion custom dimension ID.
   */
  id?: bigint;
  /**
   * The user defined name of the conversion custom dimension.
   */
  name?: string;
}

function serializeGoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader(data: any): GoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader(data: any): GoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * Message for conversion custom metric header.
 */
export interface GoogleAdsSearchads360V23Services__ConversionCustomMetricHeader {
  /**
   * The conversion custom metric ID.
   */
  id?: bigint;
  /**
   * The user defined name of the conversion custom metric.
   */
  name?: string;
}

function serializeGoogleAdsSearchads360V23Services__ConversionCustomMetricHeader(data: any): GoogleAdsSearchads360V23Services__ConversionCustomMetricHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionCustomMetricHeader(data: any): GoogleAdsSearchads360V23Services__ConversionCustomMetricHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A single operation (create, update) on a conversion custom variable.
 */
export interface GoogleAdsSearchads360V23Services__ConversionCustomVariableOperation {
  /**
   * Create operation: No resource name is expected for the new conversion
   * custom variable.
   */
  create?: GoogleAdsSearchads360V23Resources__ConversionCustomVariable;
  /**
   * Update operation: The conversion custom variable is expected to have a
   * valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__ConversionCustomVariable;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(data: any): GoogleAdsSearchads360V23Services__ConversionCustomVariableOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(data: any): GoogleAdsSearchads360V23Services__ConversionCustomVariableOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (update) on a conversion goal campaign config.
 */
export interface GoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation {
  /**
   * Update operation: The conversion goal campaign config is expected to have
   * a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__ConversionGoalCampaignConfig;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(data: any): GoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(data: any): GoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A conversion rate suggestion.
 */
export interface GoogleAdsSearchads360V23Services__ConversionRateSuggestion {
  /**
   * The suggested conversion rate. The value is between 0 and 1 (exclusive).
   */
  conversionRate?: number;
  /**
   * Model type used to calculate the suggested conversion rate.
   */
  conversionRateModel?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER_HISTORY" | "INVENTORY_AGGRESSIVE" | "INVENTORY_CONSERVATIVE" | "INVENTORY_MEDIAN";
  /**
   * The code associated with the plannable product (for example: DEMAND_GEN).
   * To list all plannable product codes, use
   * ReachPlanService.ListPlannableProducts.
   */
  plannableProductCode?: string;
  /**
   * The surfaces associated with the plannable product. If not present, the
   * conversion rate is considered surface agnostic for this product.
   */
  surfaceTargeting?: GoogleAdsSearchads360V23Services__SurfaceTargeting;
}

/**
 * A single operation (create, update, remove) on a conversion value rule.
 */
export interface GoogleAdsSearchads360V23Services__ConversionValueRuleOperation {
  /**
   * Create operation: No resource name is expected for the new conversion
   * value rule.
   */
  create?: GoogleAdsSearchads360V23Resources__ConversionValueRule;
  /**
   * Remove operation: A resource name for the removed conversion value rule is
   * expected, in this format:
   * `customers/{customer_id}/conversionValueRules/{conversion_value_rule_id}`
   */
  remove?: string;
  /**
   * Update operation: The conversion value rule is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__ConversionValueRule;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(data: any): GoogleAdsSearchads360V23Services__ConversionValueRuleOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(data: any): GoogleAdsSearchads360V23Services__ConversionValueRuleOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a conversion value rule set.
 */
export interface GoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation {
  /**
   * Create operation: No resource name is expected for the new conversion
   * value rule set.
   */
  create?: GoogleAdsSearchads360V23Resources__ConversionValueRuleSet;
  /**
   * Remove operation: A resource name for the removed conversion value rule
   * set is expected, in this format:
   * `customers/{customer_id}/conversionValueRuleSets/{conversion_value_rule_set_id}`
   */
  remove?: string;
  /**
   * Update operation: The conversion value rule set is expected to have a
   * valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__ConversionValueRuleSet;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(data: any): GoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(data: any): GoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Request message for AccountLinkService.CreateAccountLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateAccountLinkRequest {
  /**
   * Required. The account link to be created.
   */
  accountLink?: GoogleAdsSearchads360V23Resources__AccountLink;
}

function serializeGoogleAdsSearchads360V23Services__CreateAccountLinkRequest(data: any): GoogleAdsSearchads360V23Services__CreateAccountLinkRequest {
  return {
    ...data,
    accountLink: data["accountLink"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AccountLink(data["accountLink"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CreateAccountLinkRequest(data: any): GoogleAdsSearchads360V23Services__CreateAccountLinkRequest {
  return {
    ...data,
    accountLink: data["accountLink"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AccountLink(data["accountLink"]) : undefined,
  };
}

/**
 * Response message for AccountLinkService.CreateAccountLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateAccountLinkResponse {
  /**
   * Returned for successful operations. Resource name of the account link.
   */
  resourceName?: string;
}

/**
 * Request message for CustomerService.CreateCustomerClient.
 */
export interface GoogleAdsSearchads360V23Services__CreateCustomerClientRequest {
  /**
   * The proposed role of user on the created client customer. Accessible only
   * to customers on the allow-list.
   */
  accessRole?:  | "UNSPECIFIED" | "UNKNOWN" | "ADMIN" | "STANDARD" | "READ_ONLY" | "EMAIL_ONLY";
  /**
   * Required. The new client customer to create. The resource name on this
   * customer will be ignored.
   */
  customerClient?: GoogleAdsSearchads360V23Resources__Customer;
  /**
   * Email address of the user who should be invited on the created client
   * customer. Accessible only to customers on the allow-list.
   */
  emailAddress?: string;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for CreateCustomerClient mutate.
 */
export interface GoogleAdsSearchads360V23Services__CreateCustomerClientResponse {
  /**
   * Link for inviting user to access the created customer. Accessible to
   * allowlisted customers only.
   */
  invitationLink?: string;
  /**
   * The resource name of the newly created customer. Customer resource names
   * have the form: `customers/{customer_id}`.
   */
  resourceName?: string;
}

/**
 * Request message for DataLinkService.CreateDataLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateDataLinkRequest {
  /**
   * Required. The data link to be created.
   */
  dataLink?: GoogleAdsSearchads360V23Resources__DataLink;
}

/**
 * Response message for DataLinkService.CreateDataLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateDataLinkResponse {
  /**
   * Returned for successful operations. Resource name of the data link.
   */
  resourceName?: string;
}

/**
 * Request message for OfflineUserDataJobService.CreateOfflineUserDataJob.
 */
export interface GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest {
  /**
   * If true, match rate range for the offline user data job is calculated and
   * made available in the resource.
   */
  enableMatchRateRangePreview?: boolean;
  /**
   * Required. The offline user data job to be created.
   */
  job?: GoogleAdsSearchads360V23Resources__OfflineUserDataJob;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest(data: any): GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest {
  return {
    ...data,
    job: data["job"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data["job"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest(data: any): GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobRequest {
  return {
    ...data,
    job: data["job"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data["job"]) : undefined,
  };
}

/**
 * Response message for OfflineUserDataJobService.CreateOfflineUserDataJob.
 */
export interface GoogleAdsSearchads360V23Services__CreateOfflineUserDataJobResponse {
  /**
   * The resource name of the OfflineUserDataJob.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ProductLinkInvitationService.CreateProductLinkInvitation.
 */
export interface GoogleAdsSearchads360V23Services__CreateProductLinkInvitationRequest {
  /**
   * Required. The product link invitation to be created.
   */
  productLinkInvitation?: GoogleAdsSearchads360V23Resources__ProductLinkInvitation;
}

/**
 * Response message for product link invitation create.
 */
export interface GoogleAdsSearchads360V23Services__CreateProductLinkInvitationResponse {
  /**
   * Resource name of the product link invitation.
   */
  resourceName?: string;
}

/**
 * Request message for ProductLinkService.CreateProductLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateProductLinkRequest {
  /**
   * Required. The product link to be created.
   */
  productLink?: GoogleAdsSearchads360V23Resources__ProductLink;
}

function serializeGoogleAdsSearchads360V23Services__CreateProductLinkRequest(data: any): GoogleAdsSearchads360V23Services__CreateProductLinkRequest {
  return {
    ...data,
    productLink: data["productLink"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ProductLink(data["productLink"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CreateProductLinkRequest(data: any): GoogleAdsSearchads360V23Services__CreateProductLinkRequest {
  return {
    ...data,
    productLink: data["productLink"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ProductLink(data["productLink"]) : undefined,
  };
}

/**
 * Response message for ProductLinkService.CreateProductLink.
 */
export interface GoogleAdsSearchads360V23Services__CreateProductLinkResponse {
  /**
   * Returned for successful operations. Resource name of the product link.
   */
  resourceName?: string;
}

/**
 * Location Criterion bid modifier.
 */
export interface GoogleAdsSearchads360V23Services__CriterionBidModifier {
  /**
   * The associated multiplier for the criterion_id. If set, this value cannot
   * be 0.
   */
  bidModifier?: number;
  /**
   * The resource name of the geo location to target. The resource name is of
   * the format "geoTargetConstants/{criterion_id}".
   */
  geoTargetConstant?: string;
}

/**
 * A single operation (create, update) on a custom audience.
 */
export interface GoogleAdsSearchads360V23Services__CustomAudienceOperation {
  /**
   * Create operation: No resource name is expected for the new custom
   * audience.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomAudience;
  /**
   * Remove operation: A resource name for the removed custom audience is
   * expected, in this format:
   * `customers/{customer_id}/customAudiences/{custom_audience_id}`
   */
  remove?: string;
  /**
   * Update operation: The custom audience is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomAudience;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomAudienceOperation(data: any): GoogleAdsSearchads360V23Services__CustomAudienceOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomAudience(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomAudience(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomAudienceOperation(data: any): GoogleAdsSearchads360V23Services__CustomAudienceOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomAudience(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomAudience(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Message for custom column header.
 */
export interface GoogleAdsSearchads360V23Services__CustomColumnHeader {
  /**
   * The custom column ID.
   */
  id?: bigint;
  /**
   * The user defined name of the custom column.
   */
  name?: string;
  /**
   * True when the custom column references metrics.
   */
  referencesMetrics?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__CustomColumnHeader(data: any): GoogleAdsSearchads360V23Services__CustomColumnHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomColumnHeader(data: any): GoogleAdsSearchads360V23Services__CustomColumnHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * A single operation (create, remove) on a custom conversion goal.
 */
export interface GoogleAdsSearchads360V23Services__CustomConversionGoalOperation {
  /**
   * Create operation: No resource name is expected for the new custom
   * conversion goal
   */
  create?: GoogleAdsSearchads360V23Resources__CustomConversionGoal;
  /**
   * Remove operation: A resource name for the removed custom conversion goal
   * is expected, in this format:
   * 'customers/{customer_id}/customConversionGoals/{goal_id}'
   */
  remove?: string;
  /**
   * Update operation: The custom conversion goal is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomConversionGoal;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomConversionGoalOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomConversionGoalOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a customer asset.
 */
export interface GoogleAdsSearchads360V23Services__CustomerAssetOperation {
  /**
   * Create operation: No resource name is expected for the new customer asset.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerAsset;
  /**
   * Remove operation: A resource name for the removed customer asset is
   * expected, in this format:
   * `customers/{customer_id}/customerAssets/{asset_id}~{field_type}`
   */
  remove?: string;
  /**
   * Update operation: The customer asset is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerAsset;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(data: any): GoogleAdsSearchads360V23Services__CustomerAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(data: any): GoogleAdsSearchads360V23Services__CustomerAssetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customer asset set.
 */
export interface GoogleAdsSearchads360V23Services__CustomerAssetSetOperation {
  /**
   * Create operation: No resource name is expected for the new customer asset
   * set.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerAssetSet;
  /**
   * Remove operation: A resource name for the removed customer asset set is
   * expected, in this format:
   * `customers/{customer_id}/customerAssetSets/{asset_set_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, update) on a CustomerClientLink.
 */
export interface GoogleAdsSearchads360V23Services__CustomerClientLinkOperation {
  /**
   * Create operation: No resource name is expected for the new link.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerClientLink;
  /**
   * Update operation: The link is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerClientLink;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerClientLinkOperation(data: any): GoogleAdsSearchads360V23Services__CustomerClientLinkOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerClientLinkOperation(data: any): GoogleAdsSearchads360V23Services__CustomerClientLinkOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (update) on a customer conversion goal.
 */
export interface GoogleAdsSearchads360V23Services__CustomerConversionGoalOperation {
  /**
   * Update operation: The customer conversion goal is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerConversionGoal;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomerConversionGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomerConversionGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customizer attribute.
 */
export interface GoogleAdsSearchads360V23Services__CustomerCustomizerOperation {
  /**
   * Create operation: No resource name is expected for the new customer
   * customizer
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerCustomizer;
  /**
   * Remove operation: A resource name for the removed customer customizer is
   * expected, in this format:
   * `customers/{customer_id}/customerCustomizers/{customizer_attribute_id}`
   */
  remove?: string;
}

/**
 * A single operation (create, remove) on a customer-label relationship.
 */
export interface GoogleAdsSearchads360V23Services__CustomerLabelOperation {
  /**
   * Create operation: No resource name is expected for the new customer-label
   * relationship.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerLabel;
  /**
   * Remove operation: A resource name for the customer-label relationship
   * being removed, in this format:
   * `customers/{customer_id}/customerLabels/{label_id}`
   */
  remove?: string;
}

/**
 * A single operation on a customer lifecycle goal.
 */
export interface GoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation {
  create?: GoogleAdsSearchads360V23Resources__CustomerLifecycleGoal;
  /**
   * Update operation: Update an existing customer lifecycle goal.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerLifecycleGoal;
  /**
   * Optional. FieldMask that determines which resource fields are modified in
   * an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation(data: any): GoogleAdsSearchads360V23Services__CustomerLifecycleGoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Updates the status of a CustomerManagerLink. The following actions are
 * possible: 1. Update operation with status ACTIVE accepts a pending
 * invitation. 2. Update operation with status REFUSED declines a pending
 * invitation. 3. Update operation with status INACTIVE terminates link to
 * manager.
 */
export interface GoogleAdsSearchads360V23Services__CustomerManagerLinkOperation {
  /**
   * Update operation: The link is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerManagerLink;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerManagerLinkOperation(data: any): GoogleAdsSearchads360V23Services__CustomerManagerLinkOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerManagerLinkOperation(data: any): GoogleAdsSearchads360V23Services__CustomerManagerLinkOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create or remove) on a customer level negative
 * criterion.
 */
export interface GoogleAdsSearchads360V23Services__CustomerNegativeCriterionOperation {
  /**
   * Create operation: No resource name is expected for the new criterion.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerNegativeCriterion;
  /**
   * Remove operation: A resource name for the removed criterion is expected,
   * in this format:
   * `customers/{customer_id}/customerNegativeCriteria/{criterion_id}`
   */
  remove?: string;
}

/**
 * A single update on a customer.
 */
export interface GoogleAdsSearchads360V23Services__CustomerOperation {
  /**
   * Mutate operation. Only updates are supported for customer.
   */
  update?: GoogleAdsSearchads360V23Resources__Customer;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerOperation(data: any): GoogleAdsSearchads360V23Services__CustomerOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerOperation(data: any): GoogleAdsSearchads360V23Services__CustomerOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single update operation for a CustomerSkAdNetworkConversionValueSchema.
 */
export interface GoogleAdsSearchads360V23Services__CustomerSkAdNetworkConversionValueSchemaOperation {
  /**
   * Update operation: The schema is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerSkAdNetworkConversionValueSchema;
}

/**
 * A single operation (create or remove) on customer user access invitation.
 */
export interface GoogleAdsSearchads360V23Services__CustomerUserAccessInvitationOperation {
  /**
   * Create operation: No resource name is expected for the new access
   * invitation.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomerUserAccessInvitation;
  /**
   * Remove operation: A resource name for the revoke invitation is expected,
   * in this format:
   * `customers/{customer_id}/customerUserAccessInvitations/{invitation_id}`
   */
  remove?: string;
}

/**
 * A single operation (update, remove) on customer user access.
 */
export interface GoogleAdsSearchads360V23Services__CustomerUserAccessOperation {
  /**
   * Remove operation: A resource name for the removed access is expected, in
   * this format:
   * `customers/{customer_id}/customerUserAccesses/{CustomerUserAccess.user_id}`
   */
  remove?: string;
  /**
   * Update operation: The customer user access is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomerUserAccess;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomerUserAccessOperation(data: any): GoogleAdsSearchads360V23Services__CustomerUserAccessOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomerUserAccessOperation(data: any): GoogleAdsSearchads360V23Services__CustomerUserAccessOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update) on a custom interest.
 */
export interface GoogleAdsSearchads360V23Services__CustomInterestOperation {
  /**
   * Create operation: No resource name is expected for the new custom
   * interest.
   */
  create?: GoogleAdsSearchads360V23Resources__CustomInterest;
  /**
   * Update operation: The custom interest is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__CustomInterest;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomInterestOperation(data: any): GoogleAdsSearchads360V23Services__CustomInterestOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomInterestOperation(data: any): GoogleAdsSearchads360V23Services__CustomInterestOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, remove) on a customizer attribute.
 */
export interface GoogleAdsSearchads360V23Services__CustomizerAttributeOperation {
  /**
   * Create operation: No resource name is expected for the new customizer
   * attribute
   */
  create?: GoogleAdsSearchads360V23Resources__CustomizerAttribute;
  /**
   * Remove operation: A resource name for the removed customizer attribute is
   * expected, in this format:
   * `customers/{customer_id}/customizerAttributes/{customizer_attribute_id}`
   */
  remove?: string;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(data: any): GoogleAdsSearchads360V23Services__CustomizerAttributeOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(data: any): GoogleAdsSearchads360V23Services__CustomizerAttributeOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * An incentive offer in the Choose-Your-Own Incentive feature where a user can
 * select from a set of incentives with different money amounts.
 */
export interface GoogleAdsSearchads360V23Services__CyoIncentives {
  /**
   * Required. The CYO incentive with high target and award amounts.
   */
  highOffer?: GoogleAdsSearchads360V23Services__Incentive;
  /**
   * Required. The CYO incentive with low target and award amounts.
   */
  lowOffer?: GoogleAdsSearchads360V23Services__Incentive;
  /**
   * Required. The CYO incentive with medium target and award amounts.
   */
  mediumOffer?: GoogleAdsSearchads360V23Services__Incentive;
}

function serializeGoogleAdsSearchads360V23Services__CyoIncentives(data: any): GoogleAdsSearchads360V23Services__CyoIncentives {
  return {
    ...data,
    highOffer: data["highOffer"] !== undefined ? serializeGoogleAdsSearchads360V23Services__Incentive(data["highOffer"]) : undefined,
    lowOffer: data["lowOffer"] !== undefined ? serializeGoogleAdsSearchads360V23Services__Incentive(data["lowOffer"]) : undefined,
    mediumOffer: data["mediumOffer"] !== undefined ? serializeGoogleAdsSearchads360V23Services__Incentive(data["mediumOffer"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__CyoIncentives(data: any): GoogleAdsSearchads360V23Services__CyoIncentives {
  return {
    ...data,
    highOffer: data["highOffer"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__Incentive(data["highOffer"]) : undefined,
    lowOffer: data["lowOffer"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__Incentive(data["lowOffer"]) : undefined,
    mediumOffer: data["mediumOffer"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__Incentive(data["mediumOffer"]) : undefined,
  };
}

/**
 * A list of audience attributes of a single dimension, including their overlap
 * with a primary attribute, returned as part of a
 * GenerateAudienceOverlapInsightsResponse.
 */
export interface GoogleAdsSearchads360V23Services__DimensionOverlapResult {
  /**
   * The dimension of all the attributes in this section.
   */
  dimension?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST";
  /**
   * The attributes and their overlap with the primary attribute.
   */
  items?: GoogleAdsSearchads360V23Services__AudienceOverlapItem[];
}

function serializeGoogleAdsSearchads360V23Services__DimensionOverlapResult(data: any): GoogleAdsSearchads360V23Services__DimensionOverlapResult {
  return {
    ...data,
    items: data["items"] !== undefined ? data["items"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceOverlapItem(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__DimensionOverlapResult(data: any): GoogleAdsSearchads360V23Services__DimensionOverlapResult {
  return {
    ...data,
    items: data["items"] !== undefined ? data["items"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceOverlapItem(item))) : undefined,
  };
}

/**
 * Request message for RecommendationService.DismissRecommendation.
 */
export interface GoogleAdsSearchads360V23Services__DismissRecommendationRequest {
  /**
   * Required. The list of operations to dismiss recommendations. If
   * partial_failure=false all recommendations should be of the same type There
   * is a limit of 100 operations per request.
   */
  operations?: GoogleAdsSearchads360V23Services_DismissRecommendationRequest_DismissRecommendationOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, operations will be carried in a single
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
}

/**
 * Response message for RecommendationService.DismissRecommendation.
 */
export interface GoogleAdsSearchads360V23Services__DismissRecommendationResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors) we return the RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * Results of operations to dismiss recommendations.
   */
  results?: GoogleAdsSearchads360V23Services_DismissRecommendationResponse_DismissRecommendationResult[];
}

/**
 * A breakdown of the number of unique people reached at a given effective
 * frequency.
 */
export interface GoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown {
  /**
   * The number of users (including co-viewing users) reached for the
   * associated effective_frequency value.
   */
  effectiveCoviewReach?: bigint;
  /**
   * The effective frequency [1-10].
   */
  effectiveFrequency?: number;
  /**
   * The number of users (including co-viewing users) reached for the
   * associated effective_frequency value within the specified plan demographic.
   */
  onTargetEffectiveCoviewReach?: bigint;
  /**
   * The number of unique people reached at least effective_frequency times
   * that exactly matches the Targeting. Note that a minimum number of unique
   * people must be reached in order for data to be reported. If the minimum
   * number is not met, the on_target_reach value will be rounded to 0.
   */
  onTargetReach?: bigint;
  /**
   * Total number of unique people reached at least effective_frequency times.
   * This includes people that may fall outside the specified Targeting. Note
   * that a minimum number of unique people must be reached in order for data to
   * be reported. If the minimum number is not met, the total_reach value will
   * be rounded to 0.
   */
  totalReach?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown(data: any): GoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown {
  return {
    ...data,
    effectiveCoviewReach: data["effectiveCoviewReach"] !== undefined ? String(data["effectiveCoviewReach"]) : undefined,
    onTargetEffectiveCoviewReach: data["onTargetEffectiveCoviewReach"] !== undefined ? String(data["onTargetEffectiveCoviewReach"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? String(data["onTargetReach"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? String(data["totalReach"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown(data: any): GoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown {
  return {
    ...data,
    effectiveCoviewReach: data["effectiveCoviewReach"] !== undefined ? BigInt(data["effectiveCoviewReach"]) : undefined,
    onTargetEffectiveCoviewReach: data["onTargetEffectiveCoviewReach"] !== undefined ? BigInt(data["onTargetEffectiveCoviewReach"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? BigInt(data["onTargetReach"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? BigInt(data["totalReach"]) : undefined,
  };
}

/**
 * Effective frequency limit.
 */
export interface GoogleAdsSearchads360V23Services__EffectiveFrequencyLimit {
  /**
   * The highest effective frequency value to include in
   * Forecast.effective_frequency_breakdowns. This field supports frequencies
   * 1-10, inclusive.
   */
  effectiveFrequencyBreakdownLimit?: number;
}

/**
 * A single enablement result of a campaign.
 */
export interface GoogleAdsSearchads360V23Services__EnablementResult {
  /**
   * This indicates the campaign for which enablement was tried, regardless of
   * the outcome.
   */
  campaign?: string;
  /**
   * Details of the error when enablement fails.
   */
  enablementError?: GoogleRpc__Status;
}

/**
 * A single enable operation of a campaign.
 */
export interface GoogleAdsSearchads360V23Services__EnableOperation {
  /**
   * Optional. Hex code representation of the accent brand color, for example
   * #00ff00. accent_color is required when main_color is specified.
   */
  accentColor?: string;
  /**
   * Required. The switch to automatically populate top-performing brand
   * assets. This field is required. If true, top-performing brand assets will
   * be automatically populated. If false, the brand_assets field is required.
   */
  autoPopulateBrandAssets?: boolean;
  /**
   * Optional. The brand assets linked to the campaign. This field is required
   * when the value of auto_populate_brand_assets is false.
   */
  brandAssets?: GoogleAdsSearchads360V23Services__BrandCampaignAssets;
  /**
   * Required. The resource name of the campaign to enable.
   */
  campaign?: string;
  /**
   * Optional. The domain of the final uri.
   */
  finalUriDomain?: string;
  /**
   * Optional. The font family is specified as a string, and must be one of the
   * following: "Open Sans", "Roboto", "Roboto Slab", "Montserrat", "Poppins",
   * "Lato", "Oswald", or "Playfair Display".
   */
  fontFamily?: string;
  /**
   * Optional. Hex code representation of the main brand color, for example
   * #00ff00. main_color is required when accent color is specified.
   */
  mainColor?: string;
}

/**
 * Request to enable Brand Guidelines for a Performance Max campaign.
 */
export interface GoogleAdsSearchads360V23Services__EnablePMaxBrandGuidelinesRequest {
  /**
   * Required. The list of individual campaign operations. A maximum of 10
   * enable operations can be executed in a request.
   */
  operations?: GoogleAdsSearchads360V23Services__EnableOperation[];
}

/**
 * Brand Guidelines campaign enablement response.
 */
export interface GoogleAdsSearchads360V23Services__EnablePMaxBrandGuidelinesResponse {
  /**
   * Campaign enablement results per campaign.
   */
  results?: GoogleAdsSearchads360V23Services__EnablementResult[];
}

/**
 * Request message for ExperimentService.EndExperiment.
 */
export interface GoogleAdsSearchads360V23Services__EndExperimentRequest {
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * A single operation on an experiment arm.
 */
export interface GoogleAdsSearchads360V23Services__ExperimentArmOperation {
  /**
   * Create operation
   */
  create?: GoogleAdsSearchads360V23Resources__ExperimentArm;
  /**
   * Remove operation: The experiment arm is expected to have a valid resource
   * name, in this format:
   * `customers/{customer_id}/experiments/{campaign_experiment_id}`
   */
  remove?: string;
  /**
   * Update operation: The experiment arm is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__ExperimentArm;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(data: any): GoogleAdsSearchads360V23Services__ExperimentArmOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(data: any): GoogleAdsSearchads360V23Services__ExperimentArmOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation on an experiment.
 */
export interface GoogleAdsSearchads360V23Services__ExperimentOperation {
  /**
   * Create operation
   */
  create?: GoogleAdsSearchads360V23Resources__Experiment;
  /**
   * Remove operation: The experiment is expected to have a valid resource
   * name, in this format:
   * `customers/{customer_id}/experiments/{campaign_experiment_id}`
   */
  remove?: string;
  /**
   * Update operation: The experiment is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__Experiment;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__ExperimentOperation(data: any): GoogleAdsSearchads360V23Services__ExperimentOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ExperimentOperation(data: any): GoogleAdsSearchads360V23Services__ExperimentOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Response from getting the acquisition incentive for a user when they visit a
 * specific marketing page.
 */
export interface GoogleAdsSearchads360V23Services__FetchIncentiveResponse {
  /**
   * Required. The acquisition incentive offer for the user.
   */
  incentiveOffer?: GoogleAdsSearchads360V23Services__IncentiveOffer;
}

function serializeGoogleAdsSearchads360V23Services__FetchIncentiveResponse(data: any): GoogleAdsSearchads360V23Services__FetchIncentiveResponse {
  return {
    ...data,
    incentiveOffer: data["incentiveOffer"] !== undefined ? serializeGoogleAdsSearchads360V23Services__IncentiveOffer(data["incentiveOffer"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__FetchIncentiveResponse(data: any): GoogleAdsSearchads360V23Services__FetchIncentiveResponse {
  return {
    ...data,
    incentiveOffer: data["incentiveOffer"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__IncentiveOffer(data["incentiveOffer"]) : undefined,
  };
}

/**
 * Forecasted traffic metrics for the planned products and targeting.
 */
export interface GoogleAdsSearchads360V23Services__Forecast {
  /**
   * The number of conversions. This metric is only available for DEMAND_GEN
   * plannable products. See
   * https://support.google.com/google-ads/answer/2375431 for more information
   * on conversions.
   */
  conversions?: number;
  /**
   * A list of effective frequency forecasts. The list is ordered starting with
   * 1+ and ending with the value set in
   * GenerateReachForecastRequest.effective_frequency_limit. If no
   * effective_frequency_limit was set, this list will be empty.
   */
  effectiveFrequencyBreakdowns?: GoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown[];
  /**
   * Number of ad impressions that exactly matches the Targeting including
   * co-viewers.
   */
  onTargetCoviewImpressions?: bigint;
  /**
   * Number of unique people reached that exactly matches the Targeting
   * including co-viewers.
   */
  onTargetCoviewReach?: bigint;
  /**
   * Number of ad impressions that exactly matches the Targeting.
   */
  onTargetImpressions?: bigint;
  /**
   * Number of unique people reached at least
   * GenerateReachForecastRequest.min_effective_frequency or
   * GenerateReachForecastRequest.effective_frequency_limit times that exactly
   * matches the Targeting. Note that a minimum number of unique people must be
   * reached in order for data to be reported. If the minimum number is not met,
   * the on_target_reach value will be rounded to 0.
   */
  onTargetReach?: bigint;
  /**
   * Total number of ad impressions including co-viewers. This includes
   * impressions that may fall outside the specified Targeting, due to
   * insufficient information on signed-in users.
   */
  totalCoviewImpressions?: bigint;
  /**
   * Number of unique people reached including co-viewers. This includes people
   * that may fall outside the specified Targeting.
   */
  totalCoviewReach?: bigint;
  /**
   * Total number of ad impressions. This includes impressions that may fall
   * outside the specified Targeting, due to insufficient information on
   * signed-in users.
   */
  totalImpressions?: bigint;
  /**
   * Total number of unique people reached at least
   * GenerateReachForecastRequest.min_effective_frequency or
   * GenerateReachForecastRequest.effective_frequency_limit times. This includes
   * people that may fall outside the specified Targeting. Note that a minimum
   * number of unique people must be reached in order for data to be reported.
   * If the minimum number is not met, the total_reach value will be rounded to
   * 0.
   */
  totalReach?: bigint;
  /**
   * Number of ad views forecasted for the specified product and targeting. A
   * TrueView View is counted when a viewer views a larger portion or the
   * entirety of an ad beyond an impression. See
   * https://support.google.com/google-ads/answer/2375431 for more information
   * on TrueView Views.
   */
  trueviewViews?: bigint;
  /**
   * Number of times the ad's impressions were considered viewable. See
   * https://support.google.com/google-ads/answer/7029393 for more information
   * about what makes an ad viewable and how viewability is measured.
   */
  viewableImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__Forecast(data: any): GoogleAdsSearchads360V23Services__Forecast {
  return {
    ...data,
    effectiveFrequencyBreakdowns: data["effectiveFrequencyBreakdowns"] !== undefined ? data["effectiveFrequencyBreakdowns"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown(item))) : undefined,
    onTargetCoviewImpressions: data["onTargetCoviewImpressions"] !== undefined ? String(data["onTargetCoviewImpressions"]) : undefined,
    onTargetCoviewReach: data["onTargetCoviewReach"] !== undefined ? String(data["onTargetCoviewReach"]) : undefined,
    onTargetImpressions: data["onTargetImpressions"] !== undefined ? String(data["onTargetImpressions"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? String(data["onTargetReach"]) : undefined,
    totalCoviewImpressions: data["totalCoviewImpressions"] !== undefined ? String(data["totalCoviewImpressions"]) : undefined,
    totalCoviewReach: data["totalCoviewReach"] !== undefined ? String(data["totalCoviewReach"]) : undefined,
    totalImpressions: data["totalImpressions"] !== undefined ? String(data["totalImpressions"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? String(data["totalReach"]) : undefined,
    trueviewViews: data["trueviewViews"] !== undefined ? String(data["trueviewViews"]) : undefined,
    viewableImpressions: data["viewableImpressions"] !== undefined ? String(data["viewableImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__Forecast(data: any): GoogleAdsSearchads360V23Services__Forecast {
  return {
    ...data,
    effectiveFrequencyBreakdowns: data["effectiveFrequencyBreakdowns"] !== undefined ? data["effectiveFrequencyBreakdowns"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__EffectiveFrequencyBreakdown(item))) : undefined,
    onTargetCoviewImpressions: data["onTargetCoviewImpressions"] !== undefined ? BigInt(data["onTargetCoviewImpressions"]) : undefined,
    onTargetCoviewReach: data["onTargetCoviewReach"] !== undefined ? BigInt(data["onTargetCoviewReach"]) : undefined,
    onTargetImpressions: data["onTargetImpressions"] !== undefined ? BigInt(data["onTargetImpressions"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? BigInt(data["onTargetReach"]) : undefined,
    totalCoviewImpressions: data["totalCoviewImpressions"] !== undefined ? BigInt(data["totalCoviewImpressions"]) : undefined,
    totalCoviewReach: data["totalCoviewReach"] !== undefined ? BigInt(data["totalCoviewReach"]) : undefined,
    totalImpressions: data["totalImpressions"] !== undefined ? BigInt(data["totalImpressions"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? BigInt(data["totalReach"]) : undefined,
    trueviewViews: data["trueviewViews"] !== undefined ? BigInt(data["trueviewViews"]) : undefined,
    viewableImpressions: data["viewableImpressions"] !== undefined ? BigInt(data["viewableImpressions"]) : undefined,
  };
}

/**
 * An ad group that is part of a campaign to be forecasted.
 */
export interface GoogleAdsSearchads360V23Services__ForecastAdGroup {
  /**
   * Required. The list of biddable keywords to be used in the ad group when
   * doing the forecast. Requires at least one keyword.
   */
  biddableKeywords?: GoogleAdsSearchads360V23Services__BiddableKeyword[];
  /**
   * The max cpc to use for the ad group when generating forecasted traffic.
   * This value will override the max cpc value set in the bidding strategy.
   * Only specify this field for bidding strategies that max cpc values.
   */
  maxCpcBidMicros?: bigint;
  /**
   * The details of the keyword. You should specify both the keyword text and
   * match type.
   */
  negativeKeywords?: GoogleAdsSearchads360V23Common__KeywordInfo[];
}

function serializeGoogleAdsSearchads360V23Services__ForecastAdGroup(data: any): GoogleAdsSearchads360V23Services__ForecastAdGroup {
  return {
    ...data,
    biddableKeywords: data["biddableKeywords"] !== undefined ? data["biddableKeywords"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BiddableKeyword(item))) : undefined,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? String(data["maxCpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ForecastAdGroup(data: any): GoogleAdsSearchads360V23Services__ForecastAdGroup {
  return {
    ...data,
    biddableKeywords: data["biddableKeywords"] !== undefined ? data["biddableKeywords"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BiddableKeyword(item))) : undefined,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? BigInt(data["maxCpcBidMicros"]) : undefined,
  };
}

/**
 * Controls forecast metrics to return.
 */
export interface GoogleAdsSearchads360V23Services__ForecastMetricOptions {
  /**
   * Indicates whether to include co-view metrics in the response forecast.
   */
  includeCoview?: boolean;
}

/**
 * A rule specifying the maximum number of times an ad can be shown to a user
 * over a particular time period.
 */
export interface GoogleAdsSearchads360V23Services__FrequencyCap {
  /**
   * Required. The number of impressions, inclusive.
   */
  impressions?: number;
  /**
   * Required. The type of time unit.
   */
  timeUnit?:  | "UNSPECIFIED" | "UNKNOWN" | "DAY" | "WEEK" | "MONTH";
}

/**
 * Request message for KeywordPlanIdeaService.GenerateAdGroupThemes.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAdGroupThemesRequest {
  /**
   * Required. A list of resource names of AdGroups to group keywords into.
   * Resource name format: `customers/{customer_id}/adGroups/{ad_group_id}`
   */
  adGroups?: string[];
  /**
   * Required. A list of keywords to group into the provided AdGroups.
   */
  keywords?: string[];
}

/**
 * Response message for KeywordPlanIdeaService.GenerateAdGroupThemes.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAdGroupThemesResponse {
  /**
   * A list of suggested AdGroup/keyword pairings.
   */
  adGroupKeywordSuggestions?: GoogleAdsSearchads360V23Services__AdGroupKeywordSuggestion[];
  /**
   * A list of provided AdGroups that could not be used as suggestions.
   */
  unusableAdGroups?: GoogleAdsSearchads360V23Services__UnusableAdGroup[];
}

/**
 * Request message for
 * AudienceInsightsService.GenerateAudienceCompositionInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsRequest {
  /**
   * Required. The audience of interest for which insights are being requested.
   */
  audience?: GoogleAdsSearchads360V23Services__InsightsAudience;
  /**
   * The baseline audience to which the audience of interest is being compared.
   */
  baselineAudience?: GoogleAdsSearchads360V23Services__InsightsAudience;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * The one-month range of historical data to use for insights, in the format
   * "yyyy-mm". If unset, insights will be returned for the last thirty days of
   * data.
   */
  dataMonth?: string;
  /**
   * Required. The audience dimensions for which composition insights should be
   * returned. Supported dimensions are KNOWLEDGE_GRAPH, GEO_TARGET_COUNTRY,
   * SUB_COUNTRY_LOCATION, YOUTUBE_CHANNEL, YOUTUBE_LINEUP,
   * AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, .
   */
  dimensions?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST"[];
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for
 * AudienceInsightsService.GenerateAudienceCompositionInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse {
  /**
   * The contents of the insights report, organized into sections. Each section
   * is associated with one of the AudienceInsightsDimension values in the
   * request. There may be more than one section per dimension.
   */
  sections?: GoogleAdsSearchads360V23Services__AudienceCompositionSection[];
}

function serializeGoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse {
  return {
    ...data,
    sections: data["sections"] !== undefined ? data["sections"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceCompositionSection(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceCompositionInsightsResponse {
  return {
    ...data,
    sections: data["sections"] !== undefined ? data["sections"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceCompositionSection(item))) : undefined,
  };
}

/**
 * Request message for AudienceInsightsService.GenerateAudienceDefinition.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionRequest {
  /**
   * Required. Provide a text description of an audience to get AI-generated
   * structured suggestions. This can take around 5 or more seconds to complete
   * Supported marketing objectives are: AWARENESS, CONSIDERATION and RESEARCH.
   * Supported dimensions are: AGE_RANGE, GENDER, PARENTAL_STATUS,
   * AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, LIFE_EVENT_USER_INTEREST,
   * CATEGORY and KNOWLEDGE_GRAPH.
   */
  audienceDescription?: GoogleAdsSearchads360V23Services__InsightsAudienceDescription;
  /**
   * Optional. The name of the customer being planned for. This is a
   * user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for AudienceInsightsService.GenerateAudienceDefinition.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse {
  /**
   * The attributes that make up the audience definition.
   */
  highRelevanceAttributes?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
  /**
   * Additional attributes that are less relevant but still related to the
   * audience description. Use these attributes to broaden the audience
   * definition to reach more users.
   */
  mediumRelevanceAttributes?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
}

function serializeGoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse {
  return {
    ...data,
    highRelevanceAttributes: data["highRelevanceAttributes"] !== undefined ? data["highRelevanceAttributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
    mediumRelevanceAttributes: data["mediumRelevanceAttributes"] !== undefined ? data["mediumRelevanceAttributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceDefinitionResponse {
  return {
    ...data,
    highRelevanceAttributes: data["highRelevanceAttributes"] !== undefined ? data["highRelevanceAttributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
    mediumRelevanceAttributes: data["mediumRelevanceAttributes"] !== undefined ? data["mediumRelevanceAttributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

/**
 * Request message for AudienceInsightsService.GenerateAudienceOverlapInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsRequest {
  /**
   * Required. The country in which to calculate the sizes and overlaps of
   * audiences.
   */
  countryLocation?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Required. The types of attributes of which to calculate the overlap with
   * the primary_attribute. The values must be a subset of
   * AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, AGE_RANGE and GENDER.
   */
  dimensions?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST"[];
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * Required. The audience attribute that should be intersected with all other
   * eligible audiences. This must be an Affinity or In-Market UserInterest, an
   * AgeRange or a Gender.
   */
  primaryAttribute?: GoogleAdsSearchads360V23Common__AudienceInsightsAttribute;
}

/**
 * Response message for
 * AudienceInsightsService.GenerateAudienceOverlapInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse {
  /**
   * Lists of attributes and their overlap with the primary attribute, one list
   * per requested dimension.
   */
  dimensionResults?: GoogleAdsSearchads360V23Services__DimensionOverlapResult[];
  /**
   * Metadata for the primary attribute, including potential YouTube reach.
   */
  primaryAttributeMetadata?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata;
}

function serializeGoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse {
  return {
    ...data,
    dimensionResults: data["dimensionResults"] !== undefined ? data["dimensionResults"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__DimensionOverlapResult(item))) : undefined,
    primaryAttributeMetadata: data["primaryAttributeMetadata"] !== undefined ? serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["primaryAttributeMetadata"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateAudienceOverlapInsightsResponse {
  return {
    ...data,
    dimensionResults: data["dimensionResults"] !== undefined ? data["dimensionResults"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__DimensionOverlapResult(item))) : undefined,
    primaryAttributeMetadata: data["primaryAttributeMetadata"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(data["primaryAttributeMetadata"]) : undefined,
  };
}

/**
 * Request message for BenchmarksService.GenerateBenchmarksMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest {
  /**
   * Additional information on the application issuing the request.
   */
  applicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * Required. The source used to generate benchmarks metrics for.
   */
  benchmarksSource?: GoogleAdsSearchads360V23Services__BenchmarksSource;
  /**
   * Optional. The three-character ISO 4217 currency code. If unspecified, the
   * default currency for monetary values is USD.
   */
  currencyCode?: string;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerBenchmarksGroup?: string;
  /**
   * The date range to aggregate metrics over. If unset, data will be returned
   * for the most recent quarter for which data is available. Dates can be
   * retrieved using BenchmarksService.ListBenchmarksAvailableDates.
   */
  dateRange?: GoogleAdsSearchads360V23Common__DateRange;
  /**
   * Required. The location to generate benchmarks metrics for.
   */
  location?: GoogleAdsSearchads360V23Common__LocationInfo;
  /**
   * Required. The products to aggregate metrics over. Product filter settings
   * support a list of product IDs or a list of marketing objectives.
   */
  productFilter?: GoogleAdsSearchads360V23Services__ProductFilter;
}

function serializeGoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest {
  return {
    ...data,
    benchmarksSource: data["benchmarksSource"] !== undefined ? serializeGoogleAdsSearchads360V23Services__BenchmarksSource(data["benchmarksSource"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsRequest {
  return {
    ...data,
    benchmarksSource: data["benchmarksSource"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__BenchmarksSource(data["benchmarksSource"]) : undefined,
  };
}

/**
 * Response message for BenchmarksService.GenerateBenchmarksMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateBenchmarksMetricsResponse {
  /**
   * Metrics for the selected benchmarks source.
   */
  averageBenchmarksMetrics?: GoogleAdsSearchads360V23Services__Metrics;
  /**
   * Metrics belonging to the customer.
   */
  customerMetrics?: GoogleAdsSearchads360V23Services__Metrics;
}

/**
 * Request message for ReachPlanService.GenerateConversionRates.
 */
export interface GoogleAdsSearchads360V23Services__GenerateConversionRatesRequest {
  /**
   * Required. The ID of the customer. A conversion rate based on the
   * historical data of this customer may be suggested.
   */
  customerId?: string;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerReachGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for ReachPlanService.GenerateConversionRates, containing
 * conversion rate suggestions for supported plannable products.
 */
export interface GoogleAdsSearchads360V23Services__GenerateConversionRatesResponse {
  /**
   * A list containing conversion rate suggestions. Each repeated element will
   * have an associated product code. Multiple suggestions may share the same
   * product code.
   */
  conversionRateSuggestions?: GoogleAdsSearchads360V23Services__ConversionRateSuggestion[];
}

/**
 * Request message for AudienceInsightsService.GenerateInsightsFinderReport.
 */
export interface GoogleAdsSearchads360V23Services__GenerateInsightsFinderReportRequest {
  /**
   * Required. A baseline audience for this report, typically all people in a
   * region.
   */
  baselineAudience?: GoogleAdsSearchads360V23Services__InsightsAudience;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * Required. The specific audience of interest for this report. The insights
   * in the report will be based on attributes more prevalent in this audience
   * than in the report's baseline audience.
   */
  specificAudience?: GoogleAdsSearchads360V23Services__InsightsAudience;
}

/**
 * The response message for
 * AudienceInsightsService.GenerateInsightsFinderReport, containing the
 * shareable URL for the report.
 */
export interface GoogleAdsSearchads360V23Services__GenerateInsightsFinderReportResponse {
  /**
   * An HTTPS URL providing a deep link into the Insights Finder UI with the
   * report inputs filled in according to the request.
   */
  savedReportUrl?: string;
}

/**
 * Request message for KeywordPlanIdeaService.GenerateKeywordForecastMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest {
  /**
   * Required. The campaign used in the forecast.
   */
  campaign?: GoogleAdsSearchads360V23Services__CampaignToForecast;
  /**
   * The currency used for exchange rate conversion. By default, the account
   * currency of the customer is used. Set this field only if the currency is
   * different from the account currency. The list of valid currency codes can
   * be found at
   * https://developers.google.com/google-ads/api/data/codes-formats#currency-codes.
   */
  currencyCode?: string;
  /**
   * The date range for the forecast. The start date must be in the future and
   * end date must be within 1 year from today. The reference timezone used is
   * the one of the Google Ads account belonging to the customer. If not set, a
   * default date range from next Sunday to the following Saturday will be used.
   */
  forecastPeriod?: GoogleAdsSearchads360V23Common__DateRange;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest {
  return {
    ...data,
    campaign: data["campaign"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignToForecast(data["campaign"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsRequest {
  return {
    ...data,
    campaign: data["campaign"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignToForecast(data["campaign"]) : undefined,
  };
}

/**
 * Response message for KeywordPlanIdeaService.GenerateKeywordForecastMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse {
  /**
   * Results of the campaign forecast.
   */
  campaignForecastMetrics?: GoogleAdsSearchads360V23Services__KeywordForecastMetrics;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse {
  return {
    ...data,
    campaignForecastMetrics: data["campaignForecastMetrics"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordForecastMetrics(data["campaignForecastMetrics"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordForecastMetricsResponse {
  return {
    ...data,
    campaignForecastMetrics: data["campaignForecastMetrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordForecastMetrics(data["campaignForecastMetrics"]) : undefined,
  };
}

/**
 * Request message for KeywordPlanIdeaService.GenerateKeywordHistoricalMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest {
  /**
   * The aggregate fields to include in response.
   */
  aggregateMetrics?: GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetrics;
  /**
   * The resource names of the location to target. Maximum is 10. An empty list
   * MAY be used to specify all targeting geos.
   */
  geoTargetConstants?: string[];
  /**
   * The options for historical metrics data.
   */
  historicalMetricsOptions?: GoogleAdsSearchads360V23Common__HistoricalMetricsOptions;
  /**
   * If true, adult keywords will be included in response. The default value is
   * false.
   */
  includeAdultKeywords?: boolean;
  /**
   * Targeting network. If not set, Google Search And Partners Network will be
   * used.
   */
  keywordPlanNetwork?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_SEARCH" | "GOOGLE_SEARCH_AND_PARTNERS";
  /**
   * A list of keywords to get historical metrics. Not all inputs will be
   * returned as a result of near-exact deduplication. For example, if stats for
   * "car" and "cars" are requested, only "car" will be returned. A maximum of
   * 10,000 keywords can be used.
   */
  keywords?: string[];
  /**
   * The resource name of the language to target. Each keyword belongs to some
   * set of languages; a keyword is included if language is one of its
   * languages. If not set, all keywords will be included.
   */
  language?: string;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest {
  return {
    ...data,
    historicalMetricsOptions: data["historicalMetricsOptions"] !== undefined ? serializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data["historicalMetricsOptions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsRequest {
  return {
    ...data,
    historicalMetricsOptions: data["historicalMetricsOptions"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data["historicalMetricsOptions"]) : undefined,
  };
}

/**
 * Response message for
 * KeywordPlanIdeaService.GenerateKeywordHistoricalMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse {
  /**
   * The aggregate metrics for all keywords.
   */
  aggregateMetricResults?: GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults;
  /**
   * List of keywords and their historical metrics.
   */
  results?: GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult[];
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse {
  return {
    ...data,
    aggregateMetricResults: data["aggregateMetricResults"] !== undefined ? serializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data["aggregateMetricResults"]) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResponse {
  return {
    ...data,
    aggregateMetricResults: data["aggregateMetricResults"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data["aggregateMetricResults"]) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult(item))) : undefined,
  };
}

/**
 * The result of generating keyword historical metrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult {
  /**
   * The list of close variants from the requested keywords whose stats are
   * combined into this GenerateKeywordHistoricalMetricsResult.
   */
  closeVariants?: string[];
  /**
   * The historical metrics for text and its close variants
   */
  keywordMetrics?: GoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics;
  /**
   * The text of the query associated with one or more keywords. Note that we
   * de-dupe your keywords list, eliminating close variants before returning the
   * keywords as text. For example, if your request originally contained the
   * keywords "car" and "cars", the returned search query will only contain
   * "cars". The list of de-duped queries will be included in close_variants
   * field.
   */
  text?: string;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult {
  return {
    ...data,
    keywordMetrics: data["keywordMetrics"] !== undefined ? serializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data["keywordMetrics"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordHistoricalMetricsResult {
  return {
    ...data,
    keywordMetrics: data["keywordMetrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data["keywordMetrics"]) : undefined,
  };
}

/**
 * Response message for KeywordPlanIdeaService.GenerateKeywordIdeas.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse {
  /**
   * The aggregate metrics for all keyword ideas.
   */
  aggregateMetricResults?: GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults;
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
  /**
   * Results of generating keyword ideas.
   */
  results?: GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult[];
  /**
   * Total number of results available.
   */
  totalSize?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse {
  return {
    ...data,
    aggregateMetricResults: data["aggregateMetricResults"] !== undefined ? serializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data["aggregateMetricResults"]) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult(item))) : undefined,
    totalSize: data["totalSize"] !== undefined ? String(data["totalSize"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResponse {
  return {
    ...data,
    aggregateMetricResults: data["aggregateMetricResults"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__KeywordPlanAggregateMetricResults(data["aggregateMetricResults"]) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult(item))) : undefined,
    totalSize: data["totalSize"] !== undefined ? BigInt(data["totalSize"]) : undefined,
  };
}

/**
 * The result of generating keyword ideas.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult {
  /**
   * The list of close variants from the requested keywords that are combined
   * into this GenerateKeywordIdeaResult. See
   * https://support.google.com/google-ads/answer/9342105 for the definition of
   * "close variants".
   */
  closeVariants?: string[];
  /**
   * The annotations for the keyword. The annotation data is only provided if
   * requested.
   */
  keywordAnnotations?: GoogleAdsSearchads360V23Common__KeywordAnnotations;
  /**
   * The historical metrics for the keyword.
   */
  keywordIdeaMetrics?: GoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics;
  /**
   * Text of the keyword idea. As in Keyword Plan historical metrics, this text
   * may not be an actual keyword, but the canonical form of multiple keywords.
   * See KeywordPlanKeywordHistoricalMetrics message in KeywordPlanService.
   */
  text?: string;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult {
  return {
    ...data,
    keywordIdeaMetrics: data["keywordIdeaMetrics"] !== undefined ? serializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data["keywordIdeaMetrics"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeaResult {
  return {
    ...data,
    keywordIdeaMetrics: data["keywordIdeaMetrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__KeywordPlanHistoricalMetrics(data["keywordIdeaMetrics"]) : undefined,
  };
}

/**
 * Request message for KeywordPlanIdeaService.GenerateKeywordIdeas.
 */
export interface GoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest {
  /**
   * The aggregate fields to include in response.
   */
  aggregateMetrics?: GoogleAdsSearchads360V23Common__KeywordPlanAggregateMetrics;
  /**
   * The resource names of the location to target. Maximum is 10. An empty list
   * MAY be used to specify all targeting geos.
   */
  geoTargetConstants?: string[];
  /**
   * The options for historical metrics data.
   */
  historicalMetricsOptions?: GoogleAdsSearchads360V23Common__HistoricalMetricsOptions;
  /**
   * If true, adult keywords will be included in response. The default value is
   * false.
   */
  includeAdultKeywords?: boolean;
  /**
   * A Keyword and a specific Url to generate ideas from for example, cars,
   * www.example.com/cars.
   */
  keywordAndUrlSeed?: GoogleAdsSearchads360V23Services__KeywordAndUrlSeed;
  /**
   * The keyword annotations to include in response.
   */
  keywordAnnotation?:  | "UNSPECIFIED" | "UNKNOWN" | "KEYWORD_CONCEPT"[];
  /**
   * Targeting network. If not set, Google Search And Partners Network will be
   * used.
   */
  keywordPlanNetwork?:  | "UNSPECIFIED" | "UNKNOWN" | "GOOGLE_SEARCH" | "GOOGLE_SEARCH_AND_PARTNERS";
  /**
   * A Keyword or phrase to generate ideas from, for example, cars.
   */
  keywordSeed?: GoogleAdsSearchads360V23Services__KeywordSeed;
  /**
   * The resource name of the language to target. Each keyword belongs to some
   * set of languages; a keyword is included if language is one of its
   * languages. If not set, all keywords will be included.
   */
  language?: string;
  /**
   * Number of results to retrieve in a single page. A maximum of 10,000
   * results may be returned, if the page_size exceeds this, it is ignored. If
   * unspecified, at most 10,000 results will be returned. The server may decide
   * to further limit the number of returned resources. If the response contains
   * fewer than 10,000 results it may not be assumed as last page of results.
   */
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. To request next page of results use the value obtained
   * from `next_page_token` in the previous response. The request fields must
   * match across pages.
   */
  pageToken?: string;
  /**
   * The site to generate ideas from, for example, www.example.com.
   */
  siteSeed?: GoogleAdsSearchads360V23Services__SiteSeed;
  /**
   * A specific url to generate ideas from, for example, www.example.com/cars.
   */
  urlSeed?: GoogleAdsSearchads360V23Services__UrlSeed;
}

function serializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest {
  return {
    ...data,
    historicalMetricsOptions: data["historicalMetricsOptions"] !== undefined ? serializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data["historicalMetricsOptions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest(data: any): GoogleAdsSearchads360V23Services__GenerateKeywordIdeasRequest {
  return {
    ...data,
    historicalMetricsOptions: data["historicalMetricsOptions"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__HistoricalMetricsOptions(data["historicalMetricsOptions"]) : undefined,
  };
}

/**
 * Request message for ReachPlanService.GenerateReachForecast.
 */
export interface GoogleAdsSearchads360V23Services__GenerateReachForecastRequest {
  /**
   * Required. Campaign duration.
   */
  campaignDuration?: GoogleAdsSearchads360V23Services__CampaignDuration;
  /**
   * Chosen cookie frequency cap to be applied to each planned product. This is
   * equivalent to the frequency cap exposed in Google Ads when creating a
   * campaign, it represents the maximum number of times an ad can be shown to
   * the same user. If not specified, no cap is applied. This field is
   * deprecated in v4 and will eventually be removed. Use
   * cookie_frequency_cap_setting instead.
   */
  cookieFrequencyCap?: number;
  /**
   * Chosen cookie frequency cap to be applied to each planned product. This is
   * equivalent to the frequency cap exposed in Google Ads when creating a
   * campaign, it represents the maximum number of times an ad can be shown to
   * the same user during a specified time interval. If not specified, a default
   * of 0 (no cap) is applied. This field replaces the deprecated
   * cookie_frequency_cap field.
   */
  cookieFrequencyCapSetting?: GoogleAdsSearchads360V23Services__FrequencyCap;
  /**
   * The currency code. Three-character ISO 4217 currency code.
   */
  currencyCode?: string;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerReachGroup?: string;
  /**
   * The highest minimum effective frequency (the number of times a person was
   * exposed to the ad) value [1-10] to include in
   * Forecast.effective_frequency_breakdowns. If not specified,
   * Forecast.effective_frequency_breakdowns will not be provided. The effective
   * frequency value provided here will also be used as the minimum effective
   * frequency for the reported reach metrics. This field cannot be combined
   * with the min_effective_frequency field.
   */
  effectiveFrequencyLimit?: GoogleAdsSearchads360V23Services__EffectiveFrequencyLimit;
  /**
   * Controls the forecast metrics returned in the response.
   */
  forecastMetricOptions?: GoogleAdsSearchads360V23Services__ForecastMetricOptions;
  /**
   * Chosen minimum effective frequency (the number of times a person was
   * exposed to the ad) for the reported reach metrics [1-10]. This won't affect
   * the targeting, but just the reporting. If not specified, a default of 1 is
   * applied. This field cannot be combined with the effective_frequency_limit
   * field.
   */
  minEffectiveFrequency?: number;
  /**
   * Required. The products to be forecast. The max number of allowed planned
   * products is 15.
   */
  plannedProducts?: GoogleAdsSearchads360V23Services__PlannedProduct[];
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * The targeting to be applied to all products selected in the product mix.
   * This is planned targeting: execution details might vary based on the
   * advertising product, consult an implementation specialist. See specific
   * metrics for details on how targeting affects them.
   */
  targeting?: GoogleAdsSearchads360V23Services__Targeting;
}

function serializeGoogleAdsSearchads360V23Services__GenerateReachForecastRequest(data: any): GoogleAdsSearchads360V23Services__GenerateReachForecastRequest {
  return {
    ...data,
    plannedProducts: data["plannedProducts"] !== undefined ? data["plannedProducts"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__PlannedProduct(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateReachForecastRequest(data: any): GoogleAdsSearchads360V23Services__GenerateReachForecastRequest {
  return {
    ...data,
    plannedProducts: data["plannedProducts"] !== undefined ? data["plannedProducts"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__PlannedProduct(item))) : undefined,
  };
}

/**
 * Response message containing the generated reach curve.
 */
export interface GoogleAdsSearchads360V23Services__GenerateReachForecastResponse {
  /**
   * Reference on target audiences for this curve.
   */
  onTargetAudienceMetrics?: GoogleAdsSearchads360V23Services__OnTargetAudienceMetrics;
  /**
   * The generated reach curve for the planned product mix.
   */
  reachCurve?: GoogleAdsSearchads360V23Services__ReachCurve;
}

function serializeGoogleAdsSearchads360V23Services__GenerateReachForecastResponse(data: any): GoogleAdsSearchads360V23Services__GenerateReachForecastResponse {
  return {
    ...data,
    onTargetAudienceMetrics: data["onTargetAudienceMetrics"] !== undefined ? serializeGoogleAdsSearchads360V23Services__OnTargetAudienceMetrics(data["onTargetAudienceMetrics"]) : undefined,
    reachCurve: data["reachCurve"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ReachCurve(data["reachCurve"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateReachForecastResponse(data: any): GoogleAdsSearchads360V23Services__GenerateReachForecastResponse {
  return {
    ...data,
    onTargetAudienceMetrics: data["onTargetAudienceMetrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__OnTargetAudienceMetrics(data["onTargetAudienceMetrics"]) : undefined,
    reachCurve: data["reachCurve"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ReachCurve(data["reachCurve"]) : undefined,
  };
}

/**
 * Request message for RecommendationService.GenerateRecommendations.
 */
export interface GoogleAdsSearchads360V23Services__GenerateRecommendationsRequest {
  /**
   * Optional. Current AdGroup Information. Supports information from a single
   * AdGroup. This field is optional for the following recommendation_types:
   * KEYWORD
   */
  adGroupInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_AdGroupInfo[];
  /**
   * Required. Advertising channel type of the campaign. The following
   * advertising_channel_types are supported for recommendation generation:
   * PERFORMANCE_MAX and SEARCH
   */
  advertisingChannelType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH" | "DISPLAY" | "SHOPPING" | "HOTEL" | "VIDEO" | "MULTI_CHANNEL" | "LOCAL" | "SMART" | "PERFORMANCE_MAX" | "LOCAL_SERVICES" | "TRAVEL" | "DEMAND_GEN" | "SOCIAL";
  /**
   * Optional. Current AssetGroup Information. This field is required for the
   * following recommendation_types: CAMPAIGN_BUDGET
   */
  assetGroupInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_AssetGroupInfo[];
  /**
   * Optional. Current bidding information of the campaign. This field is
   * necessary for the following recommendation_types: MAXIMIZE_CLICKS_OPT_IN,
   * MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
   * SET_TARGET_CPA, SET_TARGET_ROAS, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
   */
  biddingInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo;
  /**
   * Optional. Current budget information. This field is optional for the
   * following recommendation_types: CAMPAIGN_BUDGET
   */
  budgetInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo;
  /**
   * Optional. Current campaign call asset count. This field is optional for
   * the following recommendation_types: CAMPAIGN_BUDGET
   */
  campaignCallAssetCount?: number;
  /**
   * Optional. Current campaign image asset count. This field is optional for
   * the following recommendation_types: CAMPAIGN_BUDGET
   */
  campaignImageAssetCount?: number;
  /**
   * Optional. Number of sitelinks on the campaign. This field is necessary for
   * the following recommendation_types: SITELINK_ASSET
   */
  campaignSitelinkCount?: number;
  /**
   * Optional. Current conversion tracking status. This field is necessary for
   * the following recommendation_types: MAXIMIZE_CLICKS_OPT_IN,
   * MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
   * SET_TARGET_CPA, SET_TARGET_ROAS, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
   */
  conversionTrackingStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "NOT_CONVERSION_TRACKED" | "CONVERSION_TRACKING_MANAGED_BY_SELF" | "CONVERSION_TRACKING_MANAGED_BY_THIS_MANAGER" | "CONVERSION_TRACKING_MANAGED_BY_ANOTHER_MANAGER";
  /**
   * Optional. Current campaign country codes. This field is required for the
   * following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType
   * is SEARCH
   */
  countryCodes?: string[];
  /**
   * Optional. Whether or not this customer should be treated as a "new"
   * customer (that is, a customer who has not yet created a campaign). Setting
   * this to `true` will cause the backend to generate recommendations using a
   * dedicated recommendation model for onboarding new customers, as opposed to
   * the default model for existing customers. This is only recommended for
   * customers with 0 campaigns. This field is optional for the following
   * recommendation_types: CAMPAIGN_BUDGET
   */
  isNewCustomer?: boolean;
  /**
   * Optional. Current campaign language codes. This field is required for the
   * following recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType
   * is SEARCH
   */
  languageCodes?: string[];
  /**
   * Optional. Merchant Center account ID. This field should only be set when
   * advertising_channel_type is PERFORMANCE_MAX. Setting this field causes
   * RecommendationService to generate recommendations for Performance Max for
   * retail instead of standard Performance Max. This field is optional for the
   * following recommendation_types: CAMPAIGN_BUDGET
   */
  merchantCenterAccountId?: bigint;
  /**
   * Optional. Current campaign negative location ids. One of this field OR
   * positive_location_ids is required for the following recommendation_types:
   * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
   */
  negativeLocationsIds?: bigint[];
  /**
   * Optional. Current campaign positive location ids. One of this field OR
   * negative_location_ids is required for the following recommendation_types:
   * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
   */
  positiveLocationsIds?: bigint[];
  /**
   * Required. List of eligible recommendation_types to generate. If the
   * uploaded criteria isn't sufficient to make a recommendation, or the
   * campaign is already in the recommended state, no recommendation will be
   * returned for that type. Generally, a recommendation is returned if all
   * required fields for that recommendation_type are uploaded, but there are
   * cases where this is still not sufficient. The following
   * recommendation_types are supported for recommendation generation: KEYWORD,
   * MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
   * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
   * SITELINK_ASSET, TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
   */
  recommendationTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "CAMPAIGN_BUDGET" | "KEYWORD" | "TEXT_AD" | "TARGET_CPA_OPT_IN" | "MAXIMIZE_CONVERSIONS_OPT_IN" | "ENHANCED_CPC_OPT_IN" | "SEARCH_PARTNERS_OPT_IN" | "MAXIMIZE_CLICKS_OPT_IN" | "OPTIMIZE_AD_ROTATION" | "KEYWORD_MATCH_TYPE" | "MOVE_UNUSED_BUDGET" | "FORECASTING_CAMPAIGN_BUDGET" | "TARGET_ROAS_OPT_IN" | "RESPONSIVE_SEARCH_AD" | "MARGINAL_ROI_CAMPAIGN_BUDGET" | "USE_BROAD_MATCH_KEYWORD" | "RESPONSIVE_SEARCH_AD_ASSET" | "UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX" | "RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH" | "DISPLAY_EXPANSION_OPT_IN" | "UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX" | "RAISE_TARGET_CPA_BID_TOO_LOW" | "FORECASTING_SET_TARGET_ROAS" | "CALLOUT_ASSET" | "SITELINK_ASSET" | "CALL_ASSET" | "SHOPPING_ADD_AGE_GROUP" | "SHOPPING_ADD_COLOR" | "SHOPPING_ADD_GENDER" | "SHOPPING_ADD_GTIN" | "SHOPPING_ADD_MORE_IDENTIFIERS" | "SHOPPING_ADD_SIZE" | "SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN" | "SHOPPING_FIX_DISAPPROVED_PRODUCTS" | "SHOPPING_TARGET_ALL_OFFERS" | "SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT" | "SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING" | "SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX" | "DYNAMIC_IMAGE_EXTENSION_OPT_IN" | "RAISE_TARGET_CPA" | "LOWER_TARGET_ROAS" | "PERFORMANCE_MAX_OPT_IN" | "IMPROVE_PERFORMANCE_MAX_AD_STRENGTH" | "MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX" | "FORECASTING_SET_TARGET_CPA" | "SET_TARGET_CPA" | "SET_TARGET_ROAS" | "MAXIMIZE_CONVERSION_VALUE_OPT_IN" | "IMPROVE_GOOGLE_TAG_COVERAGE" | "PERFORMANCE_MAX_FINAL_URL_OPT_IN" | "REFRESH_CUSTOMER_MATCH_LIST" | "CUSTOM_AUDIENCE_OPT_IN" | "LEAD_FORM_ASSET" | "IMPROVE_DEMAND_GEN_AD_STRENGTH"[];
  /**
   * Optional. Seed information for Keywords. This field is necessary for the
   * following recommendation_types: KEYWORD
   */
  seedInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_SeedInfo;
  /**
   * Optional. If true, the campaign is opted into serving ads on specified
   * placements in the Google Display Network. This field is optional for the
   * following recommendation_types: CAMPAIGN_BUDGET
   */
  targetContentNetwork?: boolean;
  /**
   * Optional. If true, the campaign is opted into serving ads on the Google
   * Partner Network. This field is optional for the following
   * recommendation_types: CAMPAIGN_BUDGET
   */
  targetPartnerSearchNetwork?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__GenerateRecommendationsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateRecommendationsRequest {
  return {
    ...data,
    biddingInfo: data["biddingInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo(data["biddingInfo"]) : undefined,
    budgetInfo: data["budgetInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo(data["budgetInfo"]) : undefined,
    merchantCenterAccountId: data["merchantCenterAccountId"] !== undefined ? String(data["merchantCenterAccountId"]) : undefined,
    negativeLocationsIds: data["negativeLocationsIds"] !== undefined ? data["negativeLocationsIds"].map((item: any) => (String(item))) : undefined,
    positiveLocationsIds: data["positiveLocationsIds"] !== undefined ? data["positiveLocationsIds"].map((item: any) => (String(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateRecommendationsRequest(data: any): GoogleAdsSearchads360V23Services__GenerateRecommendationsRequest {
  return {
    ...data,
    biddingInfo: data["biddingInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo(data["biddingInfo"]) : undefined,
    budgetInfo: data["budgetInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo(data["budgetInfo"]) : undefined,
    merchantCenterAccountId: data["merchantCenterAccountId"] !== undefined ? BigInt(data["merchantCenterAccountId"]) : undefined,
    negativeLocationsIds: data["negativeLocationsIds"] !== undefined ? data["negativeLocationsIds"].map((item: any) => (BigInt(item))) : undefined,
    positiveLocationsIds: data["positiveLocationsIds"] !== undefined ? data["positiveLocationsIds"].map((item: any) => (BigInt(item))) : undefined,
  };
}

/**
 * Response message for RecommendationService.GenerateRecommendations.
 */
export interface GoogleAdsSearchads360V23Services__GenerateRecommendationsResponse {
  /**
   * List of generated recommendations from the passed in set of requested
   * recommendation_types. If there isn't sufficient data to generate a
   * recommendation for the requested recommendation_types, the result set won't
   * contain a recommendation for that type.
   */
  recommendations?: GoogleAdsSearchads360V23Resources__Recommendation[];
}

/**
 * Request message for
 * AudienceInsightsService.GenerateSuggestedTargetingInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsRequest {
  /**
   * Provide a seed audience to get suggestions for.
   */
  audienceDefinition?: GoogleAdsSearchads360V23Services__InsightsAudienceDefinition;
  /**
   * Provide a text description of an audience to get AI-generated targeting
   * suggestions. This can take around 5 or more seconds to complete.
   */
  audienceDescription?: GoogleAdsSearchads360V23Services__InsightsAudienceDescription;
  /**
   * Optional. The name of the customer being planned for. This is a
   * user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for
 * AudienceInsightsService.GenerateSuggestedTargetingInsights.
 */
export interface GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse {
  /**
   * Suggested insights for targetable audiences.
   */
  suggestions?: GoogleAdsSearchads360V23Services__TargetingSuggestionMetrics[];
}

function serializeGoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse {
  return {
    ...data,
    suggestions: data["suggestions"] !== undefined ? data["suggestions"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateSuggestedTargetingInsightsResponse {
  return {
    ...data,
    suggestions: data["suggestions"] !== undefined ? data["suggestions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(item))) : undefined,
  };
}

/**
 * Request message for
 * AudienceInsightsService.GenerateTargetingSuggestionMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsRequest {
  /**
   * Required. Audiences to request metrics for.
   */
  audiences?: GoogleAdsSearchads360V23Services__InsightsAudience[];
  /**
   * Optional. The name of the customer being planned for. This is a
   * user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for
 * AudienceInsightsService.GenerateTargetingSuggestionMetrics.
 */
export interface GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse {
  /**
   * Suggested targetable audiences. There will be one suggestion for each
   * GenerateTargetingSuggestionMetricsRequest.audiences requested, matching the
   * order requested.
   */
  suggestions?: GoogleAdsSearchads360V23Services__TargetingSuggestionMetrics[];
}

function serializeGoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse {
  return {
    ...data,
    suggestions: data["suggestions"] !== undefined ? data["suggestions"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse(data: any): GoogleAdsSearchads360V23Services__GenerateTargetingSuggestionMetricsResponse {
  return {
    ...data,
    suggestions: data["suggestions"] !== undefined ? data["suggestions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(item))) : undefined,
  };
}

/**
 * A geo target constant suggestion.
 */
export interface GoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion {
  /**
   * The GeoTargetConstant result.
   */
  geoTargetConstant?: GoogleAdsSearchads360V23Resources__GeoTargetConstant;
  /**
   * The list of parents of the geo target constant.
   */
  geoTargetConstantParents?: GoogleAdsSearchads360V23Resources__GeoTargetConstant[];
  /**
   * The language this GeoTargetConstantSuggestion is currently translated to.
   * It affects the name of geo target fields. For example, if locale=en, then
   * name=Spain. If locale=es, then name=España. The default locale will be
   * returned if no translation exists for the locale in the request.
   */
  locale?: string;
  /**
   * Approximate user population that will be targeted, rounded to the nearest
   * 100.
   */
  reach?: bigint;
  /**
   * If the request searched by location name, this is the location name that
   * matched the geo target.
   */
  searchTerm?: string;
}

function serializeGoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion(data: any): GoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion {
  return {
    ...data,
    reach: data["reach"] !== undefined ? String(data["reach"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion(data: any): GoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion {
  return {
    ...data,
    reach: data["reach"] !== undefined ? BigInt(data["reach"]) : undefined,
  };
}

/**
 * Response message for GetIdentityVerification.
 */
export interface GoogleAdsSearchads360V23Services__GetIdentityVerificationResponse {
  /**
   * List of identity verifications for the customer.
   */
  identityVerification?: GoogleAdsSearchads360V23Services__IdentityVerification[];
}

/**
 * Response message for SmartCampaignSettingService.GetSmartCampaignStatus.
 */
export interface GoogleAdsSearchads360V23Services__GetSmartCampaignStatusResponse {
  /**
   * Details related to Smart campaigns that are eligible to serve.
   */
  eligibleDetails?: GoogleAdsSearchads360V23Services__SmartCampaignEligibleDetails;
  /**
   * Details related to Smart campaigns that have ended.
   */
  endedDetails?: GoogleAdsSearchads360V23Services__SmartCampaignEndedDetails;
  /**
   * Details related to Smart campaigns that are ineligible to serve.
   */
  notEligibleDetails?: GoogleAdsSearchads360V23Services__SmartCampaignNotEligibleDetails;
  /**
   * Details related to paused Smart campaigns.
   */
  pausedDetails?: GoogleAdsSearchads360V23Services__SmartCampaignPausedDetails;
  /**
   * Details related to removed Smart campaigns.
   */
  removedDetails?: GoogleAdsSearchads360V23Services__SmartCampaignRemovedDetails;
  /**
   * The status of this Smart campaign.
   */
  smartCampaignStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "PAUSED" | "NOT_ELIGIBLE" | "PENDING" | "ELIGIBLE" | "REMOVED" | "ENDED";
}

/**
 * A single mutate operation on the goal.
 */
export interface GoogleAdsSearchads360V23Services__GoalOperation {
  /**
   * Create a new goal.
   */
  create?: GoogleAdsSearchads360V23Resources__Goal;
  /**
   * Update an existing goal.
   */
  update?: GoogleAdsSearchads360V23Resources__Goal;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__GoalOperation(data: any): GoogleAdsSearchads360V23Services__GoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__GoalOperation(data: any): GoogleAdsSearchads360V23Services__GoalOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Request message for ExperimentService.GraduateExperiment.
 */
export interface GoogleAdsSearchads360V23Services__GraduateExperimentRequest {
  /**
   * Required. List of campaign budget mappings for graduation. Each campaign
   * that appears here will graduate, and will be assigned a new budget that is
   * paired with it in the mapping. The maximum size is one.
   */
  campaignBudgetMappings?: GoogleAdsSearchads360V23Services__CampaignBudgetMapping[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Message containing the asset suggestions for a hotel.
 */
export interface GoogleAdsSearchads360V23Services__HotelAssetSuggestion {
  /**
   * Call to action type.
   */
  callToAction?:  | "UNSPECIFIED" | "UNKNOWN" | "LEARN_MORE" | "GET_QUOTE" | "APPLY_NOW" | "SIGN_UP" | "CONTACT_US" | "SUBSCRIBE" | "DOWNLOAD" | "BOOK_NOW" | "SHOP_NOW" | "BUY_NOW" | "DONATE_NOW" | "ORDER_NOW" | "PLAY_NOW" | "SEE_MORE" | "START_NOW" | "VISIT_SITE" | "WATCH_NOW";
  /**
   * Suggested final URL for an AssetGroup.
   */
  finalUrl?: string;
  /**
   * Hotel name in requested language.
   */
  hotelName?: string;
  /**
   * Image assets such as landscape/portrait/square, etc.
   */
  imageAssets?: GoogleAdsSearchads360V23Services__HotelImageAsset[];
  /**
   * Google Places ID of the hotel.
   */
  placeId?: string;
  /**
   * The status of the hotel asset suggestion.
   */
  status?:  | "UNSPECIFIED" | "UNKNOWN" | "SUCCESS" | "HOTEL_NOT_FOUND" | "INVALID_PLACE_ID";
  /**
   * Text assets such as headline, description, etc.
   */
  textAssets?: GoogleAdsSearchads360V23Services__HotelTextAsset[];
}

/**
 * A single image asset suggestion for a hotel.
 */
export interface GoogleAdsSearchads360V23Services__HotelImageAsset {
  /**
   * The Image asset type. For example, MARKETING_IMAGE,
   * PORTRAIT_MARKETING_IMAGE, etc.
   */
  assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * URI for the image.
   */
  uri?: string;
}

/**
 * A single text asset suggestion for a hotel.
 */
export interface GoogleAdsSearchads360V23Services__HotelTextAsset {
  /**
   * The text asset type. For example, HEADLINE, DESCRIPTION, etc.
   */
  assetFieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
  /**
   * Asset text in requested language.
   */
  text?: string;
}

/**
 * An identity verification for a customer.
 */
export interface GoogleAdsSearchads360V23Services__IdentityVerification {
  /**
   * The verification requirement for this verification program for this
   * customer.
   */
  identityVerificationRequirement?: GoogleAdsSearchads360V23Services__IdentityVerificationRequirement;
  /**
   * The verification program type.
   */
  verificationProgram?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER_IDENTITY_VERIFICATION";
  /**
   * Information regarding progress for this verification program for this
   * customer.
   */
  verificationProgress?: GoogleAdsSearchads360V23Services__IdentityVerificationProgress;
}

/**
 * Information regarding the verification progress for a verification program
 * type.
 */
export interface GoogleAdsSearchads360V23Services__IdentityVerificationProgress {
  /**
   * Action URL for user to complete verification for the given verification
   * program type.
   */
  actionUrl?: string;
  /**
   * The timestamp when the action url will expire in "yyyy-MM-dd HH:mm:ss"
   * format.
   */
  invitationLinkExpirationTime?: string;
  /**
   * Current Status (PENDING_USER_ACTION, SUCCESS, FAILURE etc)
   */
  programStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "PENDING_USER_ACTION" | "PENDING_REVIEW" | "SUCCESS" | "FAILURE";
}

/**
 * Information regarding the verification requirement for a verification
 * program type.
 */
export interface GoogleAdsSearchads360V23Services__IdentityVerificationRequirement {
  /**
   * The deadline to submit verification.
   */
  verificationCompletionDeadlineTime?: string;
  /**
   * The deadline to start verification in "yyyy-MM-dd HH:mm:ss" format.
   */
  verificationStartDeadlineTime?: string;
}

/**
 * An incentive that a user can claim for their account.
 */
export interface GoogleAdsSearchads360V23Services__Incentive {
  /**
   * The incentive ID of this incentive. This is used to identify which
   * incentive is selected by the user in the CYO flow.
   */
  incentiveId?: bigint;
  /**
   * The URL of the terms and conditions for THIS incentive offer ONLY. This is
   * different from the terms_and_conditions_url field in
   * AcquisitionIncentiveOffer which is a combination of all the Incentive
   * offers in a CYO offer.
   */
  incentiveTermsAndConditionsUrl?: string;
  /**
   * The requirement for this incentive.
   */
  requirement?: GoogleAdsSearchads360V23Services_Incentive_Requirement;
  /**
   * The type of the incentive.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "ACQUISITION";
}

function serializeGoogleAdsSearchads360V23Services__Incentive(data: any): GoogleAdsSearchads360V23Services__Incentive {
  return {
    ...data,
    incentiveId: data["incentiveId"] !== undefined ? String(data["incentiveId"]) : undefined,
    requirement: data["requirement"] !== undefined ? serializeGoogleAdsSearchads360V23Services_Incentive_Requirement(data["requirement"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__Incentive(data: any): GoogleAdsSearchads360V23Services__Incentive {
  return {
    ...data,
    incentiveId: data["incentiveId"] !== undefined ? BigInt(data["incentiveId"]) : undefined,
    requirement: data["requirement"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_Incentive_Requirement(data["requirement"]) : undefined,
  };
}

/**
 * An acquisition incentive offer for a user. An offer means how the user is
 * treated. An offer can have no incentive or multiple incentives.
 */
export interface GoogleAdsSearchads360V23Services__IncentiveOffer {
  /**
   * Optional. The URL of the terms and conditions for the incentive offer.
   */
  consolidatedTermsAndConditionsUrl?: string;
  /**
   * CYO incentives. Set when type is CYO_INCENTIVE.
   */
  cyoIncentives?: GoogleAdsSearchads360V23Services__CyoIncentives;
  /**
   * Required. The type of this acquisition incentive offer.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "NO_INCENTIVE" | "CYO_INCENTIVE";
}

function serializeGoogleAdsSearchads360V23Services__IncentiveOffer(data: any): GoogleAdsSearchads360V23Services__IncentiveOffer {
  return {
    ...data,
    cyoIncentives: data["cyoIncentives"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CyoIncentives(data["cyoIncentives"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__IncentiveOffer(data: any): GoogleAdsSearchads360V23Services__IncentiveOffer {
  return {
    ...data,
    cyoIncentives: data["cyoIncentives"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CyoIncentives(data["cyoIncentives"]) : undefined,
  };
}

/**
 * The information associated with an Industry Vertical.
 */
export interface GoogleAdsSearchads360V23Services__IndustryVerticalInfo {
  /**
   * The unique identifier of the Industry Vertical.
   */
  industryVerticalId?: bigint;
  /**
   * The name of the Industry Vertical.
   */
  industryVerticalName?: string;
  /**
   * The unique identifier of the parent Industry Vertical, if exists.
   */
  parentIndustryVerticalId?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__IndustryVerticalInfo(data: any): GoogleAdsSearchads360V23Services__IndustryVerticalInfo {
  return {
    ...data,
    industryVerticalId: data["industryVerticalId"] !== undefined ? String(data["industryVerticalId"]) : undefined,
    parentIndustryVerticalId: data["parentIndustryVerticalId"] !== undefined ? String(data["parentIndustryVerticalId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__IndustryVerticalInfo(data: any): GoogleAdsSearchads360V23Services__IndustryVerticalInfo {
  return {
    ...data,
    industryVerticalId: data["industryVerticalId"] !== undefined ? BigInt(data["industryVerticalId"]) : undefined,
    parentIndustryVerticalId: data["parentIndustryVerticalId"] !== undefined ? BigInt(data["parentIndustryVerticalId"]) : undefined,
  };
}

/**
 * A set of users, defined by various characteristics, for which insights can
 * be requested in AudienceInsightsService.
 */
export interface GoogleAdsSearchads360V23Services__InsightsAudience {
  /**
   * Age ranges for the audience. If absent, the audience represents all people
   * over 18 that match the other attributes.
   */
  ageRanges?: GoogleAdsSearchads360V23Common__AgeRangeInfo[];
  /**
   * Required. The countries for the audience.
   */
  countryLocations?: GoogleAdsSearchads360V23Common__LocationInfo[];
  /**
   * Gender for the audience. If absent, the audience does not restrict by
   * gender.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderInfo;
  /**
   * Household income percentile ranges for the audience. If absent, the
   * audience does not restrict by household income range.
   */
  incomeRanges?: GoogleAdsSearchads360V23Common__IncomeRangeInfo[];
  /**
   * Lineups representing the YouTube content viewed by the audience.
   */
  lineups?: GoogleAdsSearchads360V23Common__AudienceInsightsLineup[];
  /**
   * Parental status for the audience. If absent, the audience does not
   * restrict by parental status.
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusInfo;
  /**
   * Sub-country geographic location attributes. If present, each of these must
   * be contained in one of the countries in this audience. If absent, the
   * audience is geographically to the country_locations and no further.
   */
  subCountryLocations?: GoogleAdsSearchads360V23Common__LocationInfo[];
  /**
   * A combination of entity, category and user interest attributes defining
   * the audience. The combination has a logical AND-of-ORs structure:
   * Attributes within each InsightsAudienceAttributeGroup are combined with OR,
   * and the combinations themselves are combined together with AND. For
   * example, the expression (Entity OR Affinity) AND (In-Market OR Category)
   * can be formed using two InsightsAudienceAttributeGroups with two Attributes
   * each.
   */
  topicAudienceCombinations?: GoogleAdsSearchads360V23Services__InsightsAudienceAttributeGroup[];
  /**
   * User list to be targeted by the audience.
   */
  userList?: GoogleAdsSearchads360V23Common__UserListInfo;
}

/**
 * A list of AudienceInsightsAttributes.
 */
export interface GoogleAdsSearchads360V23Services__InsightsAudienceAttributeGroup {
  /**
   * Required. A collection of audience attributes to be combined with logical
   * OR. Attributes need not all be the same dimension. Only Knowledge Graph
   * entities, Product & Service Categories, and Affinity and In-Market
   * audiences are supported in this context.
   */
  attributes?: GoogleAdsSearchads360V23Common__AudienceInsightsAttribute[];
}

/**
 * A structured definition of the audience of interest for which insights are
 * being requested in AudienceInsightsService.
 */
export interface GoogleAdsSearchads360V23Services__InsightsAudienceDefinition {
  /**
   * Required. The audience of interest for which insights are being requested.
   */
  audience?: GoogleAdsSearchads360V23Services__InsightsAudience;
  /**
   * Optional. The baseline audience. The default, if unspecified, is all
   * people in the same country as the audience of interest.
   */
  baselineAudience?: GoogleAdsSearchads360V23Services__InsightsAudience;
  /**
   * Optional. The one-month range of historical data to use for insights, in
   * the format "yyyy-mm". If unset, insights will be returned for the last
   * thirty days of data.
   */
  dataMonth?: string;
}

/**
 * A text description of the audience of interest for which insights are being
 * requested in AudienceInsightsService.
 */
export interface GoogleAdsSearchads360V23Services__InsightsAudienceDescription {
  /**
   * Required. An English language text description of an audience to get
   * suggestions for. Maximum length is 2000 characters. For example, "Women in
   * their 30s who love to travel".
   */
  audienceDescription?: string;
  /**
   * Optional. An optional list of audience dimensions to return.
   */
  audienceDimensions?: GoogleAdsSearchads360V23Services__AudienceInsightsDimensions;
  /**
   * Required. The countries for the audience.
   */
  countryLocations?: GoogleAdsSearchads360V23Common__LocationInfo[];
  /**
   * Optional. An optional marketing objective which will influence the type of
   * suggestions produced.
   */
  marketingObjective?:  | "UNSPECIFIED" | "UNKNOWN" | "AWARENESS" | "CONSIDERATION" | "RESEARCH";
}

/**
 * Keyword And Url Seed
 */
export interface GoogleAdsSearchads360V23Services__KeywordAndUrlSeed {
  /**
   * Requires at least one keyword and no more than 20 keywords.
   */
  keywords?: string[];
  /**
   * The URL to crawl in order to generate keyword ideas.
   */
  url?: string;
}

/**
 * The forecast metrics for the planless keyword campaign.
 */
export interface GoogleAdsSearchads360V23Services__KeywordForecastMetrics {
  /**
   * Average cost per acquisition calculated as cost_micros / conversions.
   */
  averageCpaMicros?: bigint;
  /**
   * The average cpc. Available only if clicks > 0.
   */
  averageCpcMicros?: bigint;
  /**
   * The total number of clicks.
   */
  clicks?: number;
  /**
   * The average click through rate. Available only if impressions > 0.
   */
  clickThroughRate?: number;
  /**
   * Forecasted conversion rate.
   */
  conversionRate?: number;
  /**
   * Forecasted number of conversions: clicks * conversion_rate.
   */
  conversions?: number;
  /**
   * The total cost.
   */
  costMicros?: bigint;
  /**
   * The total number of impressions.
   */
  impressions?: number;
}

function serializeGoogleAdsSearchads360V23Services__KeywordForecastMetrics(data: any): GoogleAdsSearchads360V23Services__KeywordForecastMetrics {
  return {
    ...data,
    averageCpaMicros: data["averageCpaMicros"] !== undefined ? String(data["averageCpaMicros"]) : undefined,
    averageCpcMicros: data["averageCpcMicros"] !== undefined ? String(data["averageCpcMicros"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordForecastMetrics(data: any): GoogleAdsSearchads360V23Services__KeywordForecastMetrics {
  return {
    ...data,
    averageCpaMicros: data["averageCpaMicros"] !== undefined ? BigInt(data["averageCpaMicros"]) : undefined,
    averageCpcMicros: data["averageCpcMicros"] !== undefined ? BigInt(data["averageCpcMicros"]) : undefined,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a Keyword Plan ad group
 * keyword.
 */
export interface GoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation {
  /**
   * Create operation: No resource name is expected for the new Keyword Plan ad
   * group keyword.
   */
  create?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword;
  /**
   * Remove operation: A resource name for the removed Keyword Plan ad group
   * keyword is expected, in this format:
   * `customers/{customer_id}/keywordPlanAdGroupKeywords/{kp_ad_group_keyword_id}`
   */
  remove?: string;
  /**
   * Update operation: The Keyword Plan ad group keyword is expected to have a
   * valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword;
  /**
   * The FieldMask that determines which resource fields are modified in an
   * update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a Keyword Plan ad group.
 */
export interface GoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation {
  /**
   * Create operation: No resource name is expected for the new Keyword Plan ad
   * group.
   */
  create?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup;
  /**
   * Remove operation: A resource name for the removed Keyword Plan ad group is
   * expected, in this format:
   * `customers/{customer_id}/keywordPlanAdGroups/{kp_ad_group_id}`
   */
  remove?: string;
  /**
   * Update operation: The Keyword Plan ad group is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup;
  /**
   * The FieldMask that determines which resource fields are modified in an
   * update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a Keyword Plan campaign
 * keyword.
 */
export interface GoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation {
  /**
   * Create operation: No resource name is expected for the new Keyword Plan
   * campaign keyword.
   */
  create?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaignKeyword;
  /**
   * Remove operation: A resource name for the removed Keyword Plan campaign
   * keywords expected in this format:
   * `customers/{customer_id}/keywordPlanCampaignKeywords/{kp_campaign_keyword_id}`
   */
  remove?: string;
  /**
   * Update operation: The Keyword Plan campaign keyword expected to have a
   * valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaignKeyword;
  /**
   * The FieldMask that determines which resource fields are modified in an
   * update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a Keyword Plan campaign.
 */
export interface GoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation {
  /**
   * Create operation: No resource name is expected for the new Keyword Plan
   * campaign.
   */
  create?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaign;
  /**
   * Remove operation: A resource name for the removed Keyword Plan campaign is
   * expected, in this format:
   * `customers/{customer_id}/keywordPlanCampaigns/{keywordPlan_campaign_id}`
   */
  remove?: string;
  /**
   * Update operation: The Keyword Plan campaign is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaign;
  /**
   * The FieldMask that determines which resource fields are modified in an
   * update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A single operation (create, update, remove) on a keyword plan.
 */
export interface GoogleAdsSearchads360V23Services__KeywordPlanOperation {
  /**
   * Create operation: No resource name is expected for the new keyword plan.
   */
  create?: GoogleAdsSearchads360V23Resources__KeywordPlan;
  /**
   * Remove operation: A resource name for the removed keyword plan is expected
   * in this format: `customers/{customer_id}/keywordPlans/{keyword_plan_id}`
   */
  remove?: string;
  /**
   * Update operation: The keyword plan is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__KeywordPlan;
  /**
   * The FieldMask that determines which resource fields are modified in an
   * update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(data: any): GoogleAdsSearchads360V23Services__KeywordPlanOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Keyword Seed
 */
export interface GoogleAdsSearchads360V23Services__KeywordSeed {
  /**
   * Requires at least one keyword and no more than 20 keywords.
   */
  keywords?: string[];
}

/**
 * A single operation (create, remove, update) on a label.
 */
export interface GoogleAdsSearchads360V23Services__LabelOperation {
  /**
   * Create operation: No resource name is expected for the new label.
   */
  create?: GoogleAdsSearchads360V23Resources__Label;
  /**
   * Remove operation: A resource name for the label being removed, in this
   * format: `customers/{customer_id}/labels/{label_id}`
   */
  remove?: string;
  /**
   * Update operation: The label is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__Label;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__LabelOperation(data: any): GoogleAdsSearchads360V23Services__LabelOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__LabelOperation(data: any): GoogleAdsSearchads360V23Services__LabelOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Response message for CustomerService.ListAccessibleCustomers.
 */
export interface GoogleAdsSearchads360V23Services__ListAccessibleCustomersResponse {
  /**
   * Resource name of customers directly accessible by the user authenticating
   * the call.
   */
  resourceNames?: string[];
}

/**
 * Request message for AudienceInsightsService.ListAudienceInsightsAttributes.
 */
export interface GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesRequest {
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerInsightsGroup?: string;
  /**
   * Required. The types of attributes to be returned. Supported dimensions are
   * CATEGORY, KNOWLEDGE_GRAPH, GEO_TARGET_COUNTRY, SUB_COUNTRY_LOCATION,
   * YOUTUBE_LINEUP, AFFINITY_USER_INTEREST, IN_MARKET_USER_INTEREST, .
   */
  dimensions?:  | "UNSPECIFIED" | "UNKNOWN" | "CATEGORY" | "KNOWLEDGE_GRAPH" | "GEO_TARGET_COUNTRY" | "SUB_COUNTRY_LOCATION" | "YOUTUBE_CHANNEL" | "AFFINITY_USER_INTEREST" | "IN_MARKET_USER_INTEREST" | "PARENTAL_STATUS" | "INCOME_RANGE" | "AGE_RANGE" | "GENDER" | "YOUTUBE_VIDEO" | "DEVICE" | "YOUTUBE_LINEUP" | "USER_LIST" | "LIFE_EVENT_USER_INTEREST"[];
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * If SUB_COUNTRY_LOCATION attributes are one of the requested dimensions and
   * this field is present, then the SUB_COUNTRY_LOCATION attributes returned
   * will be located in these countries. If this field is absent, then location
   * attributes are not filtered by country. Setting this field when
   * SUB_COUNTRY_LOCATION attributes are not requested will return an error.
   */
  locationCountryFilters?: GoogleAdsSearchads360V23Common__LocationInfo[];
  /**
   * Required. A free text query. If the requested dimensions include
   * Attributes CATEGORY or KNOWLEDGE_GRAPH, then the attributes returned for
   * those dimensions will match or be related to this string. For other
   * dimensions, this field is ignored and all available attributes are
   * returned.
   */
  queryText?: string;
  /**
   * If present, potential YouTube reach estimates within the specified market
   * will be returned for attributes for which they are available. Reach is only
   * available for the AGE_RANGE, GENDER, AFFINITY_USER_INTEREST and
   * IN_MARKET_USER_INTEREST dimensions, and may not be available for every
   * attribute of those dimensions in every market.
   */
  youtubeReachLocation?: GoogleAdsSearchads360V23Common__LocationInfo;
}

/**
 * Response message for AudienceInsightsService.ListAudienceInsightsAttributes.
 */
export interface GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse {
  /**
   * The attributes matching the search query.
   */
  attributes?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
}

function serializeGoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse(data: any): GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse(data: any): GoogleAdsSearchads360V23Services__ListAudienceInsightsAttributesResponse {
  return {
    ...data,
    attributes: data["attributes"] !== undefined ? data["attributes"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
  };
}

/**
 * Response message for BatchJobService.ListBatchJobResults.
 */
export interface GoogleAdsSearchads360V23Services__ListBatchJobResultsResponse {
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
  /**
   * The list of rows that matched the query.
   */
  results?: GoogleAdsSearchads360V23Services__BatchJobResult[];
}

function serializeGoogleAdsSearchads360V23Services__ListBatchJobResultsResponse(data: any): GoogleAdsSearchads360V23Services__ListBatchJobResultsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BatchJobResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ListBatchJobResultsResponse(data: any): GoogleAdsSearchads360V23Services__ListBatchJobResultsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BatchJobResult(item))) : undefined,
  };
}

/**
 * Request message for BenchmarksService.ListBenchmarksAvailableDates.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksAvailableDatesRequest {
  /**
   * Additional information on the application issuing the request.
   */
  applicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for BenchmarksService.ListBenchmarksAvailableDates.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksAvailableDatesResponse {
  /**
   * The dates that support benchmarks metrics. Data is supported for any dates
   * within this date range inclusive.
   */
  supportedDates?: GoogleAdsSearchads360V23Common__DateRange;
}

/**
 * Request message for BenchmarksService.ListBenchmarksLocations.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksLocationsRequest {
  /**
   * Additional information on the application issuing the request.
   */
  applicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for BenchmarksService.ListBenchmarksLocations.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksLocationsResponse {
  /**
   * The list of locations supported for benchmarks data.
   */
  benchmarksLocations?: GoogleAdsSearchads360V23Services__BenchmarksLocation[];
}

/**
 * Request message for BenchmarksService.ListBenchmarksProducts.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksProductsRequest {
  /**
   * Additional information on the application issuing the request.
   */
  applicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for BenchmarksService.ListBenchmarksProducts.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksProductsResponse {
  /**
   * The list of products available for benchmarks data.
   */
  benchmarksProducts?: GoogleAdsSearchads360V23Services__BenchmarksProductMetadata[];
}

/**
 * Request message for BenchmarksService.ListBenchmarksSources.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksSourcesRequest {
  /**
   * Additional information on the application issuing the request.
   */
  applicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * Required. The types of benchmarks sources to be returned (for example,
   * INDUSTRY_VERTICAL).
   */
  benchmarksSources?:  | "UNSPECIFIED" | "UNKNOWN" | "INDUSTRY_VERTICAL"[];
}

/**
 * Response message for BenchmarksService.ListBenchmarksSources.
 */
export interface GoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse {
  /**
   * The list of available source used to generate benchmarks data for.
   */
  benchmarksSources?: GoogleAdsSearchads360V23Services__BenchmarksSourceMetadata[];
}

function serializeGoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse(data: any): GoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse {
  return {
    ...data,
    benchmarksSources: data["benchmarksSources"] !== undefined ? data["benchmarksSources"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BenchmarksSourceMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse(data: any): GoogleAdsSearchads360V23Services__ListBenchmarksSourcesResponse {
  return {
    ...data,
    benchmarksSources: data["benchmarksSources"] !== undefined ? data["benchmarksSources"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BenchmarksSourceMetadata(item))) : undefined,
  };
}

/**
 * Response message for CampaignDraftService.ListCampaignDraftAsyncErrors.
 */
export interface GoogleAdsSearchads360V23Services__ListCampaignDraftAsyncErrorsResponse {
  /**
   * Details of the errors when performing the asynchronous operation.
   */
  errors?: GoogleRpc__Status[];
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
}

/**
 * Response message for fetching all custom columns associated with a customer.
 */
export interface GoogleAdsSearchads360V23Services__ListCustomColumnsResponse {
  /**
   * The CustomColumns owned by the provided customer.
   */
  customColumns?: GoogleAdsSearchads360V23Resources__CustomColumn[];
}

/**
 * Response message for ExperimentService.ListExperimentAsyncErrors.
 */
export interface GoogleAdsSearchads360V23Services__ListExperimentAsyncErrorsResponse {
  /**
   * details of the errors when performing the asynchronous operation.
   */
  errors?: GoogleRpc__Status[];
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
}

/**
 * Request message for AudienceInsightsService.ListInsightsEligibleDates.
 */
export interface GoogleAdsSearchads360V23Services__ListInsightsEligibleDatesRequest {
  /**
   * Optional. Additional information on the application issuing the request.
   */
  insightsApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * Response message for AudienceInsightsService.ListInsightsEligibleDates.
 */
export interface GoogleAdsSearchads360V23Services__ListInsightsEligibleDatesResponse {
  /**
   * The months for which AudienceInsights data is currently available, each
   * represented as a string in the form "YYYY-MM".
   */
  dataMonths?: string[];
  /**
   * The actual dates covered by the "last 30 days" date range that will be
   * used implicitly for
   * AudienceInsightsService.GenerateAudienceCompositionInsights requests that
   * have no data_month set.
   */
  lastThirtyDays?: GoogleAdsSearchads360V23Common__DateRange;
}

/**
 * Response message for InvoiceService.ListInvoices.
 */
export interface GoogleAdsSearchads360V23Services__ListInvoicesResponse {
  /**
   * The list of invoices that match the billing setup and time period.
   */
  invoices?: GoogleAdsSearchads360V23Resources__Invoice[];
}

/**
 * Response message for PaymentsAccountService.ListPaymentsAccounts.
 */
export interface GoogleAdsSearchads360V23Services__ListPaymentsAccountsResponse {
  /**
   * The list of accessible payments accounts.
   */
  paymentsAccounts?: GoogleAdsSearchads360V23Resources__PaymentsAccount[];
}

/**
 * Request message for ReachPlanService.ListPlannableLocations.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableLocationsRequest {
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * The list of plannable locations.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableLocationsResponse {
  /**
   * The list of locations available for planning. See
   * https://developers.google.com/google-ads/api/reference/data/geotargets for
   * sample locations.
   */
  plannableLocations?: GoogleAdsSearchads360V23Services__PlannableLocation[];
}

function serializeGoogleAdsSearchads360V23Services__ListPlannableLocationsResponse(data: any): GoogleAdsSearchads360V23Services__ListPlannableLocationsResponse {
  return {
    ...data,
    plannableLocations: data["plannableLocations"] !== undefined ? data["plannableLocations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__PlannableLocation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ListPlannableLocationsResponse(data: any): GoogleAdsSearchads360V23Services__ListPlannableLocationsResponse {
  return {
    ...data,
    plannableLocations: data["plannableLocations"] !== undefined ? data["plannableLocations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__PlannableLocation(item))) : undefined,
  };
}

/**
 * Request to list available products in a given location.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableProductsRequest {
  /**
   * Required. The ID of the selected location for planning. To list the
   * available plannable location IDs use
   * ReachPlanService.ListPlannableLocations.
   */
  plannableLocationId?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * A response with all available products.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableProductsResponse {
  /**
   * The list of products available for planning and related targeting
   * metadata.
   */
  productMetadata?: GoogleAdsSearchads360V23Services__ProductMetadata[];
}

function serializeGoogleAdsSearchads360V23Services__ListPlannableProductsResponse(data: any): GoogleAdsSearchads360V23Services__ListPlannableProductsResponse {
  return {
    ...data,
    productMetadata: data["productMetadata"] !== undefined ? data["productMetadata"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ProductMetadata(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ListPlannableProductsResponse(data: any): GoogleAdsSearchads360V23Services__ListPlannableProductsResponse {
  return {
    ...data,
    productMetadata: data["productMetadata"] !== undefined ? data["productMetadata"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ProductMetadata(item))) : undefined,
  };
}

/**
 * Request message for ReachPlanService.ListPlannableUserInterests.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableUserInterestsRequest {
  /**
   * Required. The ID of the customer.
   */
  customerId?: string;
  /**
   * A filter by user interest name. If set, only user interests with a name
   * containing the literal string (case insensitive) in the filter will be
   * returned. Maximum length is 200 characters.
   */
  nameQuery?: string;
  /**
   * A filter by user interest path. If set, only user interests with a path
   * containing the literal string (case insensitive) in the filter will be
   * returned. Maximum length is 200 characters.
   */
  pathQuery?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
  /**
   * Optional. A filter by user interest type. If set, only user interests with
   * a type listed in the filter will be returned. If not set, user interests of
   * all supported types will be returned. Supported user interest types are
   * AFFINITY and IN_MARKET. Each type must be specified at most once.
   */
  userInterestTaxonomyTypes?:  | "UNSPECIFIED" | "UNKNOWN" | "AFFINITY" | "IN_MARKET" | "MOBILE_APP_INSTALL_USER" | "VERTICAL_GEO" | "NEW_SMART_PHONE_USER"[];
}

/**
 * Response message for ReachPlanService.ListPlannableUserInterests.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableUserInterestsResponse {
  /**
   * The list of plannable user interests.
   */
  plannableUserInterests?: GoogleAdsSearchads360V23Services__PlannableUserInterest[];
}

/**
 * Request message for ReachPlanService.ListPlannableUserLists that lists the
 * available user lists for a customer.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableUserListsRequest {
  /**
   * Required. The ID of the customer.
   */
  customerId?: string;
  /**
   * The name of the customer being planned for. This is a user-defined value.
   */
  customerReachGroup?: string;
  /**
   * Optional. Additional information on the application issuing the request.
   */
  reachApplicationInfo?: GoogleAdsSearchads360V23Common__AdditionalApplicationInfo;
}

/**
 * A response with all available user lists with their plannable status.
 */
export interface GoogleAdsSearchads360V23Services__ListPlannableUserListsResponse {
  /**
   * The list of user lists available for planning and related targeting
   * metadata.
   */
  plannableUserLists?: GoogleAdsSearchads360V23Services__PlannableUserList[];
}

/**
 * Manual CPC Bidding Strategy.
 */
export interface GoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy {
  /**
   * Campaign level budget in micros. If set, a minimum value is enforced for
   * the local currency used in the campaign. An error will occur showing the
   * minimum value if this field is set too low.
   */
  dailyBudgetMicros?: bigint;
  /**
   * Required. A bid in micros to be applied to ad groups within the campaign
   * for a manual CPC bidding strategy.
   */
  maxCpcBidMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy {
  return {
    ...data,
    dailyBudgetMicros: data["dailyBudgetMicros"] !== undefined ? String(data["dailyBudgetMicros"]) : undefined,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? String(data["maxCpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy {
  return {
    ...data,
    dailyBudgetMicros: data["dailyBudgetMicros"] !== undefined ? BigInt(data["dailyBudgetMicros"]) : undefined,
    maxCpcBidMicros: data["maxCpcBidMicros"] !== undefined ? BigInt(data["maxCpcBidMicros"]) : undefined,
  };
}

/**
 * Maximize Clicks Bidding Strategy.
 */
export interface GoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy {
  /**
   * Required. The daily target spend in micros to be used for estimation. A
   * minimum value is enforced for the local currency used in the campaign. An
   * error will occur showing the minimum value if this field is set too low.
   */
  dailyTargetSpendMicros?: bigint;
  /**
   * Ceiling on max CPC bids in micros.
   */
  maxCpcBidCeilingMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy {
  return {
    ...data,
    dailyTargetSpendMicros: data["dailyTargetSpendMicros"] !== undefined ? String(data["dailyTargetSpendMicros"]) : undefined,
    maxCpcBidCeilingMicros: data["maxCpcBidCeilingMicros"] !== undefined ? String(data["maxCpcBidCeilingMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy {
  return {
    ...data,
    dailyTargetSpendMicros: data["dailyTargetSpendMicros"] !== undefined ? BigInt(data["dailyTargetSpendMicros"]) : undefined,
    maxCpcBidCeilingMicros: data["maxCpcBidCeilingMicros"] !== undefined ? BigInt(data["maxCpcBidCeilingMicros"]) : undefined,
  };
}

/**
 * Maximize Conversions Bidding Strategy.
 */
export interface GoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy {
  /**
   * Required. The daily target spend in micros to be used for estimation. This
   * value must be greater than zero.
   */
  dailyTargetSpendMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy {
  return {
    ...data,
    dailyTargetSpendMicros: data["dailyTargetSpendMicros"] !== undefined ? String(data["dailyTargetSpendMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy(data: any): GoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy {
  return {
    ...data,
    dailyTargetSpendMicros: data["dailyTargetSpendMicros"] !== undefined ? BigInt(data["dailyTargetSpendMicros"]) : undefined,
  };
}

/**
 * Indicates the attributes of metrics.
 */
export interface GoogleAdsSearchads360V23Services__MetricAttributes {
  /**
   * The attributes of the metric.
   */
  attributes?: GoogleAdsSearchads360V23Services_MetricAttributes_Attribute[];
  /**
   * The name of the metric.
   */
  name?: string;
}

/**
 * All metrics returned against a criteria.
 */
export interface GoogleAdsSearchads360V23Services__Metrics {
  /**
   * Average rate metrics calculated by dividing one metric by another.
   */
  averageRateMetrics?: GoogleAdsSearchads360V23Services__RateMetrics;
}

/**
 * Request message for CustomerManagerLinkService.MoveManagerLink.
 */
export interface GoogleAdsSearchads360V23Services__MoveManagerLinkRequest {
  /**
   * Required. The resource name of the new manager customer that the client
   * wants to move to. Customer resource names have the format:
   * "customers/{customer_id}"
   */
  newManager?: string;
  /**
   * Required. The resource name of the previous CustomerManagerLink. The
   * resource name has the form:
   * `customers/{customer_id}/customerManagerLinks/{manager_customer_id}~{manager_link_id}`
   */
  previousCustomerManagerLink?: string;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a CustomerManagerLink moveManagerLink.
 */
export interface GoogleAdsSearchads360V23Services__MoveManagerLinkResponse {
  /**
   * Returned for successful operations. Represents a CustomerManagerLink
   * resource of the newly created link between client customer and new manager
   * customer.
   */
  resourceName?: string;
}

/**
 * Request message for
 * AccountBudgetProposalService.MutateAccountBudgetProposal.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest {
  /**
   * Required. The operation to perform on an individual account-level budget
   * proposal.
   */
  operation?: GoogleAdsSearchads360V23Services__AccountBudgetProposalOperation;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest(data: any): GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AccountBudgetProposalOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest(data: any): GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AccountBudgetProposalOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for account-level budget mutate operations.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalResponse {
  /**
   * The result of the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalResult;
}

/**
 * The result for the account budget proposal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountBudgetProposalResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AccountLinkService.MutateAccountLink.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountLinkRequest {
  /**
   * Required. The operation to perform on the link.
   */
  operation?: GoogleAdsSearchads360V23Services__AccountLinkOperation;
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAccountLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateAccountLinkRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AccountLinkOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAccountLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateAccountLinkRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AccountLinkOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for account link mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountLinkResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * Result for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateAccountLinkResult;
}

/**
 * The result for the account link mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAccountLinkResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for an ad group ad label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AdGroupAdLabelService.MutateAdGroupAdLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelsRequest {
  /**
   * Required. The list of operations to perform on ad group ad labels.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupAdLabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group ad labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelResult[];
}

/**
 * The result for the ad mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdResult {
  /**
   * The mutated ad group ad with only mutable fields after mutate. The field
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupAd?: GoogleAdsSearchads360V23Resources__AdGroupAd;
  /**
   * The resource name returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdResult {
  return {
    ...data,
    adGroupAd: data["adGroupAd"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["adGroupAd"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdResult {
  return {
    ...data,
    adGroupAd: data["adGroupAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["adGroupAd"]) : undefined,
  };
}

/**
 * Request message for AdGroupAdService.MutateAdGroupAds.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest {
  /**
   * Required. The list of operations to perform on individual ads.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupAdOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad group ad mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupAdResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAdsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(item))) : undefined,
  };
}

/**
 * The result for the ad group asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetResult {
  /**
   * The mutated ad group asset with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupAsset?: GoogleAdsSearchads360V23Resources__AdGroupAsset;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the ad group asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetResult {
  /**
   * The mutated ad group asset set with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupAssetSet?: GoogleAdsSearchads360V23Resources__AdGroupAssetSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AdGroupAssetSetService.MutateAdGroupAssetSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetsRequest {
  /**
   * Required. The list of operations to perform on individual ad group asset
   * sets.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupAssetSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (e.g. auth errors),
   * we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupAssetSetResult[];
}

/**
 * Request message for AdGroupAssetService.MutateAdGroupAssets.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest {
  /**
   * Required. The list of operations to perform on individual ad group assets.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupAssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad group asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupAssetResult[];
}

/**
 * The result for the criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult {
  /**
   * The mutated ad group bid modifier with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupBidModifier?: GoogleAdsSearchads360V23Resources__AdGroupBidModifier;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult {
  return {
    ...data,
    adGroupBidModifier: data["adGroupBidModifier"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["adGroupBidModifier"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult {
  return {
    ...data,
    adGroupBidModifier: data["adGroupBidModifier"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["adGroupBidModifier"]) : undefined,
  };
}

/**
 * Request message for AdGroupBidModifierService.MutateAdGroupBidModifiers.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest {
  /**
   * Required. The list of operations to perform on individual ad group bid
   * modifiers.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupBidModifierOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(item))) : undefined,
  };
}

/**
 * Response message for ad group bid modifiers mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupBidModifiersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(item))) : undefined,
  };
}

/**
 * Request message for AdGroupCriterionService.MutateAdGroupCriteria.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest {
  /**
   * Required. The list of operations to perform on individual criteria.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupCriterionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad group criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(item))) : undefined,
  };
}

/**
 * The result for the ad group criterion customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizerResult {
  /**
   * The mutated AdGroupCriterionCustomizer with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  adGroupCriterionCustomizer?: GoogleAdsSearchads360V23Resources__AdGroupCriterionCustomizer;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * AdGroupCriterionCustomizerService.MutateAdGroupCriterionCustomizers.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizersRequest {
  /**
   * Required. The list of operations to perform on individual ad group
   * criterion customizers.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupCriterionCustomizerOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group criterion customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizerResult[];
}

/**
 * The result for an ad group criterion label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * AdGroupCriterionLabelService.MutateAdGroupCriterionLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelsRequest {
  /**
   * Required. The list of operations to perform on ad group criterion labels.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupCriterionLabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group criterion labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelResult[];
}

/**
 * The result for the criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult {
  /**
   * The mutated ad group criterion with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupCriterion?: GoogleAdsSearchads360V23Resources__AdGroupCriterion;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult {
  return {
    ...data,
    adGroupCriterion: data["adGroupCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["adGroupCriterion"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult {
  return {
    ...data,
    adGroupCriterion: data["adGroupCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["adGroupCriterion"]) : undefined,
  };
}

/**
 * The result for the ad group customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCustomizerResult {
  /**
   * The mutated AdGroupCustomizer with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adGroupCustomizer?: GoogleAdsSearchads360V23Resources__AdGroupCustomizer;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AdGroupCustomizerService.MutateAdGroupCustomizers.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCustomizersRequest {
  /**
   * Required. The list of operations to perform on individual ad group
   * customizers.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupCustomizerOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupCustomizersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupCustomizerResult[];
}

/**
 * The result for an ad group label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupLabelResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AdGroupLabelService.MutateAdGroupLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupLabelsRequest {
  /**
   * Required. The list of operations to perform on ad group labels.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupLabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an ad group labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupLabelResult[];
}

/**
 * The result for the ad group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupResult {
  /**
   * The mutated ad group with only mutable fields after mutate. The field will
   * only be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  adGroup?: GoogleAdsSearchads360V23Resources__AdGroup;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupResult {
  return {
    ...data,
    adGroup: data["adGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroup(data["adGroup"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupResult {
  return {
    ...data,
    adGroup: data["adGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroup(data["adGroup"]) : undefined,
  };
}

/**
 * Request message for AdGroupService.MutateAdGroups.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupsRequest {
  /**
   * Required. The list of operations to perform on individual ad groups.
   */
  operations?: GoogleAdsSearchads360V23Services__AdGroupOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdGroupOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdGroupOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdGroupsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdGroupResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdGroupsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdGroupsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdGroupsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(item))) : undefined,
  };
}

/**
 * The result for the ad parameter mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdParameterResult {
  /**
   * The mutated AdParameter with only mutable fields after mutate. The field
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  adParameter?: GoogleAdsSearchads360V23Resources__AdParameter;
  /**
   * The resource name returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(data: any): GoogleAdsSearchads360V23Services__MutateAdParameterResult {
  return {
    ...data,
    adParameter: data["adParameter"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdParameter(data["adParameter"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(data: any): GoogleAdsSearchads360V23Services__MutateAdParameterResult {
  return {
    ...data,
    adParameter: data["adParameter"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdParameter(data["adParameter"]) : undefined,
  };
}

/**
 * Request message for AdParameterService.MutateAdParameters
 */
export interface GoogleAdsSearchads360V23Services__MutateAdParametersRequest {
  /**
   * Required. The list of operations to perform on individual ad parameters.
   */
  operations?: GoogleAdsSearchads360V23Services__AdParameterOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdParametersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdParametersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdParameterOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdParametersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdParametersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdParameterOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad parameter mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdParametersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdParameterResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdParametersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdParametersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdParametersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdParametersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(item))) : undefined,
  };
}

/**
 * The result for the ad mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdResult {
  /**
   * The mutated ad with only mutable fields after mutate. The field will only
   * be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  ad?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * The resource name returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdResult(data: any): GoogleAdsSearchads360V23Services__MutateAdResult {
  return {
    ...data,
    ad: data["ad"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdResult(data: any): GoogleAdsSearchads360V23Services__MutateAdResult {
  return {
    ...data,
    ad: data["ad"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

/**
 * Request message for AdService.MutateAds.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdsRequest {
  /**
   * Required. The list of operations to perform on individual ads.
   */
  operations?: GoogleAdsSearchads360V23Services__AdOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAdsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AdOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAdsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AdOperation(item))) : undefined,
  };
}

/**
 * Response message for an ad mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAdsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAdResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAdsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAdResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAdsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAdsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAdResult(item))) : undefined,
  };
}

/**
 * The result for the asset group asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupAssetResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AssetGroupAssetService.MutateAssetGroupAssets.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest {
  /**
   * Required. The list of operations to perform on individual asset group
   * assets.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetGroupAssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(item))) : undefined,
  };
}

/**
 * Response message for an asset group asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetGroupAssetResult[];
}

/**
 * The result for the asset group listing group filter mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult {
  /**
   * The mutated AssetGroupListingGroupFilter with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  assetGroupListingGroupFilter?: GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult {
  return {
    ...data,
    assetGroupListingGroupFilter: data["assetGroupListingGroupFilter"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["assetGroupListingGroupFilter"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult {
  return {
    ...data,
    assetGroupListingGroupFilter: data["assetGroupListingGroupFilter"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["assetGroupListingGroupFilter"]) : undefined,
  };
}

/**
 * Request message for
 * AssetGroupListingGroupFilterService.MutateAssetGroupListingGroupFilters.
 * partial_failure is not supported because the tree needs to be validated
 * together.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest {
  /**
   * Required. The list of operations to perform on individual asset group
   * listing group filters.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation[];
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(item))) : undefined,
  };
}

/**
 * Response message for an asset group listing group filter mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFiltersResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(item))) : undefined,
  };
}

/**
 * The result for the asset group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the asset group signal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupSignalResult {
  /**
   * The mutated AssetGroupSignal with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  assetGroupSignal?: GoogleAdsSearchads360V23Resources__AssetGroupSignal;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AssetGroupSignalService.MutateAssetGroupSignals.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupSignalsRequest {
  /**
   * Required. The list of operations to perform on individual asset group
   * signals.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetGroupSignalOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an asset group signal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupSignalsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetGroupSignalResult[];
}

/**
 * Request message for AssetGroupService.MutateAssetGroups.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupsRequest {
  /**
   * Required. The list of operations to perform on individual asset groups.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetGroupOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AssetGroupOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AssetGroupOperation(item))) : undefined,
  };
}

/**
 * Response message for an asset group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetGroupsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetGroupResult[];
}

/**
 * The result for the asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetResult {
  /**
   * The mutated asset with only mutable fields after mutate. The field will
   * only be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  asset?: GoogleAdsSearchads360V23Resources__Asset;
  /**
   * The resource name returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetResult {
  return {
    ...data,
    asset: data["asset"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Asset(data["asset"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetResult {
  return {
    ...data,
    asset: data["asset"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Asset(data["asset"]) : undefined,
  };
}

/**
 * The result for the asset set asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetAssetResult {
  /**
   * The mutated asset set asset with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  assetSetAsset?: GoogleAdsSearchads360V23Resources__AssetSetAsset;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AssetSetAssetService.MutateAssetSetAssets.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetAssetsRequest {
  /**
   * Required. The list of operations to perform on individual asset set
   * assets.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetSetAssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for an asset set asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetSetAssetResult[];
}

/**
 * The result for the asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetResult {
  /**
   * The mutated asset set with only mutable fields after mutate. The field
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  assetSet?: GoogleAdsSearchads360V23Resources__AssetSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetResult {
  return {
    ...data,
    assetSet: data["assetSet"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetSet(data["assetSet"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetResult {
  return {
    ...data,
    assetSet: data["assetSet"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetSet(data["assetSet"]) : undefined,
  };
}

/**
 * Request message for AssetSetService.MutateAssetSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetsRequest {
  /**
   * Required. The list of operations to perform on individual asset sets.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AssetSetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AssetSetOperation(item))) : undefined,
  };
}

/**
 * Response message for an asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetSetResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetSetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetSetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetSetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(item))) : undefined,
  };
}

/**
 * Request message for AssetService.MutateAssets
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetsRequest {
  /**
   * Required. The list of operations to perform on individual assets.
   */
  operations?: GoogleAdsSearchads360V23Services__AssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AssetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AssetOperation(item))) : undefined,
  };
}

/**
 * Response message for an asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAssetResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateAssetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateAssetResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAssetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateAssetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateAssetResult(item))) : undefined,
  };
}

/**
 * The result for the audience mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAudienceResult {
  /**
   * The mutated Audience with only mutable fields after mutate. The field will
   * only be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  audience?: GoogleAdsSearchads360V23Resources__Audience;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for AudienceService.MutateAudiences.
 */
export interface GoogleAdsSearchads360V23Services__MutateAudiencesRequest {
  /**
   * Required. The list of operations to perform on individual audiences.
   */
  operations?: GoogleAdsSearchads360V23Services__AudienceOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateAudiencesRequest(data: any): GoogleAdsSearchads360V23Services__MutateAudiencesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__AudienceOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateAudiencesRequest(data: any): GoogleAdsSearchads360V23Services__MutateAudiencesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__AudienceOperation(item))) : undefined,
  };
}

/**
 * Response message for an audience mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateAudiencesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateAudienceResult[];
}

/**
 * Request message for BatchJobService.MutateBatchJob.
 */
export interface GoogleAdsSearchads360V23Services__MutateBatchJobRequest {
  /**
   * Required. The operation to perform on an individual batch job.
   */
  operation?: GoogleAdsSearchads360V23Services__BatchJobOperation;
}

/**
 * Response message for BatchJobService.MutateBatchJob.
 */
export interface GoogleAdsSearchads360V23Services__MutateBatchJobResponse {
  /**
   * The result for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateBatchJobResult;
}

/**
 * The result for the batch job mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBatchJobResult {
  /**
   * The resource name of the batch job.
   */
  resourceName?: string;
}

/**
 * Request message for BiddingDataExclusionService.MutateBiddingDataExclusions.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest {
  /**
   * Required. The list of operations to perform on individual data exclusions.
   */
  operations?: GoogleAdsSearchads360V23Services__BiddingDataExclusionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(item))) : undefined,
  };
}

/**
 * Response message for data exclusions mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResult[];
}

/**
 * The result for the data exclusion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResult {
  /**
   * The mutated bidding data exclusion with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  biddingDataExclusion?: GoogleAdsSearchads360V23Resources__BiddingDataExclusion;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * BiddingSeasonalityAdjustmentService.MutateBiddingSeasonalityAdjustments.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest {
  /**
   * Required. The list of operations to perform on individual seasonality
   * adjustments.
   */
  operations?: GoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(item))) : undefined,
  };
}

/**
 * Response message for seasonality adjustments mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResult[];
}

/**
 * The result for the seasonality adjustment mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResult {
  /**
   * The mutated bidding seasonality adjustment with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  biddingSeasonalityAdjustment?: GoogleAdsSearchads360V23Resources__BiddingSeasonalityAdjustment;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for BiddingStrategyService.MutateBiddingStrategies.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest {
  /**
   * Required. The list of operations to perform on individual bidding
   * strategies.
   */
  operations?: GoogleAdsSearchads360V23Services__BiddingStrategyOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategiesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(item))) : undefined,
  };
}

/**
 * Response message for bidding strategy mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateBiddingStrategyResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategiesResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(item))) : undefined,
  };
}

/**
 * The result for the bidding strategy mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBiddingStrategyResult {
  /**
   * The mutated bidding strategy with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  biddingStrategy?: GoogleAdsSearchads360V23Resources__BiddingStrategy;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategyResult {
  return {
    ...data,
    biddingStrategy: data["biddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["biddingStrategy"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(data: any): GoogleAdsSearchads360V23Services__MutateBiddingStrategyResult {
  return {
    ...data,
    biddingStrategy: data["biddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["biddingStrategy"]) : undefined,
  };
}

/**
 * Request message for billing setup mutate operations.
 */
export interface GoogleAdsSearchads360V23Services__MutateBillingSetupRequest {
  /**
   * Required. The operation to perform.
   */
  operation?: GoogleAdsSearchads360V23Services__BillingSetupOperation;
}

/**
 * Response message for a billing setup operation.
 */
export interface GoogleAdsSearchads360V23Services__MutateBillingSetupResponse {
  /**
   * A result that identifies the resource affected by the mutate request.
   */
  result?: GoogleAdsSearchads360V23Services__MutateBillingSetupResult;
}

/**
 * Result for a single billing setup mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateBillingSetupResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the campaign asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetResult {
  /**
   * The mutated campaign asset with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignAsset?: GoogleAdsSearchads360V23Resources__CampaignAsset;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the campaign asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetSetResult {
  /**
   * The mutated campaign asset set with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignAssetSet?: GoogleAdsSearchads360V23Resources__CampaignAssetSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignAssetSetService.MutateCampaignAssetSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetSetsRequest {
  /**
   * Required. The list of operations to perform on individual campaign asset
   * sets.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignAssetSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a campaign asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignAssetSetResult[];
}

/**
 * Request message for CampaignAssetService.MutateCampaignAssets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest {
  /**
   * Required. The list of operations to perform on individual campaign assets.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignAssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(item))) : undefined,
  };
}

/**
 * Response message for a campaign asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignAssetResult[];
}

/**
 * The result for the criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBidModifierResult {
  /**
   * The mutated campaign bid modifier with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignBidModifier?: GoogleAdsSearchads360V23Resources__CampaignBidModifier;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignBidModifierService.MutateCampaignBidModifiers.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest {
  /**
   * Required. The list of operations to perform on individual campaign bid
   * modifiers.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignBidModifierOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign bid modifiers mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBidModifiersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignBidModifierResult[];
}

/**
 * The result for the campaign budget mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBudgetResult {
  /**
   * The mutated campaign budget with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignBudget?: GoogleAdsSearchads360V23Resources__CampaignBudget;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetResult {
  return {
    ...data,
    campaignBudget: data["campaignBudget"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["campaignBudget"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetResult {
  return {
    ...data,
    campaignBudget: data["campaignBudget"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["campaignBudget"]) : undefined,
  };
}

/**
 * Request message for CampaignBudgetService.MutateCampaignBudgets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest {
  /**
   * Required. The list of operations to perform on individual campaign
   * budgets.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignBudgetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign budget mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignBudgetResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignBudgetsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(item))) : undefined,
  };
}

/**
 * The result for the campaign conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CampaignConversionGoalService.MutateCampaignConversionGoals.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest {
  /**
   * Required. The list of operations to perform on individual campaign
   * conversion goal.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignConversionGoalOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(item))) : undefined,
  };
}

/**
 * Response message for a campaign conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalsResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalResult[];
}

/**
 * Request message for CampaignCriterionService.MutateCampaignCriteria.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest {
  /**
   * Required. The list of operations to perform on individual criteria.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignCriterionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignCriterionResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(item))) : undefined,
  };
}

/**
 * The result for the criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCriterionResult {
  /**
   * The mutated campaign criterion with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignCriterion?: GoogleAdsSearchads360V23Resources__CampaignCriterion;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriterionResult {
  return {
    ...data,
    campaignCriterion: data["campaignCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["campaignCriterion"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignCriterionResult {
  return {
    ...data,
    campaignCriterion: data["campaignCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["campaignCriterion"]) : undefined,
  };
}

/**
 * The result for the campaign customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCustomizerResult {
  /**
   * The mutated CampaignCustomizer with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignCustomizer?: GoogleAdsSearchads360V23Resources__CampaignCustomizer;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignCustomizerService.MutateCampaignCustomizers.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCustomizersRequest {
  /**
   * Required. The list of operations to perform on individual campaign
   * customizers.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignCustomizerOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a campaign customizer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignCustomizersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignCustomizerResult[];
}

/**
 * The result for the campaign draft mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignDraftResult {
  /**
   * The mutated campaign draft with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignDraft?: GoogleAdsSearchads360V23Resources__CampaignDraft;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignDraftService.MutateCampaignDrafts.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest {
  /**
   * Required. The list of operations to perform on individual campaign drafts.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignDraftOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignDraftsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign draft mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignDraftsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignDraftResult[];
}

/**
 * The result for the campaign goal config mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignGoalConfigService.MutateCampaignGoalConfigs.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest {
  /**
   * Required. The list of operations to perform on the campaign goal configs.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignGoalConfigOperation[];
  /**
   * Optional. If true, successful operations will be carried out and invalid
   * operations will return errors. If false, all operations will be carried out
   * in one transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * Optional. If true, the request is validated but not executed. Only errors
   * are returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignGoalConfigOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignGoalConfigOperation(item))) : undefined,
  };
}

/**
 * Response message for a campaign goal config mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignGoalConfigResult[];
}

/**
 * The result for the campaign group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGroupResult {
  /**
   * The mutated campaign group with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignGroup?: GoogleAdsSearchads360V23Resources__CampaignGroup;
  /**
   * Required. Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignGroupService.MutateCampaignGroups.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest {
  /**
   * Required. The list of operations to perform on individual campaign groups.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignGroupOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignGroupsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignGroupResult[];
}

/**
 * The result for a campaign label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignLabelResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignLabelService.MutateCampaignLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignLabelsRequest {
  /**
   * Required. The list of operations to perform on campaign-label
   * relationships.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignLabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a campaign labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignLabelResult[];
}

/**
 * The result for the campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignResult {
  /**
   * The mutated campaign with only mutable fields after mutate. The field will
   * only be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  campaign?: GoogleAdsSearchads360V23Resources__Campaign;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignResult {
  return {
    ...data,
    campaign: data["campaign"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Campaign(data["campaign"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignResult(data: any): GoogleAdsSearchads360V23Services__MutateCampaignResult {
  return {
    ...data,
    campaign: data["campaign"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Campaign(data["campaign"]) : undefined,
  };
}

/**
 * The result for the campaign shared set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignSharedSetResult {
  /**
   * The mutated campaign shared set with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  campaignSharedSet?: GoogleAdsSearchads360V23Resources__CampaignSharedSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CampaignSharedSetService.MutateCampaignSharedSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignSharedSetsRequest {
  /**
   * Required. The list of operations to perform on individual campaign shared
   * sets.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignSharedSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a campaign shared set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignSharedSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignSharedSetResult[];
}

/**
 * Request message for CampaignService.MutateCampaigns.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignsRequest {
  /**
   * Required. The list of operations to perform on individual campaigns.
   */
  operations?: GoogleAdsSearchads360V23Services__CampaignOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CampaignOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCampaignsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CampaignOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCampaignsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCampaignResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateCampaignsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateCampaignResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCampaignsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCampaignsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateCampaignResult(item))) : undefined,
  };
}

/**
 * The result for the conversion action mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionActionResult {
  /**
   * The mutated conversion action with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  conversionAction?: GoogleAdsSearchads360V23Resources__ConversionAction;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionResult {
  return {
    ...data,
    conversionAction: data["conversionAction"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ConversionAction(data["conversionAction"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionResult {
  return {
    ...data,
    conversionAction: data["conversionAction"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ConversionAction(data["conversionAction"]) : undefined,
  };
}

/**
 * Request message for ConversionActionService.MutateConversionActions.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionActionsRequest {
  /**
   * Required. The list of operations to perform on individual conversion
   * actions.
   */
  operations?: GoogleAdsSearchads360V23Services__ConversionActionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionActionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionActionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionActionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionActionOperation(item))) : undefined,
  };
}

/**
 * Response message for ConversionActionService.MutateConversionActions.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionActionsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateConversionActionResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionActionsResponse(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionActionsResponse(data: any): GoogleAdsSearchads360V23Services__MutateConversionActionsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(item))) : undefined,
  };
}

/**
 * The result for the conversion custom variable mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionCustomVariableResult {
  /**
   * The mutated conversion custom variable with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  conversionCustomVariable?: GoogleAdsSearchads360V23Resources__ConversionCustomVariable;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ConversionCustomVariableService.MutateConversionCustomVariables.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest {
  /**
   * Required. The list of operations to perform on individual conversion
   * custom variables.
   */
  operations?: GoogleAdsSearchads360V23Services__ConversionCustomVariableOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(item))) : undefined,
  };
}

/**
 * Response message for
 * ConversionCustomVariableService.MutateConversionCustomVariables.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionCustomVariablesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateConversionCustomVariableResult[];
}

/**
 * The result for the conversion goal campaign config mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigResult {
  /**
   * The mutated ConversionGoalCampaignConfig with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  conversionGoalCampaignConfig?: GoogleAdsSearchads360V23Resources__ConversionGoalCampaignConfig;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ConversionGoalCampaignConfigService.MutateConversionGoalCampaignConfigs.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest {
  /**
   * Required. The list of operations to perform on individual conversion goal
   * campaign config.
   */
  operations?: GoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation[];
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(item))) : undefined,
  };
}

/**
 * Response message for a conversion goal campaign config mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigsResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigResult[];
}

/**
 * The result for the conversion value rule mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRuleResult {
  /**
   * The mutated conversion value rule with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  conversionValueRule?: GoogleAdsSearchads360V23Resources__ConversionValueRule;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the conversion value rule set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetResult {
  /**
   * The mutated conversion value rule set with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  conversionValueRuleSet?: GoogleAdsSearchads360V23Resources__ConversionValueRuleSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ConversionValueRuleSetService.MutateConversionValueRuleSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest {
  /**
   * Required. The list of operations to perform on individual conversion value
   * rule sets.
   */
  operations?: GoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(item))) : undefined,
  };
}

/**
 * Response message for
 * ConversionValueRuleSetService.MutateConversionValueRuleSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetResult[];
}

/**
 * Request message for ConversionValueRuleService.MutateConversionValueRules.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest {
  /**
   * Required. The list of operations to perform on individual conversion value
   * rules.
   */
  operations?: GoogleAdsSearchads360V23Services__ConversionValueRuleOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest(data: any): GoogleAdsSearchads360V23Services__MutateConversionValueRulesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(item))) : undefined,
  };
}

/**
 * Response message for ConversionValueRuleService.MutateConversionValueRules.
 */
export interface GoogleAdsSearchads360V23Services__MutateConversionValueRulesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateConversionValueRuleResult[];
}

/**
 * The result for the custom audience mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomAudienceResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomAudienceService.MutateCustomAudiences.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest {
  /**
   * Required. The list of operations to perform on individual custom
   * audiences.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomAudienceOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomAudienceOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomAudiencesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomAudienceOperation(item))) : undefined,
  };
}

/**
 * Response message for custom audience mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomAudiencesResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomAudienceResult[];
}

/**
 * The result for the custom conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult {
  /**
   * The mutated CustomConversionGoal with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customConversionGoal?: GoogleAdsSearchads360V23Resources__CustomConversionGoal;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult {
  return {
    ...data,
    customConversionGoal: data["customConversionGoal"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["customConversionGoal"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult {
  return {
    ...data,
    customConversionGoal: data["customConversionGoal"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["customConversionGoal"]) : undefined,
  };
}

/**
 * Request message for CustomConversionGoalService.MutateCustomConversionGoals.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest {
  /**
   * Required. The list of operations to perform on individual custom
   * conversion goal.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomConversionGoalOperation[];
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(item))) : undefined,
  };
}

/**
 * Response message for a custom conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse(data: any): GoogleAdsSearchads360V23Services__MutateCustomConversionGoalsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(item))) : undefined,
  };
}

/**
 * The result for the customer asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetResult {
  /**
   * The mutated customer asset with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customerAsset?: GoogleAdsSearchads360V23Resources__CustomerAsset;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the customer asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetSetResult {
  /**
   * The mutated customer asset set with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customerAssetSet?: GoogleAdsSearchads360V23Resources__CustomerAssetSet;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomerAssetSetService.MutateCustomerAssetSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetSetsRequest {
  /**
   * Required. The list of operations to perform on individual customer asset
   * sets.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerAssetSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a customer asset set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (e.g. auth errors),
   * we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerAssetSetResult[];
}

/**
 * Request message for CustomerAssetService.MutateCustomerAssets.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest {
  /**
   * Required. The list of operations to perform on individual customer assets.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerAssetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerAssetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(item))) : undefined,
  };
}

/**
 * Response message for a customer asset mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerAssetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerAssetResult[];
}

/**
 * Request message for CustomerClientLinkService.MutateCustomerClientLink.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest {
  /**
   * Required. The operation to perform on the individual CustomerClientLink.
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerClientLinkOperation;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerClientLinkOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerClientLinkRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerClientLinkOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for a CustomerClientLink mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerClientLinkResponse {
  /**
   * A result that identifies the resource affected by the mutate request.
   */
  result?: GoogleAdsSearchads360V23Services__MutateCustomerClientLinkResult;
}

/**
 * The result for a single customer client link mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerClientLinkResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the customer conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CustomerConversionGoalService.MutateCustomerConversionGoals.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest {
  /**
   * Required. The list of operations to perform on individual customer
   * conversion goal.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerConversionGoalOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(item))) : undefined,
  };
}

/**
 * Response message for a customer conversion goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalsResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalResult[];
}

/**
 * The result for the customizer attribute mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerCustomizerResult {
  /**
   * The mutated CustomerCustomizer with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customerCustomizer?: GoogleAdsSearchads360V23Resources__CustomerCustomizer;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomerCustomizerService.MutateCustomerCustomizers.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerCustomizersRequest {
  /**
   * Required. The list of operations to perform on individual customer
   * customizers.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerCustomizerOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a customizer attribute mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerCustomizersResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerCustomizerResult[];
}

/**
 * The result for a customer label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerLabelResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomerLabelService.MutateCustomerLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerLabelsRequest {
  /**
   * Required. The list of operations to perform on customer-label
   * relationships.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerLabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a customer labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerLabelResult[];
}

/**
 * Request message for CustomerManagerLinkService.MutateCustomerManagerLink.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest {
  /**
   * Required. The list of operations to perform on individual customer manager
   * links.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerManagerLinkOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomerManagerLinkOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomerManagerLinkOperation(item))) : undefined,
  };
}

/**
 * Response message for a CustomerManagerLink mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkResponse {
  /**
   * A result that identifies the resource affected by the mutate request.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkResult[];
}

/**
 * The result for the customer manager link mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerManagerLinkResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CustomerNegativeCriterionService.MutateCustomerNegativeCriteria.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaRequest {
  /**
   * Required. The list of operations to perform on individual criteria.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomerNegativeCriterionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for customer negative criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResult[];
}

/**
 * The result for the criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResult {
  /**
   * The mutated criterion with only mutable fields after mutate. The field
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customerNegativeCriterion?: GoogleAdsSearchads360V23Resources__CustomerNegativeCriterion;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomerService.MutateCustomer.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerRequest {
  /**
   * Required. The operation to perform on the customer
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerOperation;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for customer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerResponse {
  /**
   * Result for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateCustomerResult;
}

/**
 * The result for the customer mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerResult {
  /**
   * The mutated customer with only mutable fields after mutate. The fields
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customer?: GoogleAdsSearchads360V23Resources__Customer;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CustomerSkAdNetworkConversionValueSchemaService.MutateCustomerSkAdNetworkConversionValueSchema.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaRequest {
  /**
   * Optional. If true, enables returning warnings. Warnings return error
   * messages and error codes without blocking the execution of the mutate
   * operation.
   */
  enableWarnings?: boolean;
  /**
   * The operation to perform.
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerSkAdNetworkConversionValueSchemaOperation;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for MutateCustomerSkAdNetworkConversionValueSchema.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaResponse {
  /**
   * All results for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaResult;
  /**
   * Non blocking errors that provides schema validation failure details.
   * Returned only when enable_warnings = true.
   */
  warning?: GoogleRpc__Status;
}

/**
 * The result for the CustomerSkAdNetworkConversionValueSchema mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerSkAdNetworkConversionValueSchemaResult {
  /**
   * App ID of the SkanConversionValue modified.
   */
  appId?: string;
  /**
   * Resource name of the customer that was modified.
   */
  resourceName?: string;
}

/**
 * Request message for
 * CustomerUserAccessInvitationService.MutateCustomerUserAccessInvitation
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationRequest {
  /**
   * Required. The operation to perform on the access invitation
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerUserAccessInvitationOperation;
}

/**
 * Response message for access invitation mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationResponse {
  /**
   * Result for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationResult;
}

/**
 * The result for the access invitation mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessInvitationResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Mutate Request for CustomerUserAccessService.MutateCustomerUserAccess.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest {
  /**
   * Required. The operation to perform on the customer
   */
  operation?: GoogleAdsSearchads360V23Services__CustomerUserAccessOperation;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerUserAccessOperation(data["operation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomerUserAccessRequest {
  return {
    ...data,
    operation: data["operation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerUserAccessOperation(data["operation"]) : undefined,
  };
}

/**
 * Response message for customer user access mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessResponse {
  /**
   * Result for the mutate.
   */
  result?: GoogleAdsSearchads360V23Services__MutateCustomerUserAccessResult;
}

/**
 * The result for the customer user access mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomerUserAccessResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for the custom interest mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomInterestResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomInterestService.MutateCustomInterests.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomInterestsRequest {
  /**
   * Required. The list of operations to perform on individual custom
   * interests.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomInterestOperation[];
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomInterestsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomInterestsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomInterestOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomInterestsRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomInterestsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomInterestOperation(item))) : undefined,
  };
}

/**
 * Response message for custom interest mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomInterestsResponse {
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomInterestResult[];
}

/**
 * The result for the customizer attribute mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomizerAttributeResult {
  /**
   * The mutated CustomizerAttribute with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  customizerAttribute?: GoogleAdsSearchads360V23Resources__CustomizerAttribute;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for CustomizerAttributeService.MutateCustomizerAttributes.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest {
  /**
   * Required. The list of operations to perform on individual customizer
   * attributes.
   */
  operations?: GoogleAdsSearchads360V23Services__CustomizerAttributeOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest(data: any): GoogleAdsSearchads360V23Services__MutateCustomizerAttributesRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(item))) : undefined,
  };
}

/**
 * Response message for a customizer attribute mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateCustomizerAttributesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateCustomizerAttributeResult[];
}

/**
 * The result for the experiment arm mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentArmResult {
  /**
   * The mutated experiment arm with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  experimentArm?: GoogleAdsSearchads360V23Resources__ExperimentArm;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

function serializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmResult {
  return {
    ...data,
    experimentArm: data["experimentArm"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["experimentArm"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmResult {
  return {
    ...data,
    experimentArm: data["experimentArm"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["experimentArm"]) : undefined,
  };
}

/**
 * Request message for ExperimentArmService.MutateExperimentArms.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentArmsRequest {
  /**
   * Required. The list of operations to perform on individual experiment arm.
   */
  operations?: GoogleAdsSearchads360V23Services__ExperimentArmOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateExperimentArmsRequest(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmsRequest(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(item))) : undefined,
  };
}

/**
 * Response message for experiment arm mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentArmsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateExperimentArmResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateExperimentArmsResponse(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmsResponse(data: any): GoogleAdsSearchads360V23Services__MutateExperimentArmsResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(item))) : undefined,
  };
}

/**
 * The result for the campaign experiment mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for ExperimentService.MutateExperiments.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentsRequest {
  /**
   * Required. The list of operations to perform on individual experiments.
   */
  operations?: GoogleAdsSearchads360V23Services__ExperimentOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateExperimentsRequest(data: any): GoogleAdsSearchads360V23Services__MutateExperimentsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ExperimentOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateExperimentsRequest(data: any): GoogleAdsSearchads360V23Services__MutateExperimentsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ExperimentOperation(item))) : undefined,
  };
}

/**
 * Response message for experiment mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateExperimentsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateExperimentResult[];
}

/**
 * The result for the goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateGoalResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for GoalService.MutateGoals.
 */
export interface GoogleAdsSearchads360V23Services__MutateGoalsRequest {
  /**
   * Required. The list of operations to perform on the goals.
   */
  operations?: GoogleAdsSearchads360V23Services__GoalOperation[];
  /**
   * Optional. If true, successful operations will be carried out and invalid
   * operations will return errors. If false, all operations will be carried out
   * in one transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * Optional. If true, the request is validated but not executed. Only errors
   * are returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__GoalOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateGoalsRequest(data: any): GoogleAdsSearchads360V23Services__MutateGoalsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__GoalOperation(item))) : undefined,
  };
}

/**
 * Response message for a goal mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateGoalsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateGoalResult[];
}

/**
 * The result for the Keyword Plan ad group keyword mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * KeywordPlanAdGroupKeywordService.MutateKeywordPlanAdGroupKeywords.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest {
  /**
   * Required. The list of operations to perform on individual Keyword Plan ad
   * group keywords.
   */
  operations?: GoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(item))) : undefined,
  };
}

/**
 * Response message for a Keyword Plan ad group keyword mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordResult[];
}

/**
 * The result for the Keyword Plan ad group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for KeywordPlanAdGroupService.MutateKeywordPlanAdGroups.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest {
  /**
   * Required. The list of operations to perform on individual Keyword Plan ad
   * groups.
   */
  operations?: GoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(item))) : undefined,
  };
}

/**
 * Response message for a Keyword Plan ad group mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate. The order of the results is determined by the
   * order of the keywords in the original request.
   */
  results?: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupResult[];
}

/**
 * The result for the Keyword Plan campaign keyword mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for
 * KeywordPlanCampaignKeywordService.MutateKeywordPlanCampaignKeywords.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest {
  /**
   * Required. The list of operations to perform on individual Keyword Plan
   * campaign keywords.
   */
  operations?: GoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(item))) : undefined,
  };
}

/**
 * Response message for a Keyword Plan campaign keyword mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordResult[];
}

/**
 * The result for the Keyword Plan campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for KeywordPlanCampaignService.MutateKeywordPlanCampaigns.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest {
  /**
   * Required. The list of operations to perform on individual Keyword Plan
   * campaigns.
   */
  operations?: GoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(item))) : undefined,
  };
}

/**
 * Response message for a Keyword Plan campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignResult[];
}

/**
 * Request message for KeywordPlanService.MutateKeywordPlans.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlansRequest {
  /**
   * Required. The list of operations to perform on individual keyword plans.
   */
  operations?: GoogleAdsSearchads360V23Services__KeywordPlanOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateKeywordPlansRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlansRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateKeywordPlansRequest(data: any): GoogleAdsSearchads360V23Services__MutateKeywordPlansRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(item))) : undefined,
  };
}

/**
 * Response message for a keyword plan mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlansResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateKeywordPlansResult[];
}

/**
 * The result for the keyword plan mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateKeywordPlansResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * The result for a label mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateLabelResult {
  /**
   * The mutated label with only mutable fields after mutate. The field will
   * only be returned when response_content_type is set to "MUTABLE_RESOURCE".
   */
  label?: GoogleAdsSearchads360V23Resources__Label;
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for LabelService.MutateLabels.
 */
export interface GoogleAdsSearchads360V23Services__MutateLabelsRequest {
  /**
   * Required. The list of operations to perform on labels.
   */
  operations?: GoogleAdsSearchads360V23Services__LabelOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateLabelsRequest(data: any): GoogleAdsSearchads360V23Services__MutateLabelsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__LabelOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateLabelsRequest(data: any): GoogleAdsSearchads360V23Services__MutateLabelsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__LabelOperation(item))) : undefined,
  };
}

/**
 * Response message for a labels mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateLabelsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateLabelResult[];
}

/**
 * A single operation (create, update, remove) on a resource.
 */
export interface GoogleAdsSearchads360V23Services__MutateOperation {
  /**
   * An ad group ad label mutate operation.
   */
  adGroupAdLabelOperation?: GoogleAdsSearchads360V23Services__AdGroupAdLabelOperation;
  /**
   * An ad group ad mutate operation.
   */
  adGroupAdOperation?: GoogleAdsSearchads360V23Services__AdGroupAdOperation;
  /**
   * An ad group asset mutate operation.
   */
  adGroupAssetOperation?: GoogleAdsSearchads360V23Services__AdGroupAssetOperation;
  /**
   * An ad group bid modifier mutate operation.
   */
  adGroupBidModifierOperation?: GoogleAdsSearchads360V23Services__AdGroupBidModifierOperation;
  /**
   * An ad group criterion customizer mutate operation.
   */
  adGroupCriterionCustomizerOperation?: GoogleAdsSearchads360V23Services__AdGroupCriterionCustomizerOperation;
  /**
   * An ad group criterion label mutate operation.
   */
  adGroupCriterionLabelOperation?: GoogleAdsSearchads360V23Services__AdGroupCriterionLabelOperation;
  /**
   * An ad group criterion mutate operation.
   */
  adGroupCriterionOperation?: GoogleAdsSearchads360V23Services__AdGroupCriterionOperation;
  /**
   * An ad group customizer mutate operation.
   */
  adGroupCustomizerOperation?: GoogleAdsSearchads360V23Services__AdGroupCustomizerOperation;
  /**
   * An ad group label mutate operation.
   */
  adGroupLabelOperation?: GoogleAdsSearchads360V23Services__AdGroupLabelOperation;
  /**
   * An ad group mutate operation.
   */
  adGroupOperation?: GoogleAdsSearchads360V23Services__AdGroupOperation;
  /**
   * An ad mutate operation.
   */
  adOperation?: GoogleAdsSearchads360V23Services__AdOperation;
  /**
   * An ad parameter mutate operation.
   */
  adParameterOperation?: GoogleAdsSearchads360V23Services__AdParameterOperation;
  /**
   * An asset group asset mutate operation.
   */
  assetGroupAssetOperation?: GoogleAdsSearchads360V23Services__AssetGroupAssetOperation;
  /**
   * An asset group listing group filter mutate operation.
   */
  assetGroupListingGroupFilterOperation?: GoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation;
  /**
   * An asset group mutate operation.
   */
  assetGroupOperation?: GoogleAdsSearchads360V23Services__AssetGroupOperation;
  /**
   * An asset group signal mutate operation.
   */
  assetGroupSignalOperation?: GoogleAdsSearchads360V23Services__AssetGroupSignalOperation;
  /**
   * An asset mutate operation.
   */
  assetOperation?: GoogleAdsSearchads360V23Services__AssetOperation;
  /**
   * An asset set asset mutate operation.
   */
  assetSetAssetOperation?: GoogleAdsSearchads360V23Services__AssetSetAssetOperation;
  /**
   * An asset set mutate operation.
   */
  assetSetOperation?: GoogleAdsSearchads360V23Services__AssetSetOperation;
  /**
   * An audience mutate operation.
   */
  audienceOperation?: GoogleAdsSearchads360V23Services__AudienceOperation;
  /**
   * A bidding data exclusion mutate operation.
   */
  biddingDataExclusionOperation?: GoogleAdsSearchads360V23Services__BiddingDataExclusionOperation;
  /**
   * A bidding seasonality adjustment mutate operation.
   */
  biddingSeasonalityAdjustmentOperation?: GoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation;
  /**
   * A bidding strategy mutate operation.
   */
  biddingStrategyOperation?: GoogleAdsSearchads360V23Services__BiddingStrategyOperation;
  /**
   * A campaign asset mutate operation.
   */
  campaignAssetOperation?: GoogleAdsSearchads360V23Services__CampaignAssetOperation;
  /**
   * A campaign asset mutate operation.
   */
  campaignAssetSetOperation?: GoogleAdsSearchads360V23Services__CampaignAssetSetOperation;
  /**
   * A campaign bid modifier mutate operation.
   */
  campaignBidModifierOperation?: GoogleAdsSearchads360V23Services__CampaignBidModifierOperation;
  /**
   * A campaign budget mutate operation.
   */
  campaignBudgetOperation?: GoogleAdsSearchads360V23Services__CampaignBudgetOperation;
  /**
   * A campaign conversion goal mutate operation.
   */
  campaignConversionGoalOperation?: GoogleAdsSearchads360V23Services__CampaignConversionGoalOperation;
  /**
   * A campaign criterion mutate operation.
   */
  campaignCriterionOperation?: GoogleAdsSearchads360V23Services__CampaignCriterionOperation;
  /**
   * A campaign customizer mutate operation.
   */
  campaignCustomizerOperation?: GoogleAdsSearchads360V23Services__CampaignCustomizerOperation;
  /**
   * A campaign draft mutate operation.
   */
  campaignDraftOperation?: GoogleAdsSearchads360V23Services__CampaignDraftOperation;
  /**
   * A campaign group mutate operation.
   */
  campaignGroupOperation?: GoogleAdsSearchads360V23Services__CampaignGroupOperation;
  /**
   * A campaign label mutate operation.
   */
  campaignLabelOperation?: GoogleAdsSearchads360V23Services__CampaignLabelOperation;
  /**
   * A campaign mutate operation.
   */
  campaignOperation?: GoogleAdsSearchads360V23Services__CampaignOperation;
  /**
   * A campaign shared set mutate operation.
   */
  campaignSharedSetOperation?: GoogleAdsSearchads360V23Services__CampaignSharedSetOperation;
  /**
   * A conversion action mutate operation.
   */
  conversionActionOperation?: GoogleAdsSearchads360V23Services__ConversionActionOperation;
  /**
   * A conversion custom variable mutate operation.
   */
  conversionCustomVariableOperation?: GoogleAdsSearchads360V23Services__ConversionCustomVariableOperation;
  /**
   * A conversion goal campaign config mutate operation.
   */
  conversionGoalCampaignConfigOperation?: GoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation;
  /**
   * A conversion value rule mutate operation.
   */
  conversionValueRuleOperation?: GoogleAdsSearchads360V23Services__ConversionValueRuleOperation;
  /**
   * A conversion value rule set mutate operation.
   */
  conversionValueRuleSetOperation?: GoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation;
  /**
   * A custom conversion goal mutate operation.
   */
  customConversionGoalOperation?: GoogleAdsSearchads360V23Services__CustomConversionGoalOperation;
  /**
   * A customer asset mutate operation.
   */
  customerAssetOperation?: GoogleAdsSearchads360V23Services__CustomerAssetOperation;
  /**
   * A customer conversion goal mutate operation.
   */
  customerConversionGoalOperation?: GoogleAdsSearchads360V23Services__CustomerConversionGoalOperation;
  /**
   * A customer customizer mutate operation.
   */
  customerCustomizerOperation?: GoogleAdsSearchads360V23Services__CustomerCustomizerOperation;
  /**
   * A customer label mutate operation.
   */
  customerLabelOperation?: GoogleAdsSearchads360V23Services__CustomerLabelOperation;
  /**
   * A customer negative criterion mutate operation.
   */
  customerNegativeCriterionOperation?: GoogleAdsSearchads360V23Services__CustomerNegativeCriterionOperation;
  /**
   * A customer mutate operation.
   */
  customerOperation?: GoogleAdsSearchads360V23Services__CustomerOperation;
  /**
   * A customizer attribute mutate operation.
   */
  customizerAttributeOperation?: GoogleAdsSearchads360V23Services__CustomizerAttributeOperation;
  /**
   * An experiment arm mutate operation.
   */
  experimentArmOperation?: GoogleAdsSearchads360V23Services__ExperimentArmOperation;
  /**
   * An experiment mutate operation.
   */
  experimentOperation?: GoogleAdsSearchads360V23Services__ExperimentOperation;
  /**
   * A keyword plan ad group keyword operation.
   */
  keywordPlanAdGroupKeywordOperation?: GoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation;
  /**
   * A keyword plan ad group operation.
   */
  keywordPlanAdGroupOperation?: GoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation;
  /**
   * A keyword plan campaign keyword operation.
   */
  keywordPlanCampaignKeywordOperation?: GoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation;
  /**
   * A keyword plan campaign operation.
   */
  keywordPlanCampaignOperation?: GoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation;
  /**
   * A keyword plan operation.
   */
  keywordPlanOperation?: GoogleAdsSearchads360V23Services__KeywordPlanOperation;
  /**
   * A label mutate operation.
   */
  labelOperation?: GoogleAdsSearchads360V23Services__LabelOperation;
  /**
   * A recommendation subscription mutate operation.
   */
  recommendationSubscriptionOperation?: GoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation;
  /**
   * A remarketing action mutate operation.
   */
  remarketingActionOperation?: GoogleAdsSearchads360V23Services__RemarketingActionOperation;
  /**
   * A Search Ads 360 campaign mutate operation.
   */
  searchAds360CampaignOperation?: GoogleAdsSearchads360V23Services__SearchAds360CampaignOperation;
  /**
   * A shared criterion mutate operation.
   */
  sharedCriterionOperation?: GoogleAdsSearchads360V23Services__SharedCriterionOperation;
  /**
   * A shared set mutate operation.
   */
  sharedSetOperation?: GoogleAdsSearchads360V23Services__SharedSetOperation;
  /**
   * A Smart campaign setting mutate operation.
   */
  smartCampaignSettingOperation?: GoogleAdsSearchads360V23Services__SmartCampaignSettingOperation;
  /**
   * A user list mutate operation.
   */
  userListOperation?: GoogleAdsSearchads360V23Services__UserListOperation;
}

function serializeGoogleAdsSearchads360V23Services__MutateOperation(data: any): GoogleAdsSearchads360V23Services__MutateOperation {
  return {
    ...data,
    adGroupAdOperation: data["adGroupAdOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(data["adGroupAdOperation"]) : undefined,
    adGroupAssetOperation: data["adGroupAssetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(data["adGroupAssetOperation"]) : undefined,
    adGroupBidModifierOperation: data["adGroupBidModifierOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(data["adGroupBidModifierOperation"]) : undefined,
    adGroupCriterionOperation: data["adGroupCriterionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(data["adGroupCriterionOperation"]) : undefined,
    adGroupOperation: data["adGroupOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdGroupOperation(data["adGroupOperation"]) : undefined,
    adOperation: data["adOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdOperation(data["adOperation"]) : undefined,
    adParameterOperation: data["adParameterOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdParameterOperation(data["adParameterOperation"]) : undefined,
    assetGroupAssetOperation: data["assetGroupAssetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(data["assetGroupAssetOperation"]) : undefined,
    assetGroupListingGroupFilterOperation: data["assetGroupListingGroupFilterOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(data["assetGroupListingGroupFilterOperation"]) : undefined,
    assetGroupOperation: data["assetGroupOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AssetGroupOperation(data["assetGroupOperation"]) : undefined,
    assetOperation: data["assetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AssetOperation(data["assetOperation"]) : undefined,
    assetSetOperation: data["assetSetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AssetSetOperation(data["assetSetOperation"]) : undefined,
    audienceOperation: data["audienceOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AudienceOperation(data["audienceOperation"]) : undefined,
    biddingDataExclusionOperation: data["biddingDataExclusionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(data["biddingDataExclusionOperation"]) : undefined,
    biddingSeasonalityAdjustmentOperation: data["biddingSeasonalityAdjustmentOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(data["biddingSeasonalityAdjustmentOperation"]) : undefined,
    biddingStrategyOperation: data["biddingStrategyOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(data["biddingStrategyOperation"]) : undefined,
    campaignAssetOperation: data["campaignAssetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(data["campaignAssetOperation"]) : undefined,
    campaignBidModifierOperation: data["campaignBidModifierOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(data["campaignBidModifierOperation"]) : undefined,
    campaignBudgetOperation: data["campaignBudgetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(data["campaignBudgetOperation"]) : undefined,
    campaignConversionGoalOperation: data["campaignConversionGoalOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(data["campaignConversionGoalOperation"]) : undefined,
    campaignCriterionOperation: data["campaignCriterionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(data["campaignCriterionOperation"]) : undefined,
    campaignDraftOperation: data["campaignDraftOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(data["campaignDraftOperation"]) : undefined,
    campaignGroupOperation: data["campaignGroupOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(data["campaignGroupOperation"]) : undefined,
    campaignOperation: data["campaignOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CampaignOperation(data["campaignOperation"]) : undefined,
    conversionActionOperation: data["conversionActionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ConversionActionOperation(data["conversionActionOperation"]) : undefined,
    conversionCustomVariableOperation: data["conversionCustomVariableOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(data["conversionCustomVariableOperation"]) : undefined,
    conversionGoalCampaignConfigOperation: data["conversionGoalCampaignConfigOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(data["conversionGoalCampaignConfigOperation"]) : undefined,
    conversionValueRuleOperation: data["conversionValueRuleOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(data["conversionValueRuleOperation"]) : undefined,
    conversionValueRuleSetOperation: data["conversionValueRuleSetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(data["conversionValueRuleSetOperation"]) : undefined,
    customConversionGoalOperation: data["customConversionGoalOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(data["customConversionGoalOperation"]) : undefined,
    customerAssetOperation: data["customerAssetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(data["customerAssetOperation"]) : undefined,
    customerConversionGoalOperation: data["customerConversionGoalOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(data["customerConversionGoalOperation"]) : undefined,
    customerOperation: data["customerOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomerOperation(data["customerOperation"]) : undefined,
    customizerAttributeOperation: data["customizerAttributeOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(data["customizerAttributeOperation"]) : undefined,
    experimentArmOperation: data["experimentArmOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(data["experimentArmOperation"]) : undefined,
    experimentOperation: data["experimentOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ExperimentOperation(data["experimentOperation"]) : undefined,
    keywordPlanAdGroupKeywordOperation: data["keywordPlanAdGroupKeywordOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(data["keywordPlanAdGroupKeywordOperation"]) : undefined,
    keywordPlanAdGroupOperation: data["keywordPlanAdGroupOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(data["keywordPlanAdGroupOperation"]) : undefined,
    keywordPlanCampaignKeywordOperation: data["keywordPlanCampaignKeywordOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(data["keywordPlanCampaignKeywordOperation"]) : undefined,
    keywordPlanCampaignOperation: data["keywordPlanCampaignOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(data["keywordPlanCampaignOperation"]) : undefined,
    keywordPlanOperation: data["keywordPlanOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(data["keywordPlanOperation"]) : undefined,
    labelOperation: data["labelOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__LabelOperation(data["labelOperation"]) : undefined,
    recommendationSubscriptionOperation: data["recommendationSubscriptionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(data["recommendationSubscriptionOperation"]) : undefined,
    remarketingActionOperation: data["remarketingActionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(data["remarketingActionOperation"]) : undefined,
    searchAds360CampaignOperation: data["searchAds360CampaignOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__SearchAds360CampaignOperation(data["searchAds360CampaignOperation"]) : undefined,
    sharedCriterionOperation: data["sharedCriterionOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(data["sharedCriterionOperation"]) : undefined,
    sharedSetOperation: data["sharedSetOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__SharedSetOperation(data["sharedSetOperation"]) : undefined,
    smartCampaignSettingOperation: data["smartCampaignSettingOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(data["smartCampaignSettingOperation"]) : undefined,
    userListOperation: data["userListOperation"] !== undefined ? serializeGoogleAdsSearchads360V23Services__UserListOperation(data["userListOperation"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateOperation(data: any): GoogleAdsSearchads360V23Services__MutateOperation {
  return {
    ...data,
    adGroupAdOperation: data["adGroupAdOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdGroupAdOperation(data["adGroupAdOperation"]) : undefined,
    adGroupAssetOperation: data["adGroupAssetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdGroupAssetOperation(data["adGroupAssetOperation"]) : undefined,
    adGroupBidModifierOperation: data["adGroupBidModifierOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdGroupBidModifierOperation(data["adGroupBidModifierOperation"]) : undefined,
    adGroupCriterionOperation: data["adGroupCriterionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdGroupCriterionOperation(data["adGroupCriterionOperation"]) : undefined,
    adGroupOperation: data["adGroupOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdGroupOperation(data["adGroupOperation"]) : undefined,
    adOperation: data["adOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdOperation(data["adOperation"]) : undefined,
    adParameterOperation: data["adParameterOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdParameterOperation(data["adParameterOperation"]) : undefined,
    assetGroupAssetOperation: data["assetGroupAssetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AssetGroupAssetOperation(data["assetGroupAssetOperation"]) : undefined,
    assetGroupListingGroupFilterOperation: data["assetGroupListingGroupFilterOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AssetGroupListingGroupFilterOperation(data["assetGroupListingGroupFilterOperation"]) : undefined,
    assetGroupOperation: data["assetGroupOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AssetGroupOperation(data["assetGroupOperation"]) : undefined,
    assetOperation: data["assetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AssetOperation(data["assetOperation"]) : undefined,
    assetSetOperation: data["assetSetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AssetSetOperation(data["assetSetOperation"]) : undefined,
    audienceOperation: data["audienceOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AudienceOperation(data["audienceOperation"]) : undefined,
    biddingDataExclusionOperation: data["biddingDataExclusionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__BiddingDataExclusionOperation(data["biddingDataExclusionOperation"]) : undefined,
    biddingSeasonalityAdjustmentOperation: data["biddingSeasonalityAdjustmentOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__BiddingSeasonalityAdjustmentOperation(data["biddingSeasonalityAdjustmentOperation"]) : undefined,
    biddingStrategyOperation: data["biddingStrategyOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__BiddingStrategyOperation(data["biddingStrategyOperation"]) : undefined,
    campaignAssetOperation: data["campaignAssetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignAssetOperation(data["campaignAssetOperation"]) : undefined,
    campaignBidModifierOperation: data["campaignBidModifierOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignBidModifierOperation(data["campaignBidModifierOperation"]) : undefined,
    campaignBudgetOperation: data["campaignBudgetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignBudgetOperation(data["campaignBudgetOperation"]) : undefined,
    campaignConversionGoalOperation: data["campaignConversionGoalOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignConversionGoalOperation(data["campaignConversionGoalOperation"]) : undefined,
    campaignCriterionOperation: data["campaignCriterionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignCriterionOperation(data["campaignCriterionOperation"]) : undefined,
    campaignDraftOperation: data["campaignDraftOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignDraftOperation(data["campaignDraftOperation"]) : undefined,
    campaignGroupOperation: data["campaignGroupOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignGroupOperation(data["campaignGroupOperation"]) : undefined,
    campaignOperation: data["campaignOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CampaignOperation(data["campaignOperation"]) : undefined,
    conversionActionOperation: data["conversionActionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ConversionActionOperation(data["conversionActionOperation"]) : undefined,
    conversionCustomVariableOperation: data["conversionCustomVariableOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ConversionCustomVariableOperation(data["conversionCustomVariableOperation"]) : undefined,
    conversionGoalCampaignConfigOperation: data["conversionGoalCampaignConfigOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ConversionGoalCampaignConfigOperation(data["conversionGoalCampaignConfigOperation"]) : undefined,
    conversionValueRuleOperation: data["conversionValueRuleOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleOperation(data["conversionValueRuleOperation"]) : undefined,
    conversionValueRuleSetOperation: data["conversionValueRuleSetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ConversionValueRuleSetOperation(data["conversionValueRuleSetOperation"]) : undefined,
    customConversionGoalOperation: data["customConversionGoalOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomConversionGoalOperation(data["customConversionGoalOperation"]) : undefined,
    customerAssetOperation: data["customerAssetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerAssetOperation(data["customerAssetOperation"]) : undefined,
    customerConversionGoalOperation: data["customerConversionGoalOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerConversionGoalOperation(data["customerConversionGoalOperation"]) : undefined,
    customerOperation: data["customerOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomerOperation(data["customerOperation"]) : undefined,
    customizerAttributeOperation: data["customizerAttributeOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__CustomizerAttributeOperation(data["customizerAttributeOperation"]) : undefined,
    experimentArmOperation: data["experimentArmOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ExperimentArmOperation(data["experimentArmOperation"]) : undefined,
    experimentOperation: data["experimentOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ExperimentOperation(data["experimentOperation"]) : undefined,
    keywordPlanAdGroupKeywordOperation: data["keywordPlanAdGroupKeywordOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupKeywordOperation(data["keywordPlanAdGroupKeywordOperation"]) : undefined,
    keywordPlanAdGroupOperation: data["keywordPlanAdGroupOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordPlanAdGroupOperation(data["keywordPlanAdGroupOperation"]) : undefined,
    keywordPlanCampaignKeywordOperation: data["keywordPlanCampaignKeywordOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignKeywordOperation(data["keywordPlanCampaignKeywordOperation"]) : undefined,
    keywordPlanCampaignOperation: data["keywordPlanCampaignOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordPlanCampaignOperation(data["keywordPlanCampaignOperation"]) : undefined,
    keywordPlanOperation: data["keywordPlanOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__KeywordPlanOperation(data["keywordPlanOperation"]) : undefined,
    labelOperation: data["labelOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__LabelOperation(data["labelOperation"]) : undefined,
    recommendationSubscriptionOperation: data["recommendationSubscriptionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(data["recommendationSubscriptionOperation"]) : undefined,
    remarketingActionOperation: data["remarketingActionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(data["remarketingActionOperation"]) : undefined,
    searchAds360CampaignOperation: data["searchAds360CampaignOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__SearchAds360CampaignOperation(data["searchAds360CampaignOperation"]) : undefined,
    sharedCriterionOperation: data["sharedCriterionOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(data["sharedCriterionOperation"]) : undefined,
    sharedSetOperation: data["sharedSetOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__SharedSetOperation(data["sharedSetOperation"]) : undefined,
    smartCampaignSettingOperation: data["smartCampaignSettingOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(data["smartCampaignSettingOperation"]) : undefined,
    userListOperation: data["userListOperation"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__UserListOperation(data["userListOperation"]) : undefined,
  };
}

/**
 * Response message for the resource mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateOperationResponse {
  /**
   * The result for the ad group ad label mutate.
   */
  adGroupAdLabelResult?: GoogleAdsSearchads360V23Services__MutateAdGroupAdLabelResult;
  /**
   * The result for the ad group ad mutate.
   */
  adGroupAdResult?: GoogleAdsSearchads360V23Services__MutateAdGroupAdResult;
  /**
   * The result for the ad group asset mutate.
   */
  adGroupAssetResult?: GoogleAdsSearchads360V23Services__MutateAdGroupAssetResult;
  /**
   * The result for the ad group bid modifier mutate.
   */
  adGroupBidModifierResult?: GoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult;
  /**
   * The result for the ad group criterion customizer mutate.
   */
  adGroupCriterionCustomizerResult?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionCustomizerResult;
  /**
   * The result for the ad group criterion label mutate.
   */
  adGroupCriterionLabelResult?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionLabelResult;
  /**
   * The result for the ad group criterion mutate.
   */
  adGroupCriterionResult?: GoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult;
  /**
   * The result for the ad group customizer mutate.
   */
  adGroupCustomizerResult?: GoogleAdsSearchads360V23Services__MutateAdGroupCustomizerResult;
  /**
   * The result for the ad group label mutate.
   */
  adGroupLabelResult?: GoogleAdsSearchads360V23Services__MutateAdGroupLabelResult;
  /**
   * The result for the ad group mutate.
   */
  adGroupResult?: GoogleAdsSearchads360V23Services__MutateAdGroupResult;
  /**
   * The result for the ad parameter mutate.
   */
  adParameterResult?: GoogleAdsSearchads360V23Services__MutateAdParameterResult;
  /**
   * The result for the ad mutate.
   */
  adResult?: GoogleAdsSearchads360V23Services__MutateAdResult;
  /**
   * The result for the asset group asset mutate.
   */
  assetGroupAssetResult?: GoogleAdsSearchads360V23Services__MutateAssetGroupAssetResult;
  /**
   * The result for the asset group listing group filter mutate.
   */
  assetGroupListingGroupFilterResult?: GoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult;
  /**
   * The result for the asset group mutate.
   */
  assetGroupResult?: GoogleAdsSearchads360V23Services__MutateAssetGroupResult;
  /**
   * The result for the asset group signal mutate.
   */
  assetGroupSignalResult?: GoogleAdsSearchads360V23Services__MutateAssetGroupSignalResult;
  /**
   * The result for the asset mutate.
   */
  assetResult?: GoogleAdsSearchads360V23Services__MutateAssetResult;
  /**
   * The result for the asset set asset mutate.
   */
  assetSetAssetResult?: GoogleAdsSearchads360V23Services__MutateAssetSetAssetResult;
  /**
   * The result for the asset set mutate.
   */
  assetSetResult?: GoogleAdsSearchads360V23Services__MutateAssetSetResult;
  /**
   * The result for the audience mutate.
   */
  audienceResult?: GoogleAdsSearchads360V23Services__MutateAudienceResult;
  /**
   * The result for the bidding data exclusion mutate.
   */
  biddingDataExclusionResult?: GoogleAdsSearchads360V23Services__MutateBiddingDataExclusionsResult;
  /**
   * The result for the bidding seasonality adjustment mutate.
   */
  biddingSeasonalityAdjustmentResult?: GoogleAdsSearchads360V23Services__MutateBiddingSeasonalityAdjustmentsResult;
  /**
   * The result for the bidding strategy mutate.
   */
  biddingStrategyResult?: GoogleAdsSearchads360V23Services__MutateBiddingStrategyResult;
  /**
   * The result for the campaign asset mutate.
   */
  campaignAssetResult?: GoogleAdsSearchads360V23Services__MutateCampaignAssetResult;
  /**
   * The result for the campaign asset set mutate.
   */
  campaignAssetSetResult?: GoogleAdsSearchads360V23Services__MutateCampaignAssetSetResult;
  /**
   * The result for the campaign bid modifier mutate.
   */
  campaignBidModifierResult?: GoogleAdsSearchads360V23Services__MutateCampaignBidModifierResult;
  /**
   * The result for the campaign budget mutate.
   */
  campaignBudgetResult?: GoogleAdsSearchads360V23Services__MutateCampaignBudgetResult;
  /**
   * The result for the campaign conversion goal mutate.
   */
  campaignConversionGoalResult?: GoogleAdsSearchads360V23Services__MutateCampaignConversionGoalResult;
  /**
   * The result for the campaign criterion mutate.
   */
  campaignCriterionResult?: GoogleAdsSearchads360V23Services__MutateCampaignCriterionResult;
  /**
   * The result for the campaign customizer mutate.
   */
  campaignCustomizerResult?: GoogleAdsSearchads360V23Services__MutateCampaignCustomizerResult;
  /**
   * The result for the campaign draft mutate.
   */
  campaignDraftResult?: GoogleAdsSearchads360V23Services__MutateCampaignDraftResult;
  /**
   * The result for the campaign group mutate.
   */
  campaignGroupResult?: GoogleAdsSearchads360V23Services__MutateCampaignGroupResult;
  /**
   * The result for the campaign label mutate.
   */
  campaignLabelResult?: GoogleAdsSearchads360V23Services__MutateCampaignLabelResult;
  /**
   * The result for the campaign mutate.
   */
  campaignResult?: GoogleAdsSearchads360V23Services__MutateCampaignResult;
  /**
   * The result for the campaign shared set mutate.
   */
  campaignSharedSetResult?: GoogleAdsSearchads360V23Services__MutateCampaignSharedSetResult;
  /**
   * The result for the conversion action mutate.
   */
  conversionActionResult?: GoogleAdsSearchads360V23Services__MutateConversionActionResult;
  /**
   * The result for the conversion custom variable mutate.
   */
  conversionCustomVariableResult?: GoogleAdsSearchads360V23Services__MutateConversionCustomVariableResult;
  /**
   * The result for the conversion goal campaign config mutate.
   */
  conversionGoalCampaignConfigResult?: GoogleAdsSearchads360V23Services__MutateConversionGoalCampaignConfigResult;
  /**
   * The result for the conversion value rule mutate.
   */
  conversionValueRuleResult?: GoogleAdsSearchads360V23Services__MutateConversionValueRuleResult;
  /**
   * The result for the conversion value rule set mutate.
   */
  conversionValueRuleSetResult?: GoogleAdsSearchads360V23Services__MutateConversionValueRuleSetResult;
  /**
   * The result for the custom conversion goal mutate.
   */
  customConversionGoalResult?: GoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult;
  /**
   * The result for the customer asset mutate.
   */
  customerAssetResult?: GoogleAdsSearchads360V23Services__MutateCustomerAssetResult;
  /**
   * The result for the customer conversion goal mutate.
   */
  customerConversionGoalResult?: GoogleAdsSearchads360V23Services__MutateCustomerConversionGoalResult;
  /**
   * The result for the customer customizer mutate.
   */
  customerCustomizerResult?: GoogleAdsSearchads360V23Services__MutateCustomerCustomizerResult;
  /**
   * The result for the customer label mutate.
   */
  customerLabelResult?: GoogleAdsSearchads360V23Services__MutateCustomerLabelResult;
  /**
   * The result for the customer negative criterion mutate.
   */
  customerNegativeCriterionResult?: GoogleAdsSearchads360V23Services__MutateCustomerNegativeCriteriaResult;
  /**
   * The result for the customer mutate.
   */
  customerResult?: GoogleAdsSearchads360V23Services__MutateCustomerResult;
  /**
   * The result for the customizer attribute mutate.
   */
  customizerAttributeResult?: GoogleAdsSearchads360V23Services__MutateCustomizerAttributeResult;
  /**
   * The result for the experiment arm mutate.
   */
  experimentArmResult?: GoogleAdsSearchads360V23Services__MutateExperimentArmResult;
  /**
   * The result for the experiment mutate.
   */
  experimentResult?: GoogleAdsSearchads360V23Services__MutateExperimentResult;
  /**
   * The result for the keyword plan ad group keyword mutate.
   */
  keywordPlanAdGroupKeywordResult?: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupKeywordResult;
  /**
   * The result for the keyword plan ad group mutate.
   */
  keywordPlanAdGroupResult?: GoogleAdsSearchads360V23Services__MutateKeywordPlanAdGroupResult;
  /**
   * The result for the keyword plan campaign keyword mutate.
   */
  keywordPlanCampaignKeywordResult?: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignKeywordResult;
  /**
   * The result for the keyword plan campaign mutate.
   */
  keywordPlanCampaignResult?: GoogleAdsSearchads360V23Services__MutateKeywordPlanCampaignResult;
  /**
   * The result for the keyword plan mutate.
   */
  keywordPlanResult?: GoogleAdsSearchads360V23Services__MutateKeywordPlansResult;
  /**
   * The result for the label mutate.
   */
  labelResult?: GoogleAdsSearchads360V23Services__MutateLabelResult;
  /**
   * The result for the recommendation subscription mutate.
   */
  recommendationSubscriptionResult?: GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResult;
  /**
   * The result for the remarketing action mutate.
   */
  remarketingActionResult?: GoogleAdsSearchads360V23Services__MutateRemarketingActionResult;
  /**
   * The result for the Search Ads 360 campaign mutate.
   */
  searchAds360CampaignResult?: GoogleAdsSearchads360V23Services__MutateSearchAds360CampaignResult;
  /**
   * The result for the shared criterion mutate.
   */
  sharedCriterionResult?: GoogleAdsSearchads360V23Services__MutateSharedCriterionResult;
  /**
   * The result for the shared set mutate.
   */
  sharedSetResult?: GoogleAdsSearchads360V23Services__MutateSharedSetResult;
  /**
   * The result for the Smart campaign setting mutate.
   */
  smartCampaignSettingResult?: GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingResult;
  /**
   * The result for the user list mutate.
   */
  userListResult?: GoogleAdsSearchads360V23Services__MutateUserListResult;
}

function serializeGoogleAdsSearchads360V23Services__MutateOperationResponse(data: any): GoogleAdsSearchads360V23Services__MutateOperationResponse {
  return {
    ...data,
    adGroupAdResult: data["adGroupAdResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(data["adGroupAdResult"]) : undefined,
    adGroupBidModifierResult: data["adGroupBidModifierResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(data["adGroupBidModifierResult"]) : undefined,
    adGroupCriterionResult: data["adGroupCriterionResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(data["adGroupCriterionResult"]) : undefined,
    adGroupResult: data["adGroupResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(data["adGroupResult"]) : undefined,
    adParameterResult: data["adParameterResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(data["adParameterResult"]) : undefined,
    adResult: data["adResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAdResult(data["adResult"]) : undefined,
    assetGroupListingGroupFilterResult: data["assetGroupListingGroupFilterResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(data["assetGroupListingGroupFilterResult"]) : undefined,
    assetResult: data["assetResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAssetResult(data["assetResult"]) : undefined,
    assetSetResult: data["assetSetResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(data["assetSetResult"]) : undefined,
    biddingStrategyResult: data["biddingStrategyResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(data["biddingStrategyResult"]) : undefined,
    campaignBudgetResult: data["campaignBudgetResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(data["campaignBudgetResult"]) : undefined,
    campaignCriterionResult: data["campaignCriterionResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(data["campaignCriterionResult"]) : undefined,
    campaignResult: data["campaignResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateCampaignResult(data["campaignResult"]) : undefined,
    conversionActionResult: data["conversionActionResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(data["conversionActionResult"]) : undefined,
    customConversionGoalResult: data["customConversionGoalResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(data["customConversionGoalResult"]) : undefined,
    experimentArmResult: data["experimentArmResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(data["experimentArmResult"]) : undefined,
    sharedCriterionResult: data["sharedCriterionResult"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(data["sharedCriterionResult"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateOperationResponse(data: any): GoogleAdsSearchads360V23Services__MutateOperationResponse {
  return {
    ...data,
    adGroupAdResult: data["adGroupAdResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdGroupAdResult(data["adGroupAdResult"]) : undefined,
    adGroupBidModifierResult: data["adGroupBidModifierResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdGroupBidModifierResult(data["adGroupBidModifierResult"]) : undefined,
    adGroupCriterionResult: data["adGroupCriterionResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdGroupCriterionResult(data["adGroupCriterionResult"]) : undefined,
    adGroupResult: data["adGroupResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdGroupResult(data["adGroupResult"]) : undefined,
    adParameterResult: data["adParameterResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdParameterResult(data["adParameterResult"]) : undefined,
    adResult: data["adResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAdResult(data["adResult"]) : undefined,
    assetGroupListingGroupFilterResult: data["assetGroupListingGroupFilterResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAssetGroupListingGroupFilterResult(data["assetGroupListingGroupFilterResult"]) : undefined,
    assetResult: data["assetResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAssetResult(data["assetResult"]) : undefined,
    assetSetResult: data["assetSetResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateAssetSetResult(data["assetSetResult"]) : undefined,
    biddingStrategyResult: data["biddingStrategyResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateBiddingStrategyResult(data["biddingStrategyResult"]) : undefined,
    campaignBudgetResult: data["campaignBudgetResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateCampaignBudgetResult(data["campaignBudgetResult"]) : undefined,
    campaignCriterionResult: data["campaignCriterionResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateCampaignCriterionResult(data["campaignCriterionResult"]) : undefined,
    campaignResult: data["campaignResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateCampaignResult(data["campaignResult"]) : undefined,
    conversionActionResult: data["conversionActionResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateConversionActionResult(data["conversionActionResult"]) : undefined,
    customConversionGoalResult: data["customConversionGoalResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateCustomConversionGoalResult(data["customConversionGoalResult"]) : undefined,
    experimentArmResult: data["experimentArmResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateExperimentArmResult(data["experimentArmResult"]) : undefined,
    sharedCriterionResult: data["sharedCriterionResult"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(data["sharedCriterionResult"]) : undefined,
  };
}

/**
 * Request message for
 * RecommendationSubscriptionService.MutateRecommendationSubscription
 */
export interface GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest {
  /**
   * Required. The list of create or update operations.
   */
  operations?: GoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation. The mutable
   * resource will only be returned if the resource has the appropriate response
   * field. For example, MutateCampaignResult.campaign.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest(data: any): GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest(data: any): GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(item))) : undefined,
  };
}

/**
 * Response message for
 * RecommendationSubscriptionService.MutateRecommendationSubscription
 */
export interface GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors) we return the RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * Results, one per operation.
   */
  results?: GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResult[];
}

/**
 * Result message for
 * RecommendationSubscriptionService.MutateRecommendationSubscription
 */
export interface GoogleAdsSearchads360V23Services__MutateRecommendationSubscriptionResult {
  /**
   * The mutated recommendation subscription with only mutable fields after
   * mutate. The field will only be returned when response_content_type is set
   * to "MUTABLE_RESOURCE".
   */
  recommendationSubscription?: GoogleAdsSearchads360V23Resources__RecommendationSubscription;
  /**
   * Resource name of the subscription that was modified.
   */
  resourceName?: string;
}

/**
 * The result for the remarketing action mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateRemarketingActionResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for RemarketingActionService.MutateRemarketingActions.
 */
export interface GoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest {
  /**
   * Required. The list of operations to perform on individual remarketing
   * actions.
   */
  operations?: GoogleAdsSearchads360V23Services__RemarketingActionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest(data: any): GoogleAdsSearchads360V23Services__MutateRemarketingActionsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(item))) : undefined,
  };
}

/**
 * Response message for remarketing action mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateRemarketingActionsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateRemarketingActionResult[];
}

/**
 * The result for the Search Ads 360 campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSearchAds360CampaignResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
  /**
   * The mutated Search Ads 360 campaign with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  searchAds360Campaign?: GoogleAdsSearchads360V23Resources__SearchAds360Campaign;
}

/**
 * Request message for Service.Mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSearchAds360Request {
  /**
   * Required. The list of operations to perform on individual resources.
   */
  mutateOperations?: GoogleAdsSearchads360V23Services__MutateOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation. The mutable
   * resource will only be returned if the resource has the appropriate response
   * field. For example, .
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateSearchAds360Request(data: any): GoogleAdsSearchads360V23Services__MutateSearchAds360Request {
  return {
    ...data,
    mutateOperations: data["mutateOperations"] !== undefined ? data["mutateOperations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSearchAds360Request(data: any): GoogleAdsSearchads360V23Services__MutateSearchAds360Request {
  return {
    ...data,
    mutateOperations: data["mutateOperations"] !== undefined ? data["mutateOperations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateOperation(item))) : undefined,
  };
}

/**
 * Response message for Service.Mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSearchAds360Response {
  /**
   * All responses for the mutate.
   */
  mutateOperationResponses?: GoogleAdsSearchads360V23Services__MutateOperationResponse[];
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
}

function serializeGoogleAdsSearchads360V23Services__MutateSearchAds360Response(data: any): GoogleAdsSearchads360V23Services__MutateSearchAds360Response {
  return {
    ...data,
    mutateOperationResponses: data["mutateOperationResponses"] !== undefined ? data["mutateOperationResponses"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateOperationResponse(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSearchAds360Response(data: any): GoogleAdsSearchads360V23Services__MutateSearchAds360Response {
  return {
    ...data,
    mutateOperationResponses: data["mutateOperationResponses"] !== undefined ? data["mutateOperationResponses"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateOperationResponse(item))) : undefined,
  };
}

/**
 * Request message for SharedCriterionService.MutateSharedCriteria.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest {
  /**
   * Required. The list of operations to perform on individual shared criteria.
   */
  operations?: GoogleAdsSearchads360V23Services__SharedCriterionOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriteriaRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(item))) : undefined,
  };
}

/**
 * Response message for a shared criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateSharedCriterionResult[];
}

function serializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriteriaResponse {
  return {
    ...data,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(item))) : undefined,
  };
}

/**
 * The result for the shared criterion mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedCriterionResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
  /**
   * The mutated shared criterion with only mutable fields after mutate. The
   * field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  sharedCriterion?: GoogleAdsSearchads360V23Resources__SharedCriterion;
}

function serializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriterionResult {
  return {
    ...data,
    sharedCriterion: data["sharedCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["sharedCriterion"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSharedCriterionResult(data: any): GoogleAdsSearchads360V23Services__MutateSharedCriterionResult {
  return {
    ...data,
    sharedCriterion: data["sharedCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["sharedCriterion"]) : undefined,
  };
}

/**
 * The result for the shared set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedSetResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
  /**
   * The mutated shared set with only mutable fields after mutate. The field
   * will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  sharedSet?: GoogleAdsSearchads360V23Resources__SharedSet;
}

/**
 * Request message for SharedSetService.MutateSharedSets.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedSetsRequest {
  /**
   * Required. The list of operations to perform on individual shared sets.
   */
  operations?: GoogleAdsSearchads360V23Services__SharedSetOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateSharedSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateSharedSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__SharedSetOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSharedSetsRequest(data: any): GoogleAdsSearchads360V23Services__MutateSharedSetsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__SharedSetOperation(item))) : undefined,
  };
}

/**
 * Response message for a shared set mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSharedSetsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateSharedSetResult[];
}

/**
 * The result for the Smart campaign setting mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
  /**
   * The mutated Smart campaign setting with only mutable fields after mutate.
   * The field will only be returned when response_content_type is set to
   * "MUTABLE_RESOURCE".
   */
  smartCampaignSetting?: GoogleAdsSearchads360V23Resources__SmartCampaignSetting;
}

/**
 * Request message for SmartCampaignSettingService.MutateSmartCampaignSettings.
 */
export interface GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest {
  /**
   * Required. The list of operations to perform on individual Smart campaign
   * settings.
   */
  operations?: GoogleAdsSearchads360V23Services__SmartCampaignSettingOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * The response content type setting. Determines whether the mutable resource
   * or just the resource name should be returned post mutation.
   */
  responseContentType?:  | "UNSPECIFIED" | "RESOURCE_NAME_ONLY" | "MUTABLE_RESOURCE";
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest(data: any): GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest(data: any): GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(item))) : undefined,
  };
}

/**
 * Response message for campaign mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateSmartCampaignSettingResult[];
}

/**
 * The result for the user list customer type mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListCustomerTypeResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for UserListCustomerTypeService.MutateUserListCustomerTypes.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListCustomerTypesRequest {
  /**
   * Required. The list of operations to perform on the user list customer
   * types.
   */
  operations?: GoogleAdsSearchads360V23Services__UserListCustomerTypeOperation[];
  /**
   * Optional. If true, successful operations will be carried out and invalid
   * operations will return errors. If false, all operations will be carried out
   * in one transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * Optional. If true, the request is validated but not executed. Only errors
   * are returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for a user list customer type mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListCustomerTypesResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateUserListCustomerTypeResult[];
}

/**
 * The result for the user list mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListResult {
  /**
   * Returned for successful operations.
   */
  resourceName?: string;
}

/**
 * Request message for UserListService.MutateUserLists.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListsRequest {
  /**
   * Required. The list of operations to perform on individual user lists.
   */
  operations?: GoogleAdsSearchads360V23Services__UserListOperation[];
  /**
   * If true, successful operations will be carried out and invalid operations
   * will return errors. If false, all operations will be carried out in one
   * transaction if and only if they are all valid. Default is false.
   */
  partialFailure?: boolean;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__MutateUserListsRequest(data: any): GoogleAdsSearchads360V23Services__MutateUserListsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__UserListOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__MutateUserListsRequest(data: any): GoogleAdsSearchads360V23Services__MutateUserListsRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__UserListOperation(item))) : undefined,
  };
}

/**
 * Response message for user list mutate.
 */
export interface GoogleAdsSearchads360V23Services__MutateUserListsResponse {
  /**
   * Errors that pertain to operation failures in the partial failure mode.
   * Returned only when partial_failure = true and all errors occur inside the
   * operations. If any errors occur outside the operations (for example, auth
   * errors), we return an RPC level error.
   */
  partialFailureError?: GoogleRpc__Status;
  /**
   * All results for the mutate.
   */
  results?: GoogleAdsSearchads360V23Services__MutateUserListResult[];
}

/**
 * Operation to be made for the AddOfflineUserDataJobOperationsRequest.
 */
export interface GoogleAdsSearchads360V23Services__OfflineUserDataJobOperation {
  /**
   * Add the provided data to the transaction. Data cannot be retrieved after
   * being uploaded.
   */
  create?: GoogleAdsSearchads360V23Common__UserData;
  /**
   * Remove the provided data from the transaction. Data cannot be retrieved
   * after being uploaded.
   */
  remove?: GoogleAdsSearchads360V23Common__UserData;
  /**
   * Remove all previously provided data. This is only supported for Customer
   * Match.
   */
  removeAll?: boolean;
}

function serializeGoogleAdsSearchads360V23Services__OfflineUserDataJobOperation(data: any): GoogleAdsSearchads360V23Services__OfflineUserDataJobOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserData(data["create"]) : undefined,
    remove: data["remove"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserData(data["remove"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__OfflineUserDataJobOperation(data: any): GoogleAdsSearchads360V23Services__OfflineUserDataJobOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserData(data["create"]) : undefined,
    remove: data["remove"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserData(data["remove"]) : undefined,
  };
}

/**
 * Audience metrics for the planned products. These metrics consider the
 * following targeting dimensions: - Location - PlannableAgeRange - Gender -
 * AudienceTargeting (only for youtube_audience_size)
 */
export interface GoogleAdsSearchads360V23Services__OnTargetAudienceMetrics {
  /**
   * Reference audience size matching the considered targeting for Census.
   */
  censusAudienceSize?: bigint;
  /**
   * Reference audience size matching the considered targeting for YouTube.
   */
  youtubeAudienceSize?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__OnTargetAudienceMetrics(data: any): GoogleAdsSearchads360V23Services__OnTargetAudienceMetrics {
  return {
    ...data,
    censusAudienceSize: data["censusAudienceSize"] !== undefined ? String(data["censusAudienceSize"]) : undefined,
    youtubeAudienceSize: data["youtubeAudienceSize"] !== undefined ? String(data["youtubeAudienceSize"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__OnTargetAudienceMetrics(data: any): GoogleAdsSearchads360V23Services__OnTargetAudienceMetrics {
  return {
    ...data,
    censusAudienceSize: data["censusAudienceSize"] !== undefined ? BigInt(data["censusAudienceSize"]) : undefined,
    youtubeAudienceSize: data["youtubeAudienceSize"] !== undefined ? BigInt(data["youtubeAudienceSize"]) : undefined,
  };
}

/**
 * A plannable location: country, metro region, province, etc.
 */
export interface GoogleAdsSearchads360V23Services__PlannableLocation {
  /**
   * The ISO-3166-1 alpha-2 country code that is associated with the location.
   */
  countryCode?: string;
  /**
   * The location identifier.
   */
  id?: string;
  /**
   * The location's type. Location types correspond to target_type returned by
   * .
   */
  locationType?: string;
  /**
   * The unique location name in English.
   */
  name?: string;
  /**
   * The parent country (not present if location is a country). If present,
   * will always be a GeoTargetConstant ID. Additional information such as
   * country name is provided by ReachPlanService.ListPlannableLocations or
   */
  parentCountryId?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__PlannableLocation(data: any): GoogleAdsSearchads360V23Services__PlannableLocation {
  return {
    ...data,
    parentCountryId: data["parentCountryId"] !== undefined ? String(data["parentCountryId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__PlannableLocation(data: any): GoogleAdsSearchads360V23Services__PlannableLocation {
  return {
    ...data,
    parentCountryId: data["parentCountryId"] !== undefined ? BigInt(data["parentCountryId"]) : undefined,
  };
}

/**
 * The targeting for which traffic metrics will be reported.
 */
export interface GoogleAdsSearchads360V23Services__PlannableTargeting {
  /**
   * Allowed plannable age ranges for the product for which metrics will be
   * reported. Actual targeting is computed by mapping this age range onto
   * standard Google common.AgeRangeInfo values.
   */
  ageRanges?:  | "UNSPECIFIED" | "UNKNOWN" | "AGE_RANGE_18_24" | "AGE_RANGE_18_34" | "AGE_RANGE_18_44" | "AGE_RANGE_18_49" | "AGE_RANGE_18_54" | "AGE_RANGE_18_64" | "AGE_RANGE_18_65_UP" | "AGE_RANGE_21_34" | "AGE_RANGE_25_34" | "AGE_RANGE_25_44" | "AGE_RANGE_25_49" | "AGE_RANGE_25_54" | "AGE_RANGE_25_64" | "AGE_RANGE_25_65_UP" | "AGE_RANGE_35_44" | "AGE_RANGE_35_49" | "AGE_RANGE_35_54" | "AGE_RANGE_35_64" | "AGE_RANGE_35_65_UP" | "AGE_RANGE_45_54" | "AGE_RANGE_45_64" | "AGE_RANGE_45_65_UP" | "AGE_RANGE_50_65_UP" | "AGE_RANGE_55_64" | "AGE_RANGE_55_65_UP" | "AGE_RANGE_65_UP"[];
  /**
   * Targetable devices for the ad product. TABLET device targeting is
   * automatically applied to reported metrics when MOBILE targeting is selected
   * for CPM_MASTHEAD, GOOGLE_PREFERRED_BUMPER, and GOOGLE_PREFERRED_SHORT
   * products.
   */
  devices?: GoogleAdsSearchads360V23Common__DeviceInfo[];
  /**
   * Targetable genders for the ad product.
   */
  genders?: GoogleAdsSearchads360V23Common__GenderInfo[];
  /**
   * Targetable networks for the ad product.
   */
  networks?:  | "UNSPECIFIED" | "UNKNOWN" | "YOUTUBE" | "GOOGLE_VIDEO_PARTNERS" | "YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS"[];
  /**
   * Targetable surface combinations for the ad product.
   */
  surfaceTargeting?: GoogleAdsSearchads360V23Services__SurfaceTargetingCombinations;
  /**
   * Targetable YouTube Select Lineups for the ad product.
   */
  youtubeSelectLineups?: GoogleAdsSearchads360V23Services__YouTubeSelectLineUp[];
}

function serializeGoogleAdsSearchads360V23Services__PlannableTargeting(data: any): GoogleAdsSearchads360V23Services__PlannableTargeting {
  return {
    ...data,
    youtubeSelectLineups: data["youtubeSelectLineups"] !== undefined ? data["youtubeSelectLineups"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__YouTubeSelectLineUp(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__PlannableTargeting(data: any): GoogleAdsSearchads360V23Services__PlannableTargeting {
  return {
    ...data,
    youtubeSelectLineups: data["youtubeSelectLineups"] !== undefined ? data["youtubeSelectLineups"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__YouTubeSelectLineUp(item))) : undefined,
  };
}

/**
 * A plannable user interest that can be targeted in a reach forecast using
 * ReachPlanService.GenerateReachForecast.
 */
export interface GoogleAdsSearchads360V23Services__PlannableUserInterest {
  /**
   * The user interest id.
   */
  userInterest?: GoogleAdsSearchads360V23Common__UserInterestInfo;
  /**
   * The user interest display name. For example, "Autos & Vehicles"
   */
  userInterestDisplayName?: string;
  /**
   * The user interest path. For example, "/Autos & Vehicles/Motor
   * Vehicles/Motor Vehicles by Type/Off-Road Vehicles"
   */
  userInterestPath?: string;
  /**
   * The user interest type.
   */
  userInterestType?:  | "UNSPECIFIED" | "UNKNOWN" | "AFFINITY" | "IN_MARKET" | "MOBILE_APP_INSTALL_USER" | "VERTICAL_GEO" | "NEW_SMART_PHONE_USER";
}

/**
 * A plannable user list.
 */
export interface GoogleAdsSearchads360V23Services__PlannableUserList {
  /**
   * The name of the user list.
   */
  displayName?: string;
  /**
   * The plannable status of the user list.
   */
  plannableStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "PLANNABLE" | "UNPLANNABLE";
  /**
   * The relevant metadata for this user list.
   */
  plannableUserListMetadata?: GoogleAdsSearchads360V23Services__PlannableUserListMetadata;
  /**
   * The user list ID.
   */
  userListInfo?: GoogleAdsSearchads360V23Common__UserListInfo;
  /**
   * The user list type.
   */
  userListType?:  | "UNSPECIFIED" | "UNKNOWN" | "REMARKETING" | "LOGICAL" | "EXTERNAL_REMARKETING" | "RULE_BASED" | "SIMILAR" | "CRM_BASED" | "LOOKALIKE";
}

/**
 * The metadata associated with a plannable user list.
 */
export interface GoogleAdsSearchads360V23Services__PlannableUserListMetadata {
  /**
   * The data source type of a CRM based user list.
   */
  userListCrmDataSourceType?:  | "UNSPECIFIED" | "UNKNOWN" | "FIRST_PARTY" | "THIRD_PARTY_CREDIT_BUREAU" | "THIRD_PARTY_VOTER_FILE" | "THIRD_PARTY_PARTNER_DATA";
}

/**
 * A product being planned for reach.
 */
export interface GoogleAdsSearchads360V23Services__PlannedProduct {
  /**
   * Targeting settings for the selected product. To list the available
   * targeting for each product use ReachPlanService.ListPlannableProducts.
   */
  advancedProductTargeting?: GoogleAdsSearchads360V23Services__AdvancedProductTargeting;
  /**
   * Required. Maximum budget allocation in micros for the selected product.
   * The value is specified in the selected planning currency_code. For example:
   * 1 000 000$ = 1 000 000 000 000 micros.
   */
  budgetMicros?: bigint;
  /**
   * Conversion rate as a decimal between 0 and 1, exclusive. For example: if
   * 2% of ad interactions are expected to lead to conversions, conversion_rate
   * should be 0.02. This field is required for DEMAND_GEN plannable products.
   * It is not supported for other plannable products.
   */
  conversionRate?: number;
  /**
   * Required. Selected product for planning. The code associated with the ad
   * product (for example: Trueview, Bumper). To list the available plannable
   * product codes use ReachPlanService.ListPlannableProducts.
   */
  plannableProductCode?: string;
}

function serializeGoogleAdsSearchads360V23Services__PlannedProduct(data: any): GoogleAdsSearchads360V23Services__PlannedProduct {
  return {
    ...data,
    advancedProductTargeting: data["advancedProductTargeting"] !== undefined ? serializeGoogleAdsSearchads360V23Services__AdvancedProductTargeting(data["advancedProductTargeting"]) : undefined,
    budgetMicros: data["budgetMicros"] !== undefined ? String(data["budgetMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__PlannedProduct(data: any): GoogleAdsSearchads360V23Services__PlannedProduct {
  return {
    ...data,
    advancedProductTargeting: data["advancedProductTargeting"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__AdvancedProductTargeting(data["advancedProductTargeting"]) : undefined,
    budgetMicros: data["budgetMicros"] !== undefined ? BigInt(data["budgetMicros"]) : undefined,
  };
}

/**
 * Forecasted traffic metrics for a planned product.
 */
export interface GoogleAdsSearchads360V23Services__PlannedProductForecast {
  /**
   * The number of times per selected time unit a user will see an ad, averaged
   * over the number of time units in the forecast length. This field will only
   * be populated for a Target Frequency campaign. See
   * https://support.google.com/google-ads/answer/12400225 for more information
   * about Target Frequency campaigns.
   */
  averageFrequency?: number;
  /**
   * The number of conversions. This metric is only available for DEMAND_GEN
   * plannable products. See
   * https://support.google.com/google-ads/answer/2375431 for more information
   * on conversions.
   */
  conversions?: number;
  /**
   * Number of ad impressions that exactly matches the Targeting including
   * co-viewers.
   */
  onTargetCoviewImpressions?: bigint;
  /**
   * Number of unique people reached that exactly matches the Targeting
   * including co-viewers.
   */
  onTargetCoviewReach?: bigint;
  /**
   * Number of ad impressions that exactly matches the Targeting.
   */
  onTargetImpressions?: bigint;
  /**
   * Number of unique people reached that exactly matches the Targeting. Note
   * that a minimum number of unique people must be reached in order for data to
   * be reported. If the minimum number is not met, the on_target_reach value
   * will be rounded to 0.
   */
  onTargetReach?: bigint;
  /**
   * Total number of ad impressions including co-viewers. This includes
   * impressions that may fall outside the specified Targeting, due to
   * insufficient information on signed-in users.
   */
  totalCoviewImpressions?: bigint;
  /**
   * Number of unique people reached including co-viewers. This includes people
   * that may fall outside the specified Targeting.
   */
  totalCoviewReach?: bigint;
  /**
   * Total number of ad impressions. This includes impressions that may fall
   * outside the specified Targeting, due to insufficient information on
   * signed-in users.
   */
  totalImpressions?: bigint;
  /**
   * Number of unique people reached. This includes people that may fall
   * outside the specified Targeting. Note that a minimum number of unique
   * people must be reached in order for data to be reported. If the minimum
   * number is not met, the total_reach value will be rounded to 0.
   */
  totalReach?: bigint;
  /**
   * Number of ad views forecasted for the specified product and targeting. A
   * TrueView View is counted when a viewer views a larger portion or the
   * entirety of an ad beyond an impression. See
   * https://support.google.com/google-ads/answer/2375431 for more information
   * on TrueView Views.
   */
  trueviewViews?: bigint;
  /**
   * Number of times the ad's impressions were considered viewable. See
   * https://support.google.com/google-ads/answer/7029393 for more information
   * about what makes an ad viewable and how viewability is measured.
   */
  viewableImpressions?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__PlannedProductForecast(data: any): GoogleAdsSearchads360V23Services__PlannedProductForecast {
  return {
    ...data,
    onTargetCoviewImpressions: data["onTargetCoviewImpressions"] !== undefined ? String(data["onTargetCoviewImpressions"]) : undefined,
    onTargetCoviewReach: data["onTargetCoviewReach"] !== undefined ? String(data["onTargetCoviewReach"]) : undefined,
    onTargetImpressions: data["onTargetImpressions"] !== undefined ? String(data["onTargetImpressions"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? String(data["onTargetReach"]) : undefined,
    totalCoviewImpressions: data["totalCoviewImpressions"] !== undefined ? String(data["totalCoviewImpressions"]) : undefined,
    totalCoviewReach: data["totalCoviewReach"] !== undefined ? String(data["totalCoviewReach"]) : undefined,
    totalImpressions: data["totalImpressions"] !== undefined ? String(data["totalImpressions"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? String(data["totalReach"]) : undefined,
    trueviewViews: data["trueviewViews"] !== undefined ? String(data["trueviewViews"]) : undefined,
    viewableImpressions: data["viewableImpressions"] !== undefined ? String(data["viewableImpressions"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__PlannedProductForecast(data: any): GoogleAdsSearchads360V23Services__PlannedProductForecast {
  return {
    ...data,
    onTargetCoviewImpressions: data["onTargetCoviewImpressions"] !== undefined ? BigInt(data["onTargetCoviewImpressions"]) : undefined,
    onTargetCoviewReach: data["onTargetCoviewReach"] !== undefined ? BigInt(data["onTargetCoviewReach"]) : undefined,
    onTargetImpressions: data["onTargetImpressions"] !== undefined ? BigInt(data["onTargetImpressions"]) : undefined,
    onTargetReach: data["onTargetReach"] !== undefined ? BigInt(data["onTargetReach"]) : undefined,
    totalCoviewImpressions: data["totalCoviewImpressions"] !== undefined ? BigInt(data["totalCoviewImpressions"]) : undefined,
    totalCoviewReach: data["totalCoviewReach"] !== undefined ? BigInt(data["totalCoviewReach"]) : undefined,
    totalImpressions: data["totalImpressions"] !== undefined ? BigInt(data["totalImpressions"]) : undefined,
    totalReach: data["totalReach"] !== undefined ? BigInt(data["totalReach"]) : undefined,
    trueviewViews: data["trueviewViews"] !== undefined ? BigInt(data["trueviewViews"]) : undefined,
    viewableImpressions: data["viewableImpressions"] !== undefined ? BigInt(data["viewableImpressions"]) : undefined,
  };
}

/**
 * The forecasted allocation and traffic metrics for a specific product at a
 * point on the reach curve.
 */
export interface GoogleAdsSearchads360V23Services__PlannedProductReachForecast {
  /**
   * The cost in micros. This may differ from the product's input allocation if
   * one or more planned products cannot fulfill the budget because of limited
   * inventory.
   */
  costMicros?: bigint;
  /**
   * Selected product for planning. The product codes returned are within the
   * set of the ones returned by ListPlannableProducts when using the same
   * location ID.
   */
  plannableProductCode?: string;
  /**
   * Forecasted traffic metrics for this product.
   */
  plannedProductForecast?: GoogleAdsSearchads360V23Services__PlannedProductForecast;
}

function serializeGoogleAdsSearchads360V23Services__PlannedProductReachForecast(data: any): GoogleAdsSearchads360V23Services__PlannedProductReachForecast {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    plannedProductForecast: data["plannedProductForecast"] !== undefined ? serializeGoogleAdsSearchads360V23Services__PlannedProductForecast(data["plannedProductForecast"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__PlannedProductReachForecast(data: any): GoogleAdsSearchads360V23Services__PlannedProductReachForecast {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    plannedProductForecast: data["plannedProductForecast"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__PlannedProductForecast(data["plannedProductForecast"]) : undefined,
  };
}

/**
 * The type and list of products to aggregate benchmarks metrics over.
 */
export interface GoogleAdsSearchads360V23Services__ProductFilter {
  /**
   * The list of marketing goals. Marketing objective is a broader product
   * classification of products.
   */
  marketingObjectiveList?: GoogleAdsSearchads360V23Services_ProductFilter_MarketingObjectiveList;
  /**
   * The list of products.
   */
  productList?: GoogleAdsSearchads360V23Services_ProductFilter_ProductList;
}

/**
 * The metadata associated with an available plannable product.
 */
export interface GoogleAdsSearchads360V23Services__ProductMetadata {
  /**
   * The code associated with the ad product (for example: BUMPER,
   * TRUEVIEW_IN_STREAM). To list the available plannable product codes use
   * ReachPlanService.ListPlannableProducts.
   */
  plannableProductCode?: string;
  /**
   * The name associated with the ad product.
   */
  plannableProductName?: string;
  /**
   * The allowed plannable targeting for this product.
   */
  plannableTargeting?: GoogleAdsSearchads360V23Services__PlannableTargeting;
}

function serializeGoogleAdsSearchads360V23Services__ProductMetadata(data: any): GoogleAdsSearchads360V23Services__ProductMetadata {
  return {
    ...data,
    plannableTargeting: data["plannableTargeting"] !== undefined ? serializeGoogleAdsSearchads360V23Services__PlannableTargeting(data["plannableTargeting"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ProductMetadata(data: any): GoogleAdsSearchads360V23Services__ProductMetadata {
  return {
    ...data,
    plannableTargeting: data["plannableTargeting"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__PlannableTargeting(data["plannableTargeting"]) : undefined,
  };
}

/**
 * Request message for CampaignDraftService.PromoteCampaignDraft.
 */
export interface GoogleAdsSearchads360V23Services__PromoteCampaignDraftRequest {
  /**
   * If true, the request is validated but no Long Running Operation is
   * created. Only errors are returned.
   */
  validateOnly?: boolean;
}

/**
 * The metadata of the promoted experiment.
 */
export interface GoogleAdsSearchads360V23Services__PromoteExperimentMetadata {
  /**
   * Required. The promoted experiment.
   */
  experiment?: string;
}

/**
 * Request message for ExperimentService.PromoteExperiment.
 */
export interface GoogleAdsSearchads360V23Services__PromoteExperimentRequest {
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Request message for LocalServicesLeadService.ProvideLeadFeedback.
 */
export interface GoogleAdsSearchads360V23Services__ProvideLeadFeedbackRequest {
  /**
   * Required. Survey answer for Local Services Ads Lead.
   */
  surveyAnswer?:  | "UNSPECIFIED" | "UNKNOWN" | "VERY_SATISFIED" | "SATISFIED" | "NEUTRAL" | "DISSATISFIED" | "VERY_DISSATISFIED";
  /**
   * Details about various factors for not being satisfied with the lead.
   */
  surveyDissatisfied?: GoogleAdsSearchads360V23Services__SurveyDissatisfied;
  /**
   * Details about various factors for being satisfied with the lead.
   */
  surveySatisfied?: GoogleAdsSearchads360V23Services__SurveySatisfied;
}

/**
 * Response message for LocalServicesLeadService.ProvideLeadFeedback.
 */
export interface GoogleAdsSearchads360V23Services__ProvideLeadFeedbackResponse {
  /**
   * Required. Decision of bonus credit issued or rejected. If a bonus credit
   * is issued, it will be available for use in about two months.
   */
  creditIssuanceDecision?:  | "UNSPECIFIED" | "UNKNOWN" | "SUCCESS_NOT_REACHED_THRESHOLD" | "SUCCESS_REACHED_THRESHOLD" | "FAIL_OVER_THRESHOLD" | "FAIL_NOT_ELIGIBLE";
}

/**
 * Average rate metrics. Metrics that represent monetary values are returned in
 * USD by default, if unspecified in the request.
 */
export interface GoogleAdsSearchads360V23Services__RateMetrics {
  /**
   * The percentage of time when your ad appeared on an Active View enabled
   * site (measurable impressions) and was viewable (viewable impressions).
   */
  activeViewViewability?: number;
  /**
   * Average cost-per-thousand viewable impressions.
   */
  averageActiveViewCpm?: number;
  /**
   * The average cost-per-click (CPC) is defined by the total cost of all
   * clicks divided by the total number of clicks received.
   */
  averageCpc?: number;
  /**
   * The average cost-per-engagement (CPE) is defined by the total cost of all
   * ad engagements divided by the total number of ad engagements.
   */
  averageCpe?: number;
  /**
   * The average cost-per-interaction (CPI) is defined by the total cost of all
   * interactions divided by the total number of interactions.
   */
  averageCpi?: number;
  /**
   * Average cost-per-thousand impressions (CPM).
   */
  averageCpm?: number;
  /**
   * The number of clicks your ad receives (Clicks) divided by the number of
   * times your ad is shown (Impressions).
   */
  clickThroughRate?: number;
  /**
   * How often people engage with your ad after it's shown to them. This is the
   * number of ad expansions divided by the number of times your ad is shown.
   */
  engagementRate?: number;
  /**
   * How often people interact with your ad after it is shown to them. This is
   * the number of interactions divided by the number of times your ad is shown.
   */
  interactionRate?: number;
  /**
   * The average TrueView cost-per-view (CPV) is defined by the total cost of
   * all ad TrueView views divided by the number of TrueView views.
   */
  trueviewAverageCpv?: number;
  /**
   * Number of completed TrueView views divided by the number of impressions.
   */
  trueviewViewRate?: number;
  /**
   * Percentage of impressions where the viewer watched all of your video.
   */
  videoCompletionP100Rate?: number;
  /**
   * Percentage of impressions where the viewer watched 25% of your video.
   */
  videoCompletionP25Rate?: number;
  /**
   * Percentage of impressions where the viewer watched 50% of your video.
   */
  videoCompletionP50Rate?: number;
  /**
   * Percentage of impressions where the viewer watched 75% of your video.
   */
  videoCompletionP75Rate?: number;
}

/**
 * Message for raw event conversion dimension header.
 */
export interface GoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader {
  /**
   * The conversion custom variable ID.
   */
  id?: bigint;
  /**
   * The user defined name of the raw event dimension.
   */
  name?: string;
}

function serializeGoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader(data: any): GoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader(data: any): GoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * Message for raw event conversion metric header.
 */
export interface GoogleAdsSearchads360V23Services__RawEventConversionMetricHeader {
  /**
   * The conversion custom variable ID.
   */
  id?: bigint;
  /**
   * The user defined name of the raw event metric.
   */
  name?: string;
}

function serializeGoogleAdsSearchads360V23Services__RawEventConversionMetricHeader(data: any): GoogleAdsSearchads360V23Services__RawEventConversionMetricHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? String(data["id"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__RawEventConversionMetricHeader(data: any): GoogleAdsSearchads360V23Services__RawEventConversionMetricHeader {
  return {
    ...data,
    id: data["id"] !== undefined ? BigInt(data["id"]) : undefined,
  };
}

/**
 * The reach curve for the planned products.
 */
export interface GoogleAdsSearchads360V23Services__ReachCurve {
  /**
   * All points on the reach curve.
   */
  reachForecasts?: GoogleAdsSearchads360V23Services__ReachForecast[];
}

function serializeGoogleAdsSearchads360V23Services__ReachCurve(data: any): GoogleAdsSearchads360V23Services__ReachCurve {
  return {
    ...data,
    reachForecasts: data["reachForecasts"] !== undefined ? data["reachForecasts"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ReachForecast(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ReachCurve(data: any): GoogleAdsSearchads360V23Services__ReachCurve {
  return {
    ...data,
    reachForecasts: data["reachForecasts"] !== undefined ? data["reachForecasts"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ReachForecast(item))) : undefined,
  };
}

/**
 * A point on reach curve.
 */
export interface GoogleAdsSearchads360V23Services__ReachForecast {
  /**
   * The cost in micros.
   */
  costMicros?: bigint;
  /**
   * Forecasted traffic metrics for this point.
   */
  forecast?: GoogleAdsSearchads360V23Services__Forecast;
  /**
   * The forecasted allocation and traffic metrics for each planned product at
   * this point on the reach curve.
   */
  plannedProductReachForecasts?: GoogleAdsSearchads360V23Services__PlannedProductReachForecast[];
}

function serializeGoogleAdsSearchads360V23Services__ReachForecast(data: any): GoogleAdsSearchads360V23Services__ReachForecast {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? String(data["costMicros"]) : undefined,
    forecast: data["forecast"] !== undefined ? serializeGoogleAdsSearchads360V23Services__Forecast(data["forecast"]) : undefined,
    plannedProductReachForecasts: data["plannedProductReachForecasts"] !== undefined ? data["plannedProductReachForecasts"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__PlannedProductReachForecast(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__ReachForecast(data: any): GoogleAdsSearchads360V23Services__ReachForecast {
  return {
    ...data,
    costMicros: data["costMicros"] !== undefined ? BigInt(data["costMicros"]) : undefined,
    forecast: data["forecast"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__Forecast(data["forecast"]) : undefined,
    plannedProductReachForecasts: data["plannedProductReachForecasts"] !== undefined ? data["plannedProductReachForecasts"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__PlannedProductReachForecast(item))) : undefined,
  };
}

/**
 * A single operation (create, update) on a recommendation subscription.
 * RecommendationSubscriptionService.MutateRecommendationSubscription
 */
export interface GoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation {
  /**
   * Create operation: No resource name is expected for the new subscription.
   */
  create?: GoogleAdsSearchads360V23Resources__RecommendationSubscription;
  /**
   * Update operation: The subscription is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__RecommendationSubscription;
  /**
   * Optional. FieldMask that determines which resource fields are modified in
   * an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(data: any): GoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation(data: any): GoogleAdsSearchads360V23Services__RecommendationSubscriptionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Request message for
 * ThirdPartyAppAnalyticsLinkService.RegenerateShareableLinkId.
 */
export interface GoogleAdsSearchads360V23Services__RegenerateShareableLinkIdRequest {
}

/**
 * Response message for
 * ThirdPartyAppAnalyticsLinkService.RegenerateShareableLinkId.
 */
export interface GoogleAdsSearchads360V23Services__RegenerateShareableLinkIdResponse {
}

/**
 * A single operation (create, update) on a remarketing action.
 */
export interface GoogleAdsSearchads360V23Services__RemarketingActionOperation {
  /**
   * Create operation: No resource name is expected for the new remarketing
   * action.
   */
  create?: GoogleAdsSearchads360V23Resources__RemarketingAction;
  /**
   * Update operation: The remarketing action is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__RemarketingAction;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(data: any): GoogleAdsSearchads360V23Services__RemarketingActionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__RemarketingActionOperation(data: any): GoogleAdsSearchads360V23Services__RemarketingActionOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Request message for AdGroupAdService.RemoveAutomaticallyCreatedAssets.
 */
export interface GoogleAdsSearchads360V23Services__RemoveAutomaticallyCreatedAssetsRequest {
  /**
   * Required. List of assets with field type to be removed from the AdGroupAd.
   */
  assetsWithFieldType?: GoogleAdsSearchads360V23Services__AssetsWithFieldType[];
}

/**
 * A single operation to remove an automatically created asset from a campaign.
 */
export interface GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetOperation {
  /**
   * Required. The resource name of the asset to remove.
   */
  asset?: string;
  /**
   * Required. The resource name of the campaign.
   */
  campaign?: string;
  /**
   * Required. The field type of the asset to remove.
   */
  fieldType?:  | "UNSPECIFIED" | "UNKNOWN" | "HEADLINE" | "DESCRIPTION" | "MANDATORY_AD_TEXT" | "MARKETING_IMAGE" | "MEDIA_BUNDLE" | "YOUTUBE_VIDEO" | "BOOK_ON_GOOGLE" | "LEAD_FORM" | "PROMOTION" | "CALLOUT" | "STRUCTURED_SNIPPET" | "SITELINK" | "MOBILE_APP" | "HOTEL_CALLOUT" | "CALL" | "PRICE" | "LONG_HEADLINE" | "BUSINESS_NAME" | "SQUARE_MARKETING_IMAGE" | "PORTRAIT_MARKETING_IMAGE" | "LOGO" | "LANDSCAPE_LOGO" | "VIDEO" | "CALL_TO_ACTION_SELECTION" | "AD_IMAGE" | "BUSINESS_LOGO" | "HOTEL_PROPERTY" | "DEMAND_GEN_CAROUSEL_CARD" | "BUSINESS_MESSAGE" | "TALL_PORTRAIT_MARKETING_IMAGE" | "LANDING_PAGE_PREVIEW" | "LONG_DESCRIPTION" | "CALL_TO_ACTION";
}

/**
 * Request message for
 * AutomaticallyCreatedAssetRemovalService.RemoveCampaignAutomaticallyCreatedAsset.
 */
export interface GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetRequest {
  /**
   * Required. The list of operations.
   */
  operations?: GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetOperation[];
  /**
   * Required. If true, successful operations will be carried out and invalid
   * operations will return errors. If false, all operations will be carried out
   * in one transaction if and only if they are all valid.
   */
  partialFailure?: boolean;
}

/**
 * Response message for
 * AutomaticallyCreatedAssetRemovalService.RemoveCampaignAutomaticallyCreatedAsset.
 */
export interface GoogleAdsSearchads360V23Services__RemoveCampaignAutomaticallyCreatedAssetResponse {
  /**
   * Errors that pertain to AutomaticallyCreatedAssetRemoval failures in the
   * partial failure mode. Returned when all errors occur inside the operations.
   * If any errors occur outside the operations (for example, auth errors), RPC
   * level error will be returned. See
   * https://developers.google.com/google-ads/api/docs/best-practices/partial-failures
   * for more information about partial failure.
   */
  partialFailureError?: GoogleRpc__Status;
}

/**
 * Request message for DataLinkService.RemoveDataLink.
 */
export interface GoogleAdsSearchads360V23Services__RemoveDataLinkRequest {
  /**
   * Required. The data link is expected to have a valid resource name.
   */
  resourceName?: string;
}

/**
 * Response message for DataLinkService.RemoveDataLink.
 */
export interface GoogleAdsSearchads360V23Services__RemoveDataLinkResponse {
  /**
   * Result for the remove request.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ProductLinkInvitationService.RemoveProductLinkInvitation.
 */
export interface GoogleAdsSearchads360V23Services__RemoveProductLinkInvitationRequest {
  /**
   * Required. The resource name of the product link invitation being removed.
   * expected, in this format: ` `
   */
  resourceName?: string;
}

/**
 * Response message for product link invitation removeal.
 */
export interface GoogleAdsSearchads360V23Services__RemoveProductLinkInvitationResponse {
  /**
   * Result for the remove request.
   */
  resourceName?: string;
}

/**
 * Request message for ProductLinkService.RemoveProductLink.
 */
export interface GoogleAdsSearchads360V23Services__RemoveProductLinkRequest {
  /**
   * Required. Remove operation: A resource name for the product link to remove
   * is expected, in this format: ` `
   */
  resourceName?: string;
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * Response message for product link removal.
 */
export interface GoogleAdsSearchads360V23Services__RemoveProductLinkResponse {
  /**
   * Result for the remove request.
   */
  resourceName?: string;
}

/**
 * Request message for BatchJobService.RunBatchJob.
 */
export interface GoogleAdsSearchads360V23Services__RunBatchJobRequest {
}

/**
 * Request message for OfflineUserDataJobService.RunOfflineUserDataJob.
 */
export interface GoogleAdsSearchads360V23Services__RunOfflineUserDataJobRequest {
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * The metadata of the scheduled experiment.
 */
export interface GoogleAdsSearchads360V23Services__ScheduleExperimentMetadata {
  /**
   * Required. The scheduled experiment.
   */
  experiment?: string;
}

/**
 * Request message for ExperimentService.ScheduleExperiment.
 */
export interface GoogleAdsSearchads360V23Services__ScheduleExperimentRequest {
  /**
   * If true, the request is validated but not executed. Only errors are
   * returned, not results.
   */
  validateOnly?: boolean;
}

/**
 * A single operation (update) on a Search Ads 360 campaign.
 */
export interface GoogleAdsSearchads360V23Services__SearchAds360CampaignOperation {
  /**
   * Update operation: The Search Ads 360 campaign is expected to have a valid
   * resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__SearchAds360Campaign;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__SearchAds360CampaignOperation(data: any): GoogleAdsSearchads360V23Services__SearchAds360CampaignOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SearchAds360CampaignOperation(data: any): GoogleAdsSearchads360V23Services__SearchAds360CampaignOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A returned row from the query.
 */
export interface GoogleAdsSearchads360V23Services__SearchAds360Row {
  /**
   * The accessible bidding strategy referenced in the query.
   */
  accessibleBiddingStrategy?: GoogleAdsSearchads360V23Resources__AccessibleBiddingStrategy;
  /**
   * The account budget in the query.
   */
  accountBudget?: GoogleAdsSearchads360V23Resources__AccountBudget;
  /**
   * The account budget proposal referenced in the query.
   */
  accountBudgetProposal?: GoogleAdsSearchads360V23Resources__AccountBudgetProposal;
  /**
   * The AccountLink referenced in the query.
   */
  accountLink?: GoogleAdsSearchads360V23Resources__AccountLink;
  /**
   * The Ad referenced in the query.
   */
  ad?: GoogleAdsSearchads360V23Resources__Ad;
  /**
   * The ad group referenced in the query.
   */
  adGroup?: GoogleAdsSearchads360V23Resources__AdGroup;
  /**
   * The ad referenced in the query.
   */
  adGroupAd?: GoogleAdsSearchads360V23Resources__AdGroupAd;
  /**
   * The ad group ad asset combination view in the query.
   */
  adGroupAdAssetCombinationView?: GoogleAdsSearchads360V23Resources__AdGroupAdAssetCombinationView;
  /**
   * The ad group ad asset view in the query.
   */
  adGroupAdAssetView?: GoogleAdsSearchads360V23Resources__AdGroupAdAssetView;
  /**
   * The ad group ad effective label referenced in the query.
   */
  adGroupAdEffectiveLabel?: GoogleAdsSearchads360V23Resources__AdGroupAdEffectiveLabel;
  /**
   * The ad group ad label referenced in the query.
   */
  adGroupAdLabel?: GoogleAdsSearchads360V23Resources__AdGroupAdLabel;
  /**
   * The ad group asset referenced in the query.
   */
  adGroupAsset?: GoogleAdsSearchads360V23Resources__AdGroupAsset;
  /**
   * The ad group asset set referenced in the query.
   */
  adGroupAssetSet?: GoogleAdsSearchads360V23Resources__AdGroupAssetSet;
  /**
   * The ad group audience view referenced in the query.
   */
  adGroupAudienceView?: GoogleAdsSearchads360V23Resources__AdGroupAudienceView;
  /**
   * The bid modifier referenced in the query.
   */
  adGroupBidModifier?: GoogleAdsSearchads360V23Resources__AdGroupBidModifier;
  /**
   * The criterion referenced in the query.
   */
  adGroupCriterion?: GoogleAdsSearchads360V23Resources__AdGroupCriterion;
  /**
   * The ad group criterion customizer referenced in the query.
   */
  adGroupCriterionCustomizer?: GoogleAdsSearchads360V23Resources__AdGroupCriterionCustomizer;
  /**
   * The ad group criterion effective label referenced in the query.
   */
  adGroupCriterionEffectiveLabel?: GoogleAdsSearchads360V23Resources__AdGroupCriterionEffectiveLabel;
  /**
   * The ad group criterion label referenced in the query.
   */
  adGroupCriterionLabel?: GoogleAdsSearchads360V23Resources__AdGroupCriterionLabel;
  /**
   * The ad group criterion simulation referenced in the query.
   */
  adGroupCriterionSimulation?: GoogleAdsSearchads360V23Resources__AdGroupCriterionSimulation;
  /**
   * The ad group customizer referenced in the query.
   */
  adGroupCustomizer?: GoogleAdsSearchads360V23Resources__AdGroupCustomizer;
  /**
   * The ad group effective label referenced in the query.
   */
  adGroupEffectiveLabel?: GoogleAdsSearchads360V23Resources__AdGroupEffectiveLabel;
  /**
   * The ad group label referenced in the query.
   */
  adGroupLabel?: GoogleAdsSearchads360V23Resources__AdGroupLabel;
  /**
   * The ad group simulation referenced in the query.
   */
  adGroupSimulation?: GoogleAdsSearchads360V23Resources__AdGroupSimulation;
  /**
   * The ad parameter referenced in the query.
   */
  adParameter?: GoogleAdsSearchads360V23Resources__AdParameter;
  /**
   * The ad schedule view referenced in the query.
   */
  adScheduleView?: GoogleAdsSearchads360V23Resources__AdScheduleView;
  /**
   * The age range view referenced in the query.
   */
  ageRangeView?: GoogleAdsSearchads360V23Resources__AgeRangeView;
  /**
   * The AI Max search term ad combination view referenced in the query.
   */
  aiMaxSearchTermAdCombinationView?: GoogleAdsSearchads360V23Resources__AiMaxSearchTermAdCombinationView;
  /**
   * The android privacy shared key google ad group referenced in the query.
   */
  androidPrivacySharedKeyGoogleAdGroup?: GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleAdGroup;
  /**
   * The android privacy shared key google campaign referenced in the query.
   */
  androidPrivacySharedKeyGoogleCampaign?: GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleCampaign;
  /**
   * The android privacy shared key google network type referenced in the
   * query.
   */
  androidPrivacySharedKeyGoogleNetworkType?: GoogleAdsSearchads360V23Resources__AndroidPrivacySharedKeyGoogleNetworkType;
  /**
   * The asset referenced in the query.
   */
  asset?: GoogleAdsSearchads360V23Resources__Asset;
  /**
   * The asset field type view referenced in the query.
   */
  assetFieldTypeView?: GoogleAdsSearchads360V23Resources__AssetFieldTypeView;
  /**
   * The asset group referenced in the query.
   */
  assetGroup?: GoogleAdsSearchads360V23Resources__AssetGroup;
  /**
   * The asset group asset referenced in the query.
   */
  assetGroupAsset?: GoogleAdsSearchads360V23Resources__AssetGroupAsset;
  /**
   * The asset group listing group filter referenced in the query.
   */
  assetGroupListingGroupFilter?: GoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter;
  /**
   * The asset group product group view referenced in the query.
   */
  assetGroupProductGroupView?: GoogleAdsSearchads360V23Resources__AssetGroupProductGroupView;
  /**
   * The asset group signal referenced in the query.
   */
  assetGroupSignal?: GoogleAdsSearchads360V23Resources__AssetGroupSignal;
  /**
   * The asset group top combination view referenced in the query.
   */
  assetGroupTopCombinationView?: GoogleAdsSearchads360V23Resources__AssetGroupTopCombinationView;
  /**
   * The asset set referenced in the query.
   */
  assetSet?: GoogleAdsSearchads360V23Resources__AssetSet;
  /**
   * The asset set asset referenced in the query.
   */
  assetSetAsset?: GoogleAdsSearchads360V23Resources__AssetSetAsset;
  /**
   * The asset set type view referenced in the query.
   */
  assetSetTypeView?: GoogleAdsSearchads360V23Resources__AssetSetTypeView;
  /**
   * The Audience referenced in the query.
   */
  audience?: GoogleAdsSearchads360V23Resources__Audience;
  /**
   * The batch job referenced in the query.
   */
  batchJob?: GoogleAdsSearchads360V23Resources__BatchJob;
  /**
   * The bidding data exclusion referenced in the query.
   */
  biddingDataExclusion?: GoogleAdsSearchads360V23Resources__BiddingDataExclusion;
  /**
   * The bidding seasonality adjustment referenced in the query.
   */
  biddingSeasonalityAdjustment?: GoogleAdsSearchads360V23Resources__BiddingSeasonalityAdjustment;
  /**
   * The bidding strategy referenced in the query.
   */
  biddingStrategy?: GoogleAdsSearchads360V23Resources__BiddingStrategy;
  /**
   * The bidding strategy simulation referenced in the query.
   */
  biddingStrategySimulation?: GoogleAdsSearchads360V23Resources__BiddingStrategySimulation;
  /**
   * The billing setup referenced in the query.
   */
  billingSetup?: GoogleAdsSearchads360V23Resources__BillingSetup;
  /**
   * The call view referenced in the query.
   */
  callView?: GoogleAdsSearchads360V23Resources__CallView;
  /**
   * The campaign referenced in the query.
   */
  campaign?: GoogleAdsSearchads360V23Resources__Campaign;
  /**
   * The campaign asset referenced in the query.
   */
  campaignAsset?: GoogleAdsSearchads360V23Resources__CampaignAsset;
  /**
   * The campaign asset set referenced in the query.
   */
  campaignAssetSet?: GoogleAdsSearchads360V23Resources__CampaignAssetSet;
  /**
   * The campaign audience view referenced in the query.
   */
  campaignAudienceView?: GoogleAdsSearchads360V23Resources__CampaignAudienceView;
  /**
   * The campaign bid modifier referenced in the query.
   */
  campaignBidModifier?: GoogleAdsSearchads360V23Resources__CampaignBidModifier;
  /**
   * The campaign budget referenced in the query.
   */
  campaignBudget?: GoogleAdsSearchads360V23Resources__CampaignBudget;
  /**
   * The CampaignConversionGoal referenced in the query.
   */
  campaignConversionGoal?: GoogleAdsSearchads360V23Resources__CampaignConversionGoal;
  /**
   * The campaign criterion referenced in the query.
   */
  campaignCriterion?: GoogleAdsSearchads360V23Resources__CampaignCriterion;
  /**
   * The campaign customizer referenced in the query.
   */
  campaignCustomizer?: GoogleAdsSearchads360V23Resources__CampaignCustomizer;
  /**
   * The campaign draft referenced in the query.
   */
  campaignDraft?: GoogleAdsSearchads360V23Resources__CampaignDraft;
  /**
   * The campaign effective label referenced in the query.
   */
  campaignEffectiveLabel?: GoogleAdsSearchads360V23Resources__CampaignEffectiveLabel;
  /**
   * The campaign goal config referenced in the query.
   */
  campaignGoalConfig?: GoogleAdsSearchads360V23Resources__CampaignGoalConfig;
  /**
   * Campaign Group referenced in AWQL query.
   */
  campaignGroup?: GoogleAdsSearchads360V23Resources__CampaignGroup;
  /**
   * The campaign label referenced in the query.
   */
  campaignLabel?: GoogleAdsSearchads360V23Resources__CampaignLabel;
  /**
   * The campaign lifecycle goal referenced in the query.
   */
  campaignLifecycleGoal?: GoogleAdsSearchads360V23Resources__CampaignLifecycleGoal;
  /**
   * The campaign search term insight referenced in the query.
   */
  campaignSearchTermInsight?: GoogleAdsSearchads360V23Resources__CampaignSearchTermInsight;
  /**
   * The campaign-level search term view referenced in the query.
   */
  campaignSearchTermView?: GoogleAdsSearchads360V23Resources__CampaignSearchTermView;
  /**
   * Campaign Shared Set referenced in AWQL query.
   */
  campaignSharedSet?: GoogleAdsSearchads360V23Resources__CampaignSharedSet;
  /**
   * The campaign simulation referenced in the query.
   */
  campaignSimulation?: GoogleAdsSearchads360V23Resources__CampaignSimulation;
  /**
   * The carrier constant referenced in the query.
   */
  carrierConstant?: GoogleAdsSearchads360V23Resources__CarrierConstant;
  /**
   * The cart data sales view referenced in the query.
   */
  cartDataSalesView?: GoogleAdsSearchads360V23Resources__CartDataSalesView;
  /**
   * The ChangeEvent referenced in the query.
   */
  changeEvent?: GoogleAdsSearchads360V23Resources__ChangeEvent;
  /**
   * The ChangeStatus referenced in the query.
   */
  changeStatus?: GoogleAdsSearchads360V23Resources__ChangeStatus;
  /**
   * The ClickView referenced in the query.
   */
  clickView?: GoogleAdsSearchads360V23Resources__ClickView;
  /**
   * The CombinedAudience referenced in the query.
   */
  combinedAudience?: GoogleAdsSearchads360V23Resources__CombinedAudience;
  /**
   * The content criterion view referenced in the query.
   */
  contentCriterionView?: GoogleAdsSearchads360V23Resources__ContentCriterionView;
  /**
   * The event level conversion referenced in the query.
   */
  conversion?: GoogleAdsSearchads360V23Resources__Conversion;
  /**
   * The conversion action referenced in the query.
   */
  conversionAction?: GoogleAdsSearchads360V23Resources__ConversionAction;
  /**
   * The conversion custom variable referenced in the query.
   */
  conversionCustomVariable?: GoogleAdsSearchads360V23Resources__ConversionCustomVariable;
  /**
   * The ConversionGoalCampaignConfig referenced in the query.
   */
  conversionGoalCampaignConfig?: GoogleAdsSearchads360V23Resources__ConversionGoalCampaignConfig;
  /**
   * The conversion value rule referenced in the query.
   */
  conversionValueRule?: GoogleAdsSearchads360V23Resources__ConversionValueRule;
  /**
   * The conversion value rule set referenced in the query.
   */
  conversionValueRuleSet?: GoogleAdsSearchads360V23Resources__ConversionValueRuleSet;
  /**
   * The currency constant referenced in the query.
   */
  currencyConstant?: GoogleAdsSearchads360V23Resources__CurrencyConstant;
  /**
   * The CustomAudience referenced in the query.
   */
  customAudience?: GoogleAdsSearchads360V23Resources__CustomAudience;
  /**
   * The custom columns.
   */
  customColumns?: GoogleAdsSearchads360V23Common__Value[];
  /**
   * The CustomConversionGoal referenced in the query.
   */
  customConversionGoal?: GoogleAdsSearchads360V23Resources__CustomConversionGoal;
  /**
   * The customer referenced in the query.
   */
  customer?: GoogleAdsSearchads360V23Resources__Customer;
  /**
   * The customer asset referenced in the query.
   */
  customerAsset?: GoogleAdsSearchads360V23Resources__CustomerAsset;
  /**
   * The customer asset set referenced in the query.
   */
  customerAssetSet?: GoogleAdsSearchads360V23Resources__CustomerAssetSet;
  /**
   * The CustomerClient referenced in the query.
   */
  customerClient?: GoogleAdsSearchads360V23Resources__CustomerClient;
  /**
   * The CustomerClientLink referenced in the query.
   */
  customerClientLink?: GoogleAdsSearchads360V23Resources__CustomerClientLink;
  /**
   * The CustomerConversionGoal referenced in the query.
   */
  customerConversionGoal?: GoogleAdsSearchads360V23Resources__CustomerConversionGoal;
  /**
   * The customer customizer referenced in the query.
   */
  customerCustomizer?: GoogleAdsSearchads360V23Resources__CustomerCustomizer;
  /**
   * The customer label referenced in the query.
   */
  customerLabel?: GoogleAdsSearchads360V23Resources__CustomerLabel;
  /**
   * The customer lifecycle goal referenced in the query.
   */
  customerLifecycleGoal?: GoogleAdsSearchads360V23Resources__CustomerLifecycleGoal;
  /**
   * The CustomerManagerLink referenced in the query.
   */
  customerManagerLink?: GoogleAdsSearchads360V23Resources__CustomerManagerLink;
  /**
   * The customer negative criterion referenced in the query.
   */
  customerNegativeCriterion?: GoogleAdsSearchads360V23Resources__CustomerNegativeCriterion;
  /**
   * The customer search term insight referenced in the query.
   */
  customerSearchTermInsight?: GoogleAdsSearchads360V23Resources__CustomerSearchTermInsight;
  /**
   * The CustomerUserAccess referenced in the query.
   */
  customerUserAccess?: GoogleAdsSearchads360V23Resources__CustomerUserAccess;
  /**
   * The CustomerUserAccessInvitation referenced in the query.
   */
  customerUserAccessInvitation?: GoogleAdsSearchads360V23Resources__CustomerUserAccessInvitation;
  /**
   * The CustomInterest referenced in the query.
   */
  customInterest?: GoogleAdsSearchads360V23Resources__CustomInterest;
  /**
   * The customizer attribute referenced in the query.
   */
  customizerAttribute?: GoogleAdsSearchads360V23Resources__CustomizerAttribute;
  /**
   * The data link referenced in the query.
   */
  dataLink?: GoogleAdsSearchads360V23Resources__DataLink;
  /**
   * The detail content suitability placement view referenced in the query.
   */
  detailContentSuitabilityPlacementView?: GoogleAdsSearchads360V23Resources__DetailContentSuitabilityPlacementView;
  /**
   * The detailed demographic referenced in the query.
   */
  detailedDemographic?: GoogleAdsSearchads360V23Resources__DetailedDemographic;
  /**
   * The detail placement view referenced in the query.
   */
  detailPlacementView?: GoogleAdsSearchads360V23Resources__DetailPlacementView;
  /**
   * The display keyword view referenced in the query.
   */
  displayKeywordView?: GoogleAdsSearchads360V23Resources__DisplayKeywordView;
  /**
   * The distance view referenced in the query.
   */
  distanceView?: GoogleAdsSearchads360V23Resources__DistanceView;
  /**
   * The dynamic search ads search term view referenced in the query.
   */
  dynamicSearchAdsSearchTermView?: GoogleAdsSearchads360V23Resources__DynamicSearchAdsSearchTermView;
  /**
   * The expanded landing page view referenced in the query.
   */
  expandedLandingPageView?: GoogleAdsSearchads360V23Resources__ExpandedLandingPageView;
  /**
   * The experiment referenced in the query.
   */
  experiment?: GoogleAdsSearchads360V23Resources__Experiment;
  /**
   * The experiment arm referenced in the query.
   */
  experimentArm?: GoogleAdsSearchads360V23Resources__ExperimentArm;
  /**
   * The final url expansion asset view referenced in the query.
   */
  finalUrlExpansionAssetView?: GoogleAdsSearchads360V23Resources__FinalUrlExpansionAssetView;
  /**
   * The gender view referenced in the query.
   */
  genderView?: GoogleAdsSearchads360V23Resources__GenderView;
  /**
   * The geographic view referenced in the query.
   */
  geographicView?: GoogleAdsSearchads360V23Resources__GeographicView;
  /**
   * The geo target constant referenced in the query.
   */
  geoTargetConstant?: GoogleAdsSearchads360V23Resources__GeoTargetConstant;
  /**
   * The goal in the query.
   */
  goal?: GoogleAdsSearchads360V23Resources__Goal;
  /**
   * The group content suitability placement view referenced in the query.
   */
  groupContentSuitabilityPlacementView?: GoogleAdsSearchads360V23Resources__GroupContentSuitabilityPlacementView;
  /**
   * The group placement view referenced in the query.
   */
  groupPlacementView?: GoogleAdsSearchads360V23Resources__GroupPlacementView;
  /**
   * The hotel group view referenced in the query.
   */
  hotelGroupView?: GoogleAdsSearchads360V23Resources__HotelGroupView;
  /**
   * The hotel performance view referenced in the query.
   */
  hotelPerformanceView?: GoogleAdsSearchads360V23Resources__HotelPerformanceView;
  /**
   * The hotel reconciliation referenced in the query.
   */
  hotelReconciliation?: GoogleAdsSearchads360V23Resources__HotelReconciliation;
  /**
   * The income range view referenced in the query.
   */
  incomeRangeView?: GoogleAdsSearchads360V23Resources__IncomeRangeView;
  /**
   * The keyword plan referenced in the query.
   */
  keywordPlan?: GoogleAdsSearchads360V23Resources__KeywordPlan;
  /**
   * The keyword plan ad group referenced in the query.
   */
  keywordPlanAdGroup?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroup;
  /**
   * The keyword plan ad group referenced in the query.
   */
  keywordPlanAdGroupKeyword?: GoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword;
  /**
   * The keyword plan campaign referenced in the query.
   */
  keywordPlanCampaign?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaign;
  /**
   * The keyword plan campaign keyword referenced in the query.
   */
  keywordPlanCampaignKeyword?: GoogleAdsSearchads360V23Resources__KeywordPlanCampaignKeyword;
  /**
   * The keyword theme constant referenced in the query.
   */
  keywordThemeConstant?: GoogleAdsSearchads360V23Resources__KeywordThemeConstant;
  /**
   * The keyword view referenced in the query.
   */
  keywordView?: GoogleAdsSearchads360V23Resources__KeywordView;
  /**
   * The label referenced in the query.
   */
  label?: GoogleAdsSearchads360V23Resources__Label;
  /**
   * The landing page view referenced in the query.
   */
  landingPageView?: GoogleAdsSearchads360V23Resources__LandingPageView;
  /**
   * The language constant referenced in the query.
   */
  languageConstant?: GoogleAdsSearchads360V23Resources__LanguageConstant;
  /**
   * The lead form user submission referenced in the query.
   */
  leadFormSubmissionData?: GoogleAdsSearchads360V23Resources__LeadFormSubmissionData;
  /**
   * The life event referenced in the query.
   */
  lifeEvent?: GoogleAdsSearchads360V23Resources__LifeEvent;
  /**
   * The local services employee referenced in the query.
   */
  localServicesEmployee?: GoogleAdsSearchads360V23Resources__LocalServicesEmployee;
  /**
   * The local services lead referenced in the query.
   */
  localServicesLead?: GoogleAdsSearchads360V23Resources__LocalServicesLead;
  /**
   * The local services lead conversationreferenced in the query.
   */
  localServicesLeadConversation?: GoogleAdsSearchads360V23Resources__LocalServicesLeadConversation;
  /**
   * The local services verification artifact referenced in the query.
   */
  localServicesVerificationArtifact?: GoogleAdsSearchads360V23Resources__LocalServicesVerificationArtifact;
  /**
   * The location interest view referenced in the query.
   */
  locationInterestView?: GoogleAdsSearchads360V23Resources__LocationInterestView;
  /**
   * The location view referenced in the query.
   */
  locationView?: GoogleAdsSearchads360V23Resources__LocationView;
  /**
   * The managed placement view referenced in the query.
   */
  managedPlacementView?: GoogleAdsSearchads360V23Resources__ManagedPlacementView;
  /**
   * The matched location interest view referenced in the query.
   */
  matchedLocationInterestView?: GoogleAdsSearchads360V23Resources__MatchedLocationInterestView;
  /**
   * The media file referenced in the query.
   */
  mediaFile?: GoogleAdsSearchads360V23Resources__MediaFile;
  /**
   * The metrics.
   */
  metrics?: GoogleAdsSearchads360V23Common__Metrics;
  /**
   * The mobile app category constant referenced in the query.
   */
  mobileAppCategoryConstant?: GoogleAdsSearchads360V23Resources__MobileAppCategoryConstant;
  /**
   * The mobile device constant referenced in the query.
   */
  mobileDeviceConstant?: GoogleAdsSearchads360V23Resources__MobileDeviceConstant;
  /**
   * Offline conversion upload summary at customer level.
   */
  offlineConversionUploadClientSummary?: GoogleAdsSearchads360V23Resources__OfflineConversionUploadClientSummary;
  /**
   * Offline conversion upload summary at conversion type level.
   */
  offlineConversionUploadConversionActionSummary?: GoogleAdsSearchads360V23Resources__OfflineConversionUploadConversionActionSummary;
  /**
   * The offline user data job referenced in the query.
   */
  offlineUserDataJob?: GoogleAdsSearchads360V23Resources__OfflineUserDataJob;
  /**
   * The operating system version constant referenced in the query.
   */
  operatingSystemVersionConstant?: GoogleAdsSearchads360V23Resources__OperatingSystemVersionConstant;
  /**
   * The paid organic search term view referenced in the query.
   */
  paidOrganicSearchTermView?: GoogleAdsSearchads360V23Resources__PaidOrganicSearchTermView;
  /**
   * The parental status view referenced in the query.
   */
  parentalStatusView?: GoogleAdsSearchads360V23Resources__ParentalStatusView;
  /**
   * The performance max placement view referenced in the query.
   */
  performanceMaxPlacementView?: GoogleAdsSearchads360V23Resources__PerformanceMaxPlacementView;
  /**
   * The per store view referenced in the query.
   */
  perStoreView?: GoogleAdsSearchads360V23Resources__PerStoreView;
  /**
   * The product category referenced in the query.
   */
  productCategoryConstant?: GoogleAdsSearchads360V23Resources__ProductCategoryConstant;
  /**
   * The product group view referenced in the query.
   */
  productGroupView?: GoogleAdsSearchads360V23Resources__ProductGroupView;
  /**
   * The product link referenced in the query.
   */
  productLink?: GoogleAdsSearchads360V23Resources__ProductLink;
  /**
   * The product link invitation in the query.
   */
  productLinkInvitation?: GoogleAdsSearchads360V23Resources__ProductLinkInvitation;
  /**
   * The qualifying question referenced in the query.
   */
  qualifyingQuestion?: GoogleAdsSearchads360V23Resources__QualifyingQuestion;
  /**
   * The recommendation referenced in the query.
   */
  recommendation?: GoogleAdsSearchads360V23Resources__Recommendation;
  /**
   * The recommendation subscription referenced in the query.
   */
  recommendationSubscription?: GoogleAdsSearchads360V23Resources__RecommendationSubscription;
  /**
   * The remarketing action referenced in the query.
   */
  remarketingAction?: GoogleAdsSearchads360V23Resources__RemarketingAction;
  /**
   * The Search Ads 360 campaign referenced in the query.
   */
  searchAds360Campaign?: GoogleAdsSearchads360V23Resources__SearchAds360Campaign;
  /**
   * The search term view referenced in the query.
   */
  searchTermView?: GoogleAdsSearchads360V23Resources__SearchTermView;
  /**
   * The segments.
   */
  segments?: GoogleAdsSearchads360V23Common__Segments;
  /**
   * The shared set referenced in the query.
   */
  sharedCriterion?: GoogleAdsSearchads360V23Resources__SharedCriterion;
  /**
   * The shared set referenced in the query.
   */
  sharedSet?: GoogleAdsSearchads360V23Resources__SharedSet;
  /**
   * The shopping performance view referenced in the query.
   */
  shoppingPerformanceView?: GoogleAdsSearchads360V23Resources__ShoppingPerformanceView;
  /**
   * The shopping product referenced in the query.
   */
  shoppingProduct?: GoogleAdsSearchads360V23Resources__ShoppingProduct;
  /**
   * The Smart campaign search term view referenced in the query.
   */
  smartCampaignSearchTermView?: GoogleAdsSearchads360V23Resources__SmartCampaignSearchTermView;
  /**
   * The Smart campaign setting referenced in the query.
   */
  smartCampaignSetting?: GoogleAdsSearchads360V23Resources__SmartCampaignSetting;
  /**
   * The Targeting expansion view referenced in the query.
   */
  targetingExpansionView?: GoogleAdsSearchads360V23Resources__TargetingExpansionView;
  /**
   * The AccountLink referenced in the query.
   */
  thirdPartyAppAnalyticsLink?: GoogleAdsSearchads360V23Resources__ThirdPartyAppAnalyticsLink;
  /**
   * The topic constant referenced in the query.
   */
  topicConstant?: GoogleAdsSearchads360V23Resources__TopicConstant;
  /**
   * The topic view referenced in the query.
   */
  topicView?: GoogleAdsSearchads360V23Resources__TopicView;
  /**
   * The travel activity group view referenced in the query.
   */
  travelActivityGroupView?: GoogleAdsSearchads360V23Resources__TravelActivityGroupView;
  /**
   * The travel activity performance view referenced in the query.
   */
  travelActivityPerformanceView?: GoogleAdsSearchads360V23Resources__TravelActivityPerformanceView;
  /**
   * The user interest referenced in the query.
   */
  userInterest?: GoogleAdsSearchads360V23Resources__UserInterest;
  /**
   * The user list referenced in the query.
   */
  userList?: GoogleAdsSearchads360V23Resources__UserList;
  /**
   * The user list customer type in the query.
   */
  userListCustomerType?: GoogleAdsSearchads360V23Resources__UserListCustomerType;
  /**
   * The user location view referenced in the query.
   */
  userLocationView?: GoogleAdsSearchads360V23Resources__UserLocationView;
  /**
   * The video referenced in the query.
   */
  video?: GoogleAdsSearchads360V23Resources__Video;
  /**
   * The event level visit referenced in the query.
   */
  visit?: GoogleAdsSearchads360V23Resources__Visit;
  /**
   * The webpage view referenced in the query.
   */
  webpageView?: GoogleAdsSearchads360V23Resources__WebpageView;
}

function serializeGoogleAdsSearchads360V23Services__SearchAds360Row(data: any): GoogleAdsSearchads360V23Services__SearchAds360Row {
  return {
    ...data,
    accountBudgetProposal: data["accountBudgetProposal"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data["accountBudgetProposal"]) : undefined,
    accountLink: data["accountLink"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AccountLink(data["accountLink"]) : undefined,
    ad: data["ad"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
    adGroup: data["adGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroup(data["adGroup"]) : undefined,
    adGroupAd: data["adGroupAd"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["adGroupAd"]) : undefined,
    adGroupBidModifier: data["adGroupBidModifier"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["adGroupBidModifier"]) : undefined,
    adGroupCriterion: data["adGroupCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["adGroupCriterion"]) : undefined,
    adParameter: data["adParameter"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AdParameter(data["adParameter"]) : undefined,
    asset: data["asset"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Asset(data["asset"]) : undefined,
    assetGroupListingGroupFilter: data["assetGroupListingGroupFilter"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["assetGroupListingGroupFilter"]) : undefined,
    assetSet: data["assetSet"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__AssetSet(data["assetSet"]) : undefined,
    biddingStrategy: data["biddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["biddingStrategy"]) : undefined,
    campaign: data["campaign"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Campaign(data["campaign"]) : undefined,
    campaignBudget: data["campaignBudget"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["campaignBudget"]) : undefined,
    campaignCriterion: data["campaignCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["campaignCriterion"]) : undefined,
    conversionAction: data["conversionAction"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ConversionAction(data["conversionAction"]) : undefined,
    customAudience: data["customAudience"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomAudience(data["customAudience"]) : undefined,
    customColumns: data["customColumns"] !== undefined ? data["customColumns"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    customConversionGoal: data["customConversionGoal"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["customConversionGoal"]) : undefined,
    experimentArm: data["experimentArm"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["experimentArm"]) : undefined,
    keywordPlanAdGroup: data["keywordPlanAdGroup"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["keywordPlanAdGroup"]) : undefined,
    keywordPlanAdGroupKeyword: data["keywordPlanAdGroupKeyword"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["keywordPlanAdGroupKeyword"]) : undefined,
    keywordPlanCampaign: data["keywordPlanCampaign"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["keywordPlanCampaign"]) : undefined,
    mediaFile: data["mediaFile"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__MediaFile(data["mediaFile"]) : undefined,
    metrics: data["metrics"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Metrics(data["metrics"]) : undefined,
    offlineUserDataJob: data["offlineUserDataJob"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data["offlineUserDataJob"]) : undefined,
    productLink: data["productLink"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__ProductLink(data["productLink"]) : undefined,
    segments: data["segments"] !== undefined ? serializeGoogleAdsSearchads360V23Common__Segments(data["segments"]) : undefined,
    sharedCriterion: data["sharedCriterion"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["sharedCriterion"]) : undefined,
    userList: data["userList"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__UserList(data["userList"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SearchAds360Row(data: any): GoogleAdsSearchads360V23Services__SearchAds360Row {
  return {
    ...data,
    accountBudgetProposal: data["accountBudgetProposal"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AccountBudgetProposal(data["accountBudgetProposal"]) : undefined,
    accountLink: data["accountLink"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AccountLink(data["accountLink"]) : undefined,
    ad: data["ad"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
    adGroup: data["adGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroup(data["adGroup"]) : undefined,
    adGroupAd: data["adGroupAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupAd(data["adGroupAd"]) : undefined,
    adGroupBidModifier: data["adGroupBidModifier"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupBidModifier(data["adGroupBidModifier"]) : undefined,
    adGroupCriterion: data["adGroupCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdGroupCriterion(data["adGroupCriterion"]) : undefined,
    adParameter: data["adParameter"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AdParameter(data["adParameter"]) : undefined,
    asset: data["asset"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Asset(data["asset"]) : undefined,
    assetGroupListingGroupFilter: data["assetGroupListingGroupFilter"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetGroupListingGroupFilter(data["assetGroupListingGroupFilter"]) : undefined,
    assetSet: data["assetSet"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__AssetSet(data["assetSet"]) : undefined,
    biddingStrategy: data["biddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__BiddingStrategy(data["biddingStrategy"]) : undefined,
    campaign: data["campaign"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Campaign(data["campaign"]) : undefined,
    campaignBudget: data["campaignBudget"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignBudget(data["campaignBudget"]) : undefined,
    campaignCriterion: data["campaignCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CampaignCriterion(data["campaignCriterion"]) : undefined,
    conversionAction: data["conversionAction"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ConversionAction(data["conversionAction"]) : undefined,
    customAudience: data["customAudience"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomAudience(data["customAudience"]) : undefined,
    customColumns: data["customColumns"] !== undefined ? data["customColumns"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__Value(item))) : undefined,
    customConversionGoal: data["customConversionGoal"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__CustomConversionGoal(data["customConversionGoal"]) : undefined,
    experimentArm: data["experimentArm"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ExperimentArm(data["experimentArm"]) : undefined,
    keywordPlanAdGroup: data["keywordPlanAdGroup"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroup(data["keywordPlanAdGroup"]) : undefined,
    keywordPlanAdGroupKeyword: data["keywordPlanAdGroupKeyword"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanAdGroupKeyword(data["keywordPlanAdGroupKeyword"]) : undefined,
    keywordPlanCampaign: data["keywordPlanCampaign"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__KeywordPlanCampaign(data["keywordPlanCampaign"]) : undefined,
    mediaFile: data["mediaFile"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__MediaFile(data["mediaFile"]) : undefined,
    metrics: data["metrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Metrics(data["metrics"]) : undefined,
    offlineUserDataJob: data["offlineUserDataJob"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__OfflineUserDataJob(data["offlineUserDataJob"]) : undefined,
    productLink: data["productLink"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__ProductLink(data["productLink"]) : undefined,
    segments: data["segments"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__Segments(data["segments"]) : undefined,
    sharedCriterion: data["sharedCriterion"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["sharedCriterion"]) : undefined,
    userList: data["userList"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__UserList(data["userList"]) : undefined,
  };
}

/**
 * Request message for SearchAds360FieldService.SearchSearchAds360Fields.
 */
export interface GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsRequest {
  /**
   * Number of elements to retrieve in a single page. When too large a page is
   * requested, the server may decide to further limit the number of returned
   * resources.
   */
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. Use the value obtained from `next_page_token` in the
   * previous response in order to request the next page of results.
   */
  pageToken?: string;
  /**
   * Required. The query string.
   */
  query?: string;
}

/**
 * Response message for SearchAds360FieldService.SearchSearchAds360Fields.
 */
export interface GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse {
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
  /**
   * The list of fields that matched the query.
   */
  results?: GoogleAdsSearchads360V23Resources__SearchAds360Field[];
  /**
   * Total number of results that match the query ignoring the LIMIT clause.
   */
  totalResultsCount?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse(data: any): GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse {
  return {
    ...data,
    totalResultsCount: data["totalResultsCount"] !== undefined ? String(data["totalResultsCount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse(data: any): GoogleAdsSearchads360V23Services__SearchSearchAds360FieldsResponse {
  return {
    ...data,
    totalResultsCount: data["totalResultsCount"] !== undefined ? BigInt(data["totalResultsCount"]) : undefined,
  };
}

/**
 * Request message for SearchAds360Service.Search.
 */
export interface GoogleAdsSearchads360V23Services__SearchSearchAds360Request {
  /**
   * Number of elements to retrieve in a single page. When too large a page is
   * requested, the server may decide to further limit the number of returned
   * resources.
   */
  pageSize?: number;
  /**
   * Token of the page to retrieve. If not specified, the first page of results
   * will be returned. Use the value obtained from `next_page_token` in the
   * previous response in order to request the next page of results.
   */
  pageToken?: string;
  /**
   * Required. The query string.
   */
  query?: string;
  /**
   * Settings that allow users to specify request count, summary row, and
   * results behavior.
   */
  searchSettings?: GoogleAdsSearchads360V23Services__SearchSettings;
  /**
   * If true, the request is validated but not executed.
   */
  validateOnly?: boolean;
}

/**
 * Response message for SearchAds360Service.Search.
 */
export interface GoogleAdsSearchads360V23Services__SearchSearchAds360Response {
  /**
   * The headers of the conversion custom dimensions in the results.
   */
  conversionCustomDimensionHeaders?: GoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader[];
  /**
   * The headers of the conversion custom metrics in the results.
   */
  conversionCustomMetricHeaders?: GoogleAdsSearchads360V23Services__ConversionCustomMetricHeader[];
  /**
   * The headers of the custom columns in the results.
   */
  customColumnHeaders?: GoogleAdsSearchads360V23Services__CustomColumnHeader[];
  /**
   * FieldMask that represents what fields were requested by the user.
   */
  fieldMask?: string /* FieldMask */;
  /**
   * The metric attributes of the metrics in the results.
   */
  metricAttributes?: GoogleAdsSearchads360V23Services__MetricAttributes[];
  /**
   * Pagination token used to retrieve the next page of results. Pass the
   * content of this string as the `page_token` attribute of the next request.
   * `next_page_token` is not returned for the last page.
   */
  nextPageToken?: string;
  /**
   * The amount of resources consumed to serve the query.
   */
  queryResourceConsumption?: bigint;
  /**
   * The headers of the raw event conversion dimensions in the results.
   */
  rawEventConversionDimensionHeaders?: GoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader[];
  /**
   * The headers of the raw event conversion metrics in the results.
   */
  rawEventConversionMetricHeaders?: GoogleAdsSearchads360V23Services__RawEventConversionMetricHeader[];
  /**
   * The list of rows that matched the query.
   */
  results?: GoogleAdsSearchads360V23Services__SearchAds360Row[];
  /**
   * Summary row that contains summary of metrics in results. Summary of
   * metrics means aggregation of metrics across all results, here aggregation
   * could be sum, average, rate, etc.
   */
  summaryRow?: GoogleAdsSearchads360V23Services__SearchAds360Row;
  /**
   * Total number of results that match the query ignoring the LIMIT clause.
   */
  totalResultsCount?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__SearchSearchAds360Response(data: any): GoogleAdsSearchads360V23Services__SearchSearchAds360Response {
  return {
    ...data,
    conversionCustomDimensionHeaders: data["conversionCustomDimensionHeaders"] !== undefined ? data["conversionCustomDimensionHeaders"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader(item))) : undefined,
    conversionCustomMetricHeaders: data["conversionCustomMetricHeaders"] !== undefined ? data["conversionCustomMetricHeaders"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__ConversionCustomMetricHeader(item))) : undefined,
    customColumnHeaders: data["customColumnHeaders"] !== undefined ? data["customColumnHeaders"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__CustomColumnHeader(item))) : undefined,
    fieldMask: data["fieldMask"] !== undefined ? data["fieldMask"] : undefined,
    queryResourceConsumption: data["queryResourceConsumption"] !== undefined ? String(data["queryResourceConsumption"]) : undefined,
    rawEventConversionDimensionHeaders: data["rawEventConversionDimensionHeaders"] !== undefined ? data["rawEventConversionDimensionHeaders"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader(item))) : undefined,
    rawEventConversionMetricHeaders: data["rawEventConversionMetricHeaders"] !== undefined ? data["rawEventConversionMetricHeaders"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__RawEventConversionMetricHeader(item))) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__SearchAds360Row(item))) : undefined,
    summaryRow: data["summaryRow"] !== undefined ? serializeGoogleAdsSearchads360V23Services__SearchAds360Row(data["summaryRow"]) : undefined,
    totalResultsCount: data["totalResultsCount"] !== undefined ? String(data["totalResultsCount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SearchSearchAds360Response(data: any): GoogleAdsSearchads360V23Services__SearchSearchAds360Response {
  return {
    ...data,
    conversionCustomDimensionHeaders: data["conversionCustomDimensionHeaders"] !== undefined ? data["conversionCustomDimensionHeaders"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionCustomDimensionHeader(item))) : undefined,
    conversionCustomMetricHeaders: data["conversionCustomMetricHeaders"] !== undefined ? data["conversionCustomMetricHeaders"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__ConversionCustomMetricHeader(item))) : undefined,
    customColumnHeaders: data["customColumnHeaders"] !== undefined ? data["customColumnHeaders"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__CustomColumnHeader(item))) : undefined,
    fieldMask: data["fieldMask"] !== undefined ? data["fieldMask"] : undefined,
    queryResourceConsumption: data["queryResourceConsumption"] !== undefined ? BigInt(data["queryResourceConsumption"]) : undefined,
    rawEventConversionDimensionHeaders: data["rawEventConversionDimensionHeaders"] !== undefined ? data["rawEventConversionDimensionHeaders"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__RawEventConversionDimensionHeader(item))) : undefined,
    rawEventConversionMetricHeaders: data["rawEventConversionMetricHeaders"] !== undefined ? data["rawEventConversionMetricHeaders"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__RawEventConversionMetricHeader(item))) : undefined,
    results: data["results"] !== undefined ? data["results"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__SearchAds360Row(item))) : undefined,
    summaryRow: data["summaryRow"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__SearchAds360Row(data["summaryRow"]) : undefined,
    totalResultsCount: data["totalResultsCount"] !== undefined ? BigInt(data["totalResultsCount"]) : undefined,
  };
}

/**
 * Indicates search settings in request parameter.
 */
export interface GoogleAdsSearchads360V23Services__SearchSettings {
  /**
   * If true, results will be excluded from the response. Otherwise, results
   * will be returned. Default is false.
   */
  omitResults?: boolean;
  /**
   * If true, summary row will be included in the response and sent in a
   * response by itself after all other query results are returned. Default is
   * false.
   */
  returnSummaryRow?: boolean;
  /**
   * If true, the total number of results that match the query ignoring the
   * LIMIT clause will be included in the response. Default is false.
   */
  returnTotalResultsCount?: boolean;
}

/**
 * A single operation (create, remove) on an shared criterion.
 */
export interface GoogleAdsSearchads360V23Services__SharedCriterionOperation {
  /**
   * Create operation: No resource name is expected for the new shared
   * criterion.
   */
  create?: GoogleAdsSearchads360V23Resources__SharedCriterion;
  /**
   * Remove operation: A resource name for the removed shared criterion is
   * expected, in this format:
   * `customers/{customer_id}/sharedCriteria/{shared_set_id}~{criterion_id}`
   */
  remove?: string;
}

function serializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(data: any): GoogleAdsSearchads360V23Services__SharedCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["create"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SharedCriterionOperation(data: any): GoogleAdsSearchads360V23Services__SharedCriterionOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__SharedCriterion(data["create"]) : undefined,
  };
}

/**
 * A single operation (create, update, remove) on an shared set.
 */
export interface GoogleAdsSearchads360V23Services__SharedSetOperation {
  /**
   * Create operation: No resource name is expected for the new shared set.
   */
  create?: GoogleAdsSearchads360V23Resources__SharedSet;
  /**
   * Remove operation: A resource name for the removed shared set is expected,
   * in this format: `customers/{customer_id}/sharedSets/{shared_set_id}`
   */
  remove?: string;
  /**
   * Update operation: The shared set is expected to have a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__SharedSet;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__SharedSetOperation(data: any): GoogleAdsSearchads360V23Services__SharedSetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SharedSetOperation(data: any): GoogleAdsSearchads360V23Services__SharedSetOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Site Seed
 */
export interface GoogleAdsSearchads360V23Services__SiteSeed {
  /**
   * The domain name of the site. If the customer requesting the ideas doesn't
   * own the site provided only public information is returned.
   */
  site?: string;
}

/**
 * Details related to Smart campaigns that are eligible to serve.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignEligibleDetails {
  /**
   * The timestamp of when the campaign will end, if applicable. The timestamp
   * is in the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.
   */
  endDateTime?: string;
  /**
   * The timestamp of the last impression observed in the last 48 hours for
   * this campaign. The timestamp is in the customer’s timezone and in
   * “yyyy-MM-dd HH:mm:ss” format.
   */
  lastImpressionDateTime?: string;
}

/**
 * Details related to Smart campaigns that have ended.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignEndedDetails {
  /**
   * The timestamp of when the campaign ended. The timestamp is in the
   * customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.
   */
  endDateTime?: string;
}

/**
 * Details related to Smart campaigns that are not eligible to serve.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignNotEligibleDetails {
  /**
   * The reason why the Smart campaign is not eligible to serve.
   */
  notEligibleReason?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCOUNT_ISSUE" | "BILLING_ISSUE" | "BUSINESS_PROFILE_LOCATION_REMOVED" | "ALL_ADS_DISAPPROVED";
}

/**
 * Details related to paused Smart campaigns.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignPausedDetails {
  /**
   * The timestamp of when the campaign was last paused. The timestamp is in
   * the customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.
   */
  pausedDateTime?: string;
}

/**
 * Details related to removed Smart campaigns.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignRemovedDetails {
  /**
   * The timestamp of when the campaign was removed. The timestamp is in the
   * customer’s timezone and in “yyyy-MM-dd HH:mm:ss” format.
   */
  removedDateTime?: string;
}

/**
 * A single operation to update Smart campaign settings for a campaign.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignSettingOperation {
  /**
   * Update operation: The Smart campaign setting must specify a valid resource
   * name.
   */
  update?: GoogleAdsSearchads360V23Resources__SmartCampaignSetting;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(data: any): GoogleAdsSearchads360V23Services__SmartCampaignSettingOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SmartCampaignSettingOperation(data: any): GoogleAdsSearchads360V23Services__SmartCampaignSettingOperation {
  return {
    ...data,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * Information needed to get suggestion for Smart Campaign. More information
 * provided will help the system to derive better suggestions.
 */
export interface GoogleAdsSearchads360V23Services__SmartCampaignSuggestionInfo {
  /**
   * Optional. The business ad schedule.
   */
  adSchedules?: GoogleAdsSearchads360V23Common__AdScheduleInfo[];
  /**
   * Optional. Context describing the business to advertise.
   */
  businessContext?: GoogleAdsSearchads360V23Services_SmartCampaignSuggestionInfo_BusinessContext;
  /**
   * Optional. The resource name of a Business Profile location. Business
   * Profile location resource names can be fetched through the Business Profile
   * API and adhere to the following format: `locations/{locationId}`. See the
   * [Business Profile API]
   * (https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations)
   * for additional details.
   */
  businessProfileLocation?: string;
  /**
   * Optional. Landing page URL of the campaign.
   */
  finalUrl?: string;
  /**
   * Optional. Smart campaign keyword themes. This field may greatly improve
   * suggestion accuracy and we recommend always setting it if possible.
   */
  keywordThemes?: GoogleAdsSearchads360V23Common__KeywordThemeInfo[];
  /**
   * Optional. The two letter advertising language for the Smart campaign to be
   * constructed, default to 'en' if not set.
   */
  languageCode?: string;
  /**
   * Optional. The targeting geo location by locations.
   */
  locationList?: GoogleAdsSearchads360V23Services_SmartCampaignSuggestionInfo_LocationList;
  /**
   * Optional. The targeting geo location by proximity.
   */
  proximity?: GoogleAdsSearchads360V23Common__ProximityInfo;
}

/**
 * Request message for StartIdentityVerification.
 */
export interface GoogleAdsSearchads360V23Services__StartIdentityVerificationRequest {
  /**
   * Required. The verification program type for which we want to start the
   * verification.
   */
  verificationProgram?:  | "UNSPECIFIED" | "UNKNOWN" | "ADVERTISER_IDENTITY_VERIFICATION";
}

/**
 * Request message for GeoTargetConstantService.SuggestGeoTargetConstants.
 */
export interface GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsRequest {
  /**
   * Returned geo targets are restricted to this country code.
   */
  countryCode?: string;
  /**
   * The geo target constant resource names to filter by.
   */
  geoTargets?: GoogleAdsSearchads360V23Services_SuggestGeoTargetConstantsRequest_GeoTargets;
  /**
   * If possible, returned geo targets are translated using this locale. If
   * not, en is used by default. This is also used as a hint for returned geo
   * targets.
   */
  locale?: string;
  /**
   * The location names to search by. At most 25 names can be set.
   */
  locationNames?: GoogleAdsSearchads360V23Services_SuggestGeoTargetConstantsRequest_LocationNames;
}

/**
 * Response message for GeoTargetConstantService.SuggestGeoTargetConstants.
 */
export interface GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse {
  /**
   * Geo target constant suggestions.
   */
  geoTargetConstantSuggestions?: GoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion[];
}

function serializeGoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse(data: any): GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse {
  return {
    ...data,
    geoTargetConstantSuggestions: data["geoTargetConstantSuggestions"] !== undefined ? data["geoTargetConstantSuggestions"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse(data: any): GoogleAdsSearchads360V23Services__SuggestGeoTargetConstantsResponse {
  return {
    ...data,
    geoTargetConstantSuggestions: data["geoTargetConstantSuggestions"] !== undefined ? data["geoTargetConstantSuggestions"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__GeoTargetConstantSuggestion(item))) : undefined,
  };
}

/**
 * Request message for
 * KeywordThemeConstantService.SuggestKeywordThemeConstants.
 */
export interface GoogleAdsSearchads360V23Services__SuggestKeywordThemeConstantsRequest {
  /**
   * Upper-case, two-letter country code as defined by ISO-3166. This for
   * refining the scope of the query, default to 'US' if not set.
   */
  countryCode?: string;
  /**
   * The two letter language code for get corresponding keyword theme for
   * refining the scope of the query, default to 'en' if not set.
   */
  languageCode?: string;
  /**
   * The query text of a keyword theme that will be used to map to similar
   * keyword themes. For example, "plumber" or "roofer".
   */
  queryText?: string;
}

/**
 * Response message for
 * KeywordThemeConstantService.SuggestKeywordThemeConstants.
 */
export interface GoogleAdsSearchads360V23Services__SuggestKeywordThemeConstantsResponse {
  /**
   * Smart Campaign keyword theme suggestions.
   */
  keywordThemeConstants?: GoogleAdsSearchads360V23Resources__KeywordThemeConstant[];
}

/**
 * Request message for SmartCampaignSuggestService.SuggestKeywordThemes.
 */
export interface GoogleAdsSearchads360V23Services__SuggestKeywordThemesRequest {
  /**
   * Required. Information to get keyword theme suggestions. Required fields: *
   * suggestion_info.final_url * suggestion_info.language_code *
   * suggestion_info.geo_target Recommended fields: *
   * suggestion_info.business_setting
   */
  suggestionInfo?: GoogleAdsSearchads360V23Services__SmartCampaignSuggestionInfo;
}

/**
 * Response message for SmartCampaignSuggestService.SuggestKeywordThemes.
 */
export interface GoogleAdsSearchads360V23Services__SuggestKeywordThemesResponse {
  /**
   * Smart campaign keyword theme suggestions.
   */
  keywordThemes?: GoogleAdsSearchads360V23Services_SuggestKeywordThemesResponse_KeywordTheme[];
}

/**
 * Request message for SmartCampaignSuggestService.SuggestSmartCampaignAd.
 */
export interface GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdRequest {
  /**
   * Required. Inputs used to suggest a Smart campaign ad. Required fields:
   * final_url, language_code, keyword_themes. Optional but recommended fields
   * to improve the quality of the suggestion: business_setting and geo_target.
   */
  suggestionInfo?: GoogleAdsSearchads360V23Services__SmartCampaignSuggestionInfo;
}

/**
 * Response message for SmartCampaignSuggestService.SuggestSmartCampaignAd.
 */
export interface GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse {
  /**
   * Optional. Ad info includes 3 creative headlines and 2 creative
   * descriptions.
   */
  adInfo?: GoogleAdsSearchads360V23Common__SmartCampaignAdInfo;
}

function serializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse(data: any): GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse {
  return {
    ...data,
    adInfo: data["adInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data["adInfo"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse(data: any): GoogleAdsSearchads360V23Services__SuggestSmartCampaignAdResponse {
  return {
    ...data,
    adInfo: data["adInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__SmartCampaignAdInfo(data["adInfo"]) : undefined,
  };
}

/**
 * Request message for
 * SmartCampaignSuggestService.SuggestSmartCampaignBudgetOptions.
 */
export interface GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsRequest {
  /**
   * Required. The resource name of the campaign to get suggestion for.
   */
  campaign?: string;
  /**
   * Required. Information needed to get budget options
   */
  suggestionInfo?: GoogleAdsSearchads360V23Services__SmartCampaignSuggestionInfo;
}

/**
 * Response message for
 * SmartCampaignSuggestService.SuggestSmartCampaignBudgetOptions. Depending on
 * whether the system could suggest the options, either all of the options or
 * none of them might be returned.
 */
export interface GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse {
  /**
   * Optional. The highest budget option.
   */
  high?: GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption;
  /**
   * Optional. The lowest budget option.
   */
  low?: GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption;
  /**
   * Optional. The recommended budget option.
   */
  recommended?: GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption;
}

function serializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse(data: any): GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse {
  return {
    ...data,
    high: data["high"] !== undefined ? serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["high"]) : undefined,
    low: data["low"] !== undefined ? serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["low"]) : undefined,
    recommended: data["recommended"] !== undefined ? serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["recommended"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse(data: any): GoogleAdsSearchads360V23Services__SuggestSmartCampaignBudgetOptionsResponse {
  return {
    ...data,
    high: data["high"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["high"]) : undefined,
    low: data["low"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["low"]) : undefined,
    recommended: data["recommended"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data["recommended"]) : undefined,
  };
}

/**
 * Request message for TravelAssetSuggestionService.SuggestTravelAssets.
 */
export interface GoogleAdsSearchads360V23Services__SuggestTravelAssetsRequest {
  /**
   * Required. The language specifications in BCP 47 format (for example,
   * en-US, zh-CN, etc.) for the asset suggestions. Text will be in this
   * language. Usually matches one of the campaign target languages.
   */
  languageOption?: string;
  /**
   * The Google Maps Place IDs of hotels for which assets are requested. See
   * https://developers.google.com/places/web-service/place-id for more
   * information.
   */
  placeIds?: string[];
}

/**
 * Response message for TravelAssetSuggestionService.SuggestTravelAssets.
 */
export interface GoogleAdsSearchads360V23Services__SuggestTravelAssetsResponse {
  /**
   * Asset suggestions for each place ID submitted in the request.
   */
  hotelAssetSuggestions?: GoogleAdsSearchads360V23Services__HotelAssetSuggestion[];
}

/**
 * Container for surfaces for a product. Surfaces refer to the available types
 * of ad inventories such as In-Feed, In-Stream, and Shorts.
 */
export interface GoogleAdsSearchads360V23Services__SurfaceTargeting {
  /**
   * List of surfaces available to target.
   */
  surfaces?:  | "UNSPECIFIED" | "UNKNOWN" | "DISCOVER_FEED" | "GMAIL" | "IN_FEED" | "IN_STREAM_BUMPER" | "IN_STREAM_NON_SKIPPABLE" | "IN_STREAM_SKIPPABLE" | "SHORTS"[];
}

/**
 * The surface targeting combinations available for an ad product.
 */
export interface GoogleAdsSearchads360V23Services__SurfaceTargetingCombinations {
  /**
   * Available surface target combinations for the ad product.
   */
  availableTargetingCombinations?: GoogleAdsSearchads360V23Services__SurfaceTargeting[];
  /**
   * Default surface targeting applied to the ad product.
   */
  defaultTargeting?: GoogleAdsSearchads360V23Services__SurfaceTargeting;
}

/**
 * Details about various factors for not being satisfied with the lead.
 */
export interface GoogleAdsSearchads360V23Services__SurveyDissatisfied {
  /**
   * Optional. Provider's free form comments. This field is required when
   * OTHER_DISSATISFIED_REASON is selected as the reason.
   */
  otherReasonComment?: string;
  /**
   * Required. Provider's reason for not being satisfied with the lead.
   */
  surveyDissatisfiedReason?:  | "UNSPECIFIED" | "UNKNOWN" | "OTHER_DISSATISFIED_REASON" | "GEO_MISMATCH" | "JOB_TYPE_MISMATCH" | "NOT_READY_TO_BOOK" | "SPAM" | "DUPLICATE" | "SOLICITATION";
}

/**
 * Details about various factors for being satisfied with the lead.
 */
export interface GoogleAdsSearchads360V23Services__SurveySatisfied {
  /**
   * Optional. Provider's free form comments. This field is required when
   * OTHER_SATISFIED_REASON is selected as the reason.
   */
  otherReasonComment?: string;
  /**
   * Required. Provider's reason for being satisfied with the lead.
   */
  surveySatisfiedReason?:  | "UNSPECIFIED" | "UNKNOWN" | "OTHER_SATISFIED_REASON" | "BOOKED_CUSTOMER" | "LIKELY_BOOKED_CUSTOMER" | "SERVICE_RELATED" | "HIGH_VALUE_SERVICE";
}

/**
 * Target Frequency settings for a supported product.
 */
export interface GoogleAdsSearchads360V23Services__TargetFrequencySettings {
  /**
   * Required. The target frequency goal per selected time unit.
   */
  targetFrequency?: number;
  /**
   * Required. The time unit used to describe the time frame for
   * target_frequency.
   */
  timeUnit?:  | "UNSPECIFIED" | "UNKNOWN" | "WEEKLY" | "MONTHLY";
}

/**
 * The targeting for which traffic metrics will be reported.
 */
export interface GoogleAdsSearchads360V23Services__Targeting {
  /**
   * Targeted age range. An unset value is equivalent to targeting all ages.
   */
  ageRange?:  | "UNSPECIFIED" | "UNKNOWN" | "AGE_RANGE_18_24" | "AGE_RANGE_18_34" | "AGE_RANGE_18_44" | "AGE_RANGE_18_49" | "AGE_RANGE_18_54" | "AGE_RANGE_18_64" | "AGE_RANGE_18_65_UP" | "AGE_RANGE_21_34" | "AGE_RANGE_25_34" | "AGE_RANGE_25_44" | "AGE_RANGE_25_49" | "AGE_RANGE_25_54" | "AGE_RANGE_25_64" | "AGE_RANGE_25_65_UP" | "AGE_RANGE_35_44" | "AGE_RANGE_35_49" | "AGE_RANGE_35_54" | "AGE_RANGE_35_64" | "AGE_RANGE_35_65_UP" | "AGE_RANGE_45_54" | "AGE_RANGE_45_64" | "AGE_RANGE_45_65_UP" | "AGE_RANGE_50_65_UP" | "AGE_RANGE_55_64" | "AGE_RANGE_55_65_UP" | "AGE_RANGE_65_UP";
  /**
   * Targeted audiences. If not specified, does not target any specific
   * audience.
   */
  audienceTargeting?: GoogleAdsSearchads360V23Services__AudienceTargeting;
  /**
   * Targeted devices. If not specified, targets all applicable devices.
   * Applicable devices vary by product and region and can be obtained from
   * ReachPlanService.ListPlannableProducts.
   */
  devices?: GoogleAdsSearchads360V23Common__DeviceInfo[];
  /**
   * Targeted genders. An unset value is equivalent to targeting MALE and
   * FEMALE.
   */
  genders?: GoogleAdsSearchads360V23Common__GenderInfo[];
  /**
   * Targetable network for the ad product. If not specified, targets all
   * applicable networks. Applicable networks vary by product and region and can
   * be obtained from ReachPlanService.ListPlannableProducts.
   */
  network?:  | "UNSPECIFIED" | "UNKNOWN" | "YOUTUBE" | "GOOGLE_VIDEO_PARTNERS" | "YOUTUBE_AND_GOOGLE_VIDEO_PARTNERS";
  /**
   * The ID of the selected location. Plannable location IDs can be obtained
   * from ReachPlanService.ListPlannableLocations. Requests must set either this
   * field or `plannable_location_ids`. This field is deprecated as of V12 and
   * will be removed in a future release. Use `plannable_location_ids` instead.
   */
  plannableLocationId?: string;
  /**
   * The list of plannable location IDs to target with this forecast. If more
   * than one ID is provided, all IDs must have the same `parent_country_id`.
   * Planning for more than `parent_county` is not supported. Plannable location
   * IDs and their `parent_country_id` can be obtained from
   * ReachPlanService.ListPlannableLocations. Requests must set either this
   * field or `plannable_location_id`.
   */
  plannableLocationIds?: string[];
}

/**
 * A suggested targetable audience relevant to the requested audience.
 */
export interface GoogleAdsSearchads360V23Services__TargetingSuggestionMetrics {
  /**
   * Suggested age targeting; may be empty indicating no age targeting.
   */
  ageRanges?: GoogleAdsSearchads360V23Common__AgeRangeInfo[];
  /**
   * The fraction (from 0 to 1 inclusive) of the requested audience that can be
   * reached using the suggested targeting.
   */
  coverage?: number;
  /**
   * Suggested gender targeting. If present, this attribute has dimension
   * GENDER.
   */
  gender?: GoogleAdsSearchads360V23Common__GenderInfo;
  /**
   * The ratio of coverage to the coverage of the baseline audience or zero if
   * this ratio is undefined or is not meaningful.
   */
  index?: number;
  /**
   * Suggested location targeting. These attributes all have dimension
   * GEO_TARGET_COUNTRY or SUB_COUNTRY_LOCATION
   */
  locations?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata[];
  /**
   * A Parental Status value (parent, or not a parent).
   */
  parentalStatus?: GoogleAdsSearchads360V23Common__ParentalStatusInfo;
  /**
   * The approximate estimated number of people that can be reached on YouTube
   * using this targeting.
   */
  potentialYoutubeReach?: bigint;
  /**
   * List of user interest attributes with metadata defining the audience. The
   * combination has a logical AND-of-ORs structure: The attributes within each
   * AudienceInsightsAttributeMetadataGroup are ORed, and the groups themselves
   * are ANDed.
   */
  userInterests?: GoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup[];
}

function serializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(data: any): GoogleAdsSearchads360V23Services__TargetingSuggestionMetrics {
  return {
    ...data,
    locations: data["locations"] !== undefined ? data["locations"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
    potentialYoutubeReach: data["potentialYoutubeReach"] !== undefined ? String(data["potentialYoutubeReach"]) : undefined,
    userInterests: data["userInterests"] !== undefined ? data["userInterests"].map((item: any) => (serializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__TargetingSuggestionMetrics(data: any): GoogleAdsSearchads360V23Services__TargetingSuggestionMetrics {
  return {
    ...data,
    locations: data["locations"] !== undefined ? data["locations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadata(item))) : undefined,
    potentialYoutubeReach: data["potentialYoutubeReach"] !== undefined ? BigInt(data["potentialYoutubeReach"]) : undefined,
    userInterests: data["userInterests"] !== undefined ? data["userInterests"].map((item: any) => (deserializeGoogleAdsSearchads360V23Common__AudienceInsightsAttributeMetadataGroup(item))) : undefined,
  };
}

/**
 * An AdGroup/Campaign pair that could not be used as a suggestion for
 * keywords. AdGroups may not be usable if the AdGroup * belongs to a Campaign
 * that is not ENABLED or PAUSED * is itself not ENABLED
 */
export interface GoogleAdsSearchads360V23Services__UnusableAdGroup {
  /**
   * The AdGroup resource name. Resource name format:
   * `customers/{customer_id}/adGroups/{ad_group_id}`
   */
  adGroup?: string;
  /**
   * The Campaign resource name. Resource name format:
   * `customers/{customer_id}/campaigns/{campaign_id}`
   */
  campaign?: string;
}

/**
 * Request message for DataLinkService.UpdateDataLink.
 */
export interface GoogleAdsSearchads360V23Services__UpdateDataLinkRequest {
  /**
   * Required. The data link status to be updated to.
   */
  dataLinkStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "REQUESTED" | "PENDING_APPROVAL" | "ENABLED" | "DISABLED" | "REVOKED" | "REJECTED";
  /**
   * Required. The data link is expected to have a valid resource name.
   */
  resourceName?: string;
}

/**
 * Response message for DataLinkService.UpdateDataLink.
 */
export interface GoogleAdsSearchads360V23Services__UpdateDataLinkResponse {
  /**
   * Returned for successful operations. Resource name of the data link.
   */
  resourceName?: string;
}

/**
 * Request message for
 * ProductLinkInvitationService.UpdateProductLinkInvitation.
 */
export interface GoogleAdsSearchads360V23Services__UpdateProductLinkInvitationRequest {
  /**
   * Required. The product link invitation to be created.
   */
  productLinkInvitationStatus?:  | "UNSPECIFIED" | "UNKNOWN" | "ACCEPTED" | "REQUESTED" | "PENDING_APPROVAL" | "REVOKED" | "REJECTED" | "EXPIRED";
  /**
   * Required. Resource name of the product link invitation.
   */
  resourceName?: string;
}

/**
 * Response message for product link invitation update.
 */
export interface GoogleAdsSearchads360V23Services__UpdateProductLinkInvitationResponse {
  /**
   * Result of the update.
   */
  resourceName?: string;
}

/**
 * Request message for UserDataService.UploadUserData
 */
export interface GoogleAdsSearchads360V23Services__UploadUserDataRequest {
  /**
   * Metadata for data updates to a Customer Match user list.
   */
  customerMatchUserListMetadata?: GoogleAdsSearchads360V23Common__CustomerMatchUserListMetadata;
  /**
   * Required. The list of operations to be done.
   */
  operations?: GoogleAdsSearchads360V23Services__UserDataOperation[];
}

function serializeGoogleAdsSearchads360V23Services__UploadUserDataRequest(data: any): GoogleAdsSearchads360V23Services__UploadUserDataRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (serializeGoogleAdsSearchads360V23Services__UserDataOperation(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__UploadUserDataRequest(data: any): GoogleAdsSearchads360V23Services__UploadUserDataRequest {
  return {
    ...data,
    operations: data["operations"] !== undefined ? data["operations"].map((item: any) => (deserializeGoogleAdsSearchads360V23Services__UserDataOperation(item))) : undefined,
  };
}

/**
 * Response message for UserDataService.UploadUserData Uploads made through
 * this service will not be visible under the 'Segment members' section for the
 * Customer Match List in the Google Ads UI.
 */
export interface GoogleAdsSearchads360V23Services__UploadUserDataResponse {
  /**
   * Number of upload data operations received by API.
   */
  receivedOperationsCount?: number;
  /**
   * The date time at which the request was received by API, formatted as
   * "yyyy-mm-dd hh:mm:ss+|-hh:mm", for example, "2019-01-01 12:32:45-08:00".
   */
  uploadDateTime?: string;
}

/**
 * Url Seed
 */
export interface GoogleAdsSearchads360V23Services__UrlSeed {
  /**
   * The URL to crawl in order to generate keyword ideas.
   */
  url?: string;
}

/**
 * Operation to be made for the UploadUserDataRequest.
 */
export interface GoogleAdsSearchads360V23Services__UserDataOperation {
  /**
   * The list of user data to be appended to the user list.
   */
  create?: GoogleAdsSearchads360V23Common__UserData;
  /**
   * The list of user data to be removed from the user list.
   */
  remove?: GoogleAdsSearchads360V23Common__UserData;
}

function serializeGoogleAdsSearchads360V23Services__UserDataOperation(data: any): GoogleAdsSearchads360V23Services__UserDataOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserData(data["create"]) : undefined,
    remove: data["remove"] !== undefined ? serializeGoogleAdsSearchads360V23Common__UserData(data["remove"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__UserDataOperation(data: any): GoogleAdsSearchads360V23Services__UserDataOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserData(data["create"]) : undefined,
    remove: data["remove"] !== undefined ? deserializeGoogleAdsSearchads360V23Common__UserData(data["remove"]) : undefined,
  };
}

/**
 * A single mutate operation on the user list customer type.
 */
export interface GoogleAdsSearchads360V23Services__UserListCustomerTypeOperation {
  /**
   * Attach a user list customer type to a user list. No resource name is
   * expected for the new user list customer type.
   */
  create?: GoogleAdsSearchads360V23Resources__UserListCustomerType;
  /**
   * Remove an existing user list customer type. A resource name for the
   * removed user list customer type is expected, in this format:
   * `customers/{customer_id}/userListCustomerTypes/{user_list_id}~{customer_type_category}`
   */
  remove?: string;
}

/**
 * A single operation (create, update) on a user list.
 */
export interface GoogleAdsSearchads360V23Services__UserListOperation {
  /**
   * Create operation: No resource name is expected for the new user list.
   */
  create?: GoogleAdsSearchads360V23Resources__UserList;
  /**
   * Remove operation: A resource name for the removed user list is expected,
   * in this format: `customers/{customer_id}/userLists/{user_list_id}`
   */
  remove?: string;
  /**
   * Update operation: The user list is expected to have a valid resource name.
   */
  update?: GoogleAdsSearchads360V23Resources__UserList;
  /**
   * FieldMask that determines which resource fields are modified in an update.
   */
  updateMask?: string /* FieldMask */;
}

function serializeGoogleAdsSearchads360V23Services__UserListOperation(data: any): GoogleAdsSearchads360V23Services__UserListOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__UserList(data["create"]) : undefined,
    update: data["update"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__UserList(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__UserListOperation(data: any): GoogleAdsSearchads360V23Services__UserListOperation {
  return {
    ...data,
    create: data["create"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__UserList(data["create"]) : undefined,
    update: data["update"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__UserList(data["update"]) : undefined,
    updateMask: data["updateMask"] !== undefined ? data["updateMask"] : undefined,
  };
}

/**
 * A Plannable YouTube Select Lineup for product targeting.
 */
export interface GoogleAdsSearchads360V23Services__YouTubeSelectLineUp {
  /**
   * The ID of the YouTube Select Lineup.
   */
  lineupId?: bigint;
  /**
   * The unique name of the YouTube Select Lineup.
   */
  lineupName?: string;
}

function serializeGoogleAdsSearchads360V23Services__YouTubeSelectLineUp(data: any): GoogleAdsSearchads360V23Services__YouTubeSelectLineUp {
  return {
    ...data,
    lineupId: data["lineupId"] !== undefined ? String(data["lineupId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__YouTubeSelectLineUp(data: any): GoogleAdsSearchads360V23Services__YouTubeSelectLineUp {
  return {
    ...data,
    lineupId: data["lineupId"] !== undefined ? BigInt(data["lineupId"]) : undefined,
  };
}

/**
 * Request settings for YouTube Select Lineups
 */
export interface GoogleAdsSearchads360V23Services__YouTubeSelectSettings {
  /**
   * Lineup for YouTube Select Targeting.
   */
  lineupId?: bigint;
}

function serializeGoogleAdsSearchads360V23Services__YouTubeSelectSettings(data: any): GoogleAdsSearchads360V23Services__YouTubeSelectSettings {
  return {
    ...data,
    lineupId: data["lineupId"] !== undefined ? String(data["lineupId"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services__YouTubeSelectSettings(data: any): GoogleAdsSearchads360V23Services__YouTubeSelectSettings {
  return {
    ...data,
    lineupId: data["lineupId"] !== undefined ? BigInt(data["lineupId"]) : undefined,
  };
}

/**
 * Common parameters used when applying ad asset recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters {
  /**
   * The resource names of existing assets to attach to a scope. This may be
   * combined with new_assets in the same call.
   */
  existingAssets?: string[];
  /**
   * The assets to create and attach to a scope. This may be combined with
   * existing_assets in the same call.
   */
  newAssets?: GoogleAdsSearchads360V23Resources__Asset[];
  /**
   * Required. The scope at which to apply the assets. Assets at the campaign
   * scope level will be applied to the campaign associated with the
   * recommendation. Assets at the customer scope will apply to the entire
   * account. Assets at the campaign scope will override any attached at the
   * customer scope.
   */
  scope?:  | "UNSPECIFIED" | "UNKNOWN" | "CUSTOMER" | "CAMPAIGN";
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters {
  return {
    ...data,
    newAssets: data["newAssets"] !== undefined ? data["newAssets"].map((item: any) => (serializeGoogleAdsSearchads360V23Resources__Asset(item))) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters {
  return {
    ...data,
    newAssets: data["newAssets"] !== undefined ? data["newAssets"].map((item: any) => (deserializeGoogleAdsSearchads360V23Resources__Asset(item))) : undefined,
  };
}

/**
 * Parameters to use when applying call asset recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters {
  /**
   * Required. Call assets to be added. This is a required field.
   */
  adAssetApplyParameters?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

/**
 * Parameters to use when applying call extension recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CallExtensionParameters {
  /**
   * Call extensions to be added. This is a required field.
   */
  callExtensions?: GoogleAdsSearchads360V23Common__CallFeedItem[];
}

/**
 * Parameters to use when applying callout asset recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters {
  /**
   * Required. Callout assets to be added. This is a required field.
   */
  adAssetApplyParameters?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

/**
 * Parameters to use when applying callout extension recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CalloutExtensionParameters {
  /**
   * Callout extensions to be added. This is a required field.
   */
  calloutExtensions?: GoogleAdsSearchads360V23Common__CalloutFeedItem[];
}

/**
 * Parameters to use when applying a campaign budget recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters {
  /**
   * New budget amount to set for target budget resource. This is a required
   * field.
   */
  newBudgetAmountMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters {
  return {
    ...data,
    newBudgetAmountMicros: data["newBudgetAmountMicros"] !== undefined ? String(data["newBudgetAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_CampaignBudgetParameters {
  return {
    ...data,
    newBudgetAmountMicros: data["newBudgetAmountMicros"] !== undefined ? BigInt(data["newBudgetAmountMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying a set target CPA recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters {
  /**
   * New campaign budget amount to set for a campaign resource.
   */
  campaignBudgetAmountMicros?: bigint;
  /**
   * Average CPA to use for Target CPA bidding strategy.
   */
  targetCpaMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters {
  return {
    ...data,
    campaignBudgetAmountMicros: data["campaignBudgetAmountMicros"] !== undefined ? String(data["campaignBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetCpaParameters {
  return {
    ...data,
    campaignBudgetAmountMicros: data["campaignBudgetAmountMicros"] !== undefined ? BigInt(data["campaignBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying a forecasting set target roas
 * recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters {
  /**
   * New campaign budget amount to set for a campaign resource.
   */
  campaignBudgetAmountMicros?: bigint;
  /**
   * New target ROAS (revenue per unit of spend) to set for a campaign
   * resource. The value is between 0.01 and 1000.0, inclusive.
   */
  targetRoas?: number;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters {
  return {
    ...data,
    campaignBudgetAmountMicros: data["campaignBudgetAmountMicros"] !== undefined ? String(data["campaignBudgetAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ForecastingSetTargetRoasParameters {
  return {
    ...data,
    campaignBudgetAmountMicros: data["campaignBudgetAmountMicros"] !== undefined ? BigInt(data["campaignBudgetAmountMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying keyword recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters {
  /**
   * The ad group resource to add keyword to. This is a required field.
   */
  adGroup?: string;
  /**
   * Optional, CPC bid to set for the keyword. If not set, keyword will use bid
   * based on bidding strategy used by target ad group.
   */
  cpcBidMicros?: bigint;
  /**
   * The match type of the keyword. This is a required field.
   */
  matchType?:  | "UNSPECIFIED" | "UNKNOWN" | "EXACT" | "PHRASE" | "BROAD";
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? String(data["cpcBidMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_KeywordParameters {
  return {
    ...data,
    cpcBidMicros: data["cpcBidMicros"] !== undefined ? BigInt(data["cpcBidMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying a lead form asset recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters {
  /**
   * Required. Lead form assets to be added. This is a required field.
   */
  adAssetApplyParameters?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters;
  /**
   * If true, the "Submit Lead Form" goal will be set on the target campaign.
   * As a result, ads will be shown as lead form creative ads. If false, the
   * "Submit Lead Form" goal will not be set on the campaign and ads will
   * contain lead form assets.
   */
  setSubmitLeadFormAssetCampaignGoal?: boolean;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LeadFormAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

/**
 * Parameters to use when applying lower Target ROAS recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_LowerTargetRoasParameters {
  /**
   * Required. Target to set ROAS multiplier to. This is a required field.
   */
  targetRoasMultiplier?: number;
}

/**
 * Parameters to use when applying move unused budget recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters {
  /**
   * Budget amount to move from excess budget to constrained budget. This is a
   * required field.
   */
  budgetMicrosToMove?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters {
  return {
    ...data,
    budgetMicrosToMove: data["budgetMicrosToMove"] !== undefined ? String(data["budgetMicrosToMove"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_MoveUnusedBudgetParameters {
  return {
    ...data,
    budgetMicrosToMove: data["budgetMicrosToMove"] !== undefined ? BigInt(data["budgetMicrosToMove"]) : undefined,
  };
}

/**
 * Parameters to use when applying a raise target CPA bid too low
 * recommendation. The apply is asynchronous and can take minutes depending on
 * the number of ad groups there is in the related campaign..
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_RaiseTargetCpaBidTooLowParameters {
  /**
   * Required. A number greater than 1.0 indicating the factor by which to
   * increase the target CPA. This is a required field.
   */
  targetMultiplier?: number;
}

/**
 * Parameters to use when applying raise Target CPA recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_RaiseTargetCpaParameters {
  /**
   * Required. Target to set CPA multiplier to. This is a required field.
   */
  targetCpaMultiplier?: number;
}

/**
 * Parameters to use when applying a responsive search ad asset recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters {
  /**
   * Updated ad. The current ad's content will be replaced.
   */
  updatedAd?: GoogleAdsSearchads360V23Resources__Ad;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters {
  return {
    ...data,
    updatedAd: data["updatedAd"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["updatedAd"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdAssetParameters {
  return {
    ...data,
    updatedAd: data["updatedAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["updatedAd"]) : undefined,
  };
}

/**
 * Parameters to use when applying a responsive search ad improve ad strength
 * recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters {
  /**
   * Updated ad. The current ad's content will be replaced.
   */
  updatedAd?: GoogleAdsSearchads360V23Resources__Ad;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters {
  return {
    ...data,
    updatedAd: data["updatedAd"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["updatedAd"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdImproveAdStrengthParameters {
  return {
    ...data,
    updatedAd: data["updatedAd"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["updatedAd"]) : undefined,
  };
}

/**
 * Parameters to use when applying a responsive search ad recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters {
  /**
   * Required. New ad to add to recommended ad group.
   */
  ad?: GoogleAdsSearchads360V23Resources__Ad;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters {
  return {
    ...data,
    ad: data["ad"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_ResponsiveSearchAdParameters {
  return {
    ...data,
    ad: data["ad"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

/**
 * Parameters to use when applying sitelink asset recommendations.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters {
  /**
   * Required. Sitelink assets to be added. This is a required field.
   */
  adAssetApplyParameters?: GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkAssetParameters {
  return {
    ...data,
    adAssetApplyParameters: data["adAssetApplyParameters"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_AdAssetApplyParameters(data["adAssetApplyParameters"]) : undefined,
  };
}

/**
 * Parameters to use when applying sitelink recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_SitelinkExtensionParameters {
  /**
   * Sitelinks to be added. This is a required field.
   */
  sitelinkExtensions?: GoogleAdsSearchads360V23Common__SitelinkFeedItem[];
}

/**
 * Parameters to use when applying Target CPA recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters {
  /**
   * Optional, budget amount to set for the campaign.
   */
  newCampaignBudgetAmountMicros?: bigint;
  /**
   * Average CPA to use for Target CPA bidding strategy. This is a required
   * field.
   */
  targetCpaMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters {
  return {
    ...data,
    newCampaignBudgetAmountMicros: data["newCampaignBudgetAmountMicros"] !== undefined ? String(data["newCampaignBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetCpaOptInParameters {
  return {
    ...data,
    newCampaignBudgetAmountMicros: data["newCampaignBudgetAmountMicros"] !== undefined ? BigInt(data["newCampaignBudgetAmountMicros"]) : undefined,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying a Target ROAS opt-in recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters {
  /**
   * Optional, budget amount to set for the campaign.
   */
  newCampaignBudgetAmountMicros?: bigint;
  /**
   * Average ROAS (revenue per unit of spend) to use for Target ROAS bidding
   * strategy. The value is between 0.01 and 1000.0, inclusive. This is a
   * required field, unless new_campaign_budget_amount_micros is set.
   */
  targetRoas?: number;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters {
  return {
    ...data,
    newCampaignBudgetAmountMicros: data["newCampaignBudgetAmountMicros"] !== undefined ? String(data["newCampaignBudgetAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TargetRoasOptInParameters {
  return {
    ...data,
    newCampaignBudgetAmountMicros: data["newCampaignBudgetAmountMicros"] !== undefined ? BigInt(data["newCampaignBudgetAmountMicros"]) : undefined,
  };
}

/**
 * Parameters to use when applying a text ad recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters {
  /**
   * New ad to add to recommended ad group. All necessary fields need to be set
   * in this message. This is a required field.
   */
  ad?: GoogleAdsSearchads360V23Resources__Ad;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters {
  return {
    ...data,
    ad: data["ad"] !== undefined ? serializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_TextAdParameters {
  return {
    ...data,
    ad: data["ad"] !== undefined ? deserializeGoogleAdsSearchads360V23Resources__Ad(data["ad"]) : undefined,
  };
}

/**
 * Parameters to use when applying a use broad match keyword recommendation.
 */
export interface GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters {
  /**
   * New budget amount to set for target budget resource.
   */
  newBudgetAmountMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters {
  return {
    ...data,
    newBudgetAmountMicros: data["newBudgetAmountMicros"] !== undefined ? String(data["newBudgetAmountMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters(data: any): GoogleAdsSearchads360V23Services_ApplyRecommendationOperation_UseBroadMatchKeywordParameters {
  return {
    ...data,
    newBudgetAmountMicros: data["newBudgetAmountMicros"] !== undefined ? BigInt(data["newBudgetAmountMicros"]) : undefined,
  };
}

/**
 * Supported bidding strategies for new campaign forecasts.
 */
export interface GoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy {
  /**
   * Use manual CPC bidding strategy for forecasting.
   */
  manualCpcBiddingStrategy?: GoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy;
  /**
   * Use maximize clicks bidding strategy for forecasting.
   */
  maximizeClicksBiddingStrategy?: GoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy;
  /**
   * Use maximize conversions bidding strategy for forecasting.
   */
  maximizeConversionsBiddingStrategy?: GoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy;
}

function serializeGoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy(data: any): GoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy {
  return {
    ...data,
    manualCpcBiddingStrategy: data["manualCpcBiddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy(data["manualCpcBiddingStrategy"]) : undefined,
    maximizeClicksBiddingStrategy: data["maximizeClicksBiddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy(data["maximizeClicksBiddingStrategy"]) : undefined,
    maximizeConversionsBiddingStrategy: data["maximizeConversionsBiddingStrategy"] !== undefined ? serializeGoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy(data["maximizeConversionsBiddingStrategy"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy(data: any): GoogleAdsSearchads360V23Services_CampaignToForecast_CampaignBiddingStrategy {
  return {
    ...data,
    manualCpcBiddingStrategy: data["manualCpcBiddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__ManualCpcBiddingStrategy(data["manualCpcBiddingStrategy"]) : undefined,
    maximizeClicksBiddingStrategy: data["maximizeClicksBiddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MaximizeClicksBiddingStrategy(data["maximizeClicksBiddingStrategy"]) : undefined,
    maximizeConversionsBiddingStrategy: data["maximizeConversionsBiddingStrategy"] !== undefined ? deserializeGoogleAdsSearchads360V23Services__MaximizeConversionsBiddingStrategy(data["maximizeConversionsBiddingStrategy"]) : undefined,
  };
}

/**
 * Operation to dismiss a single recommendation identified by resource_name.
 */
export interface GoogleAdsSearchads360V23Services_DismissRecommendationRequest_DismissRecommendationOperation {
  /**
   * The resource name of the recommendation to dismiss.
   */
  resourceName?: string;
}

/**
 * The result of dismissing a recommendation.
 */
export interface GoogleAdsSearchads360V23Services_DismissRecommendationResponse_DismissRecommendationResult {
  /**
   * Returned for successful dismissals.
   */
  resourceName?: string;
}

/**
 * Current AdGroup Information of the campaign.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_AdGroupInfo {
  /**
   * Optional. AdGroup Type of the AdGroup. This field is necessary for the
   * following recommendation_types if ad_group_info is set: KEYWORD
   */
  adGroupType?:  | "UNSPECIFIED" | "UNKNOWN" | "SEARCH_STANDARD" | "DISPLAY_STANDARD" | "SHOPPING_PRODUCT_ADS" | "HOTEL_ADS" | "SHOPPING_SMART_ADS" | "VIDEO_BUMPER" | "VIDEO_TRUE_VIEW_IN_STREAM" | "VIDEO_TRUE_VIEW_IN_DISPLAY" | "VIDEO_NON_SKIPPABLE_IN_STREAM" | "SEARCH_DYNAMIC_ADS" | "SHOPPING_COMPARISON_LISTING_ADS" | "PROMOTED_HOTEL_ADS" | "VIDEO_RESPONSIVE" | "VIDEO_EFFICIENT_REACH" | "SMART_CAMPAIGN_ADS" | "TRAVEL_ADS";
  /**
   * Optional. Current keywords. This field is optional for the following
   * recommendation_types if ad_group_info is set: KEYWORD
   */
  keywords?: GoogleAdsSearchads360V23Common__KeywordInfo[];
}

/**
 * Current AssetGroup information of the campaign.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_AssetGroupInfo {
  /**
   * Optional. Current descriptions of the asset group. This field is optional
   * for the following recommendation_types if asset_group_info is set:
   * CAMPAIGN_BUDGET
   */
  description?: string[];
  /**
   * Required. Current url of the asset group. This field is necessary for the
   * following recommendation_types if asset_group_info is set: CAMPAIGN_BUDGET
   */
  finalUrl?: string;
  /**
   * Optional. Current headlines of the asset group. This field is optional for
   * the following recommendation_types if asset_group_info is set:
   * CAMPAIGN_BUDGET
   */
  headline?: string[];
}

/**
 * Current bidding information of the campaign. Provides a wrapper for
 * bidding-related signals that inform recommendations.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo {
  /**
   * Current bidding strategy. This field is necessary for the following
   * recommendation_types: MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
   * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
   * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
   */
  biddingStrategyType?:  | "UNSPECIFIED" | "UNKNOWN" | "COMMISSION" | "ENHANCED_CPC" | "INVALID" | "MANUAL_CPA" | "MANUAL_CPC" | "MANUAL_CPM" | "MANUAL_CPV" | "MAXIMIZE_CONVERSIONS" | "MAXIMIZE_CONVERSION_VALUE" | "PAGE_ONE_PROMOTED" | "PERCENT_CPC" | "TARGET_CPA" | "TARGET_CPC" | "TARGET_CPM" | "TARGET_IMPRESSION_SHARE" | "TARGET_OUTRANK_SHARE" | "TARGET_ROAS" | "TARGET_SPEND";
  /**
   * Current target_cpa in micros. This can be populated for campaigns with a
   * bidding strategy type of TARGET_CPA or MAXIMIZE_CONVERSIONS.
   */
  targetCpaMicros?: bigint;
  /**
   * Optional. Current Target Impression Share information of the campaign.
   * This field is necessary for the following recommendation_types:
   * CAMPAIGN_BUDGET
   */
  targetImpressionShareInfo?: GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo;
  /**
   * Current target_roas. This can be populated for campaigns with a bidding
   * strategy type of TARGET_ROAS or MAXIMIZE_CONVERSION_VALUE.
   */
  targetRoas?: number;
}

function serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo {
  return {
    ...data,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? String(data["targetCpaMicros"]) : undefined,
    targetImpressionShareInfo: data["targetImpressionShareInfo"] !== undefined ? serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo(data["targetImpressionShareInfo"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BiddingInfo {
  return {
    ...data,
    targetCpaMicros: data["targetCpaMicros"] !== undefined ? BigInt(data["targetCpaMicros"]) : undefined,
    targetImpressionShareInfo: data["targetImpressionShareInfo"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo(data["targetImpressionShareInfo"]) : undefined,
  };
}

/**
 * Current budget information of the campaign.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo {
  /**
   * Required. Current budget amount in micros. This field is necessary for the
   * following recommendation_types if budget_info is set: CAMPAIGN_BUDGET
   */
  currentBudget?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo {
  return {
    ...data,
    currentBudget: data["currentBudget"] !== undefined ? String(data["currentBudget"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_BudgetInfo {
  return {
    ...data,
    currentBudget: data["currentBudget"] !== undefined ? BigInt(data["currentBudget"]) : undefined,
  };
}

/**
 * A keyword seed and a specific url to generate keywords from.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_SeedInfo {
  /**
   * Optional. Keywords or phrases to generate ideas from, for example: cars or
   * "car dealership near me".
   */
  keywordSeeds?: string[];
  /**
   * A specific url to generate ideas from, for example: www.example.com/cars.
   */
  urlSeed?: string;
}

/**
 * Current Target Impression Share information of the campaign.
 */
export interface GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo {
  /**
   * Required. The targeted location on the search results page. This is
   * required for campaigns where the AdvertisingChannelType is SEARCH and the
   * bidding strategy type is TARGET_IMPRESSION_SHARE.
   */
  location?:  | "UNSPECIFIED" | "UNKNOWN" | "ANYWHERE_ON_PAGE" | "TOP_OF_PAGE" | "ABSOLUTE_TOP_OF_PAGE";
  /**
   * Optional. Ceiling of max CPC bids in micros set by automated bidders. This
   * is optional for campaigns with an AdvertisingChannelType of SEARCH and a
   * bidding strategy type of TARGET_IMPRESSION_SHARE.
   */
  maxCpcBidCeiling?: bigint;
  /**
   * Required. The chosen fraction of targeted impression share in micros. For
   * example, 1% equals 10,000. It must be a value between 1 and 1,000,000. This
   * is required for campaigns with an AdvertisingChannelType of SEARCH and a
   * bidding strategy type of TARGET_IMPRESSION_SHARE.
   */
  targetImpressionShareMicros?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo {
  return {
    ...data,
    maxCpcBidCeiling: data["maxCpcBidCeiling"] !== undefined ? String(data["maxCpcBidCeiling"]) : undefined,
    targetImpressionShareMicros: data["targetImpressionShareMicros"] !== undefined ? String(data["targetImpressionShareMicros"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo(data: any): GoogleAdsSearchads360V23Services_GenerateRecommendationsRequest_TargetImpressionShareInfo {
  return {
    ...data,
    maxCpcBidCeiling: data["maxCpcBidCeiling"] !== undefined ? BigInt(data["maxCpcBidCeiling"]) : undefined,
    targetImpressionShareMicros: data["targetImpressionShareMicros"] !== undefined ? BigInt(data["targetImpressionShareMicros"]) : undefined,
  };
}

/**
 * Requirement for an incentive.
 */
export interface GoogleAdsSearchads360V23Services_Incentive_Requirement {
  /**
   * Optional. Spend requirement for an incentive.
   */
  spend?: GoogleAdsSearchads360V23Services_IncentiveRequirement_Spend;
}

function serializeGoogleAdsSearchads360V23Services_Incentive_Requirement(data: any): GoogleAdsSearchads360V23Services_Incentive_Requirement {
  return {
    ...data,
    spend: data["spend"] !== undefined ? serializeGoogleAdsSearchads360V23Services_IncentiveRequirement_Spend(data["spend"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_Incentive_Requirement(data: any): GoogleAdsSearchads360V23Services_Incentive_Requirement {
  return {
    ...data,
    spend: data["spend"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_IncentiveRequirement_Spend(data["spend"]) : undefined,
  };
}

/**
 * Spend requirements for an incentive.
 */
export interface GoogleAdsSearchads360V23Services_IncentiveRequirement_Spend {
  /**
   * Required. Amount in free spend that user will be granted after spending
   * target amount. Denominated in the currency of the country passed in the get
   * request.
   */
  awardAmount?: GoogleType__Money;
  /**
   * Required. Amount that user must spend to receive the award amount.
   * Denominated in the currency of the country passed in the get request.
   */
  requiredAmount?: GoogleType__Money;
}

function serializeGoogleAdsSearchads360V23Services_IncentiveRequirement_Spend(data: any): GoogleAdsSearchads360V23Services_IncentiveRequirement_Spend {
  return {
    ...data,
    awardAmount: data["awardAmount"] !== undefined ? serializeGoogleType__Money(data["awardAmount"]) : undefined,
    requiredAmount: data["requiredAmount"] !== undefined ? serializeGoogleType__Money(data["requiredAmount"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_IncentiveRequirement_Spend(data: any): GoogleAdsSearchads360V23Services_IncentiveRequirement_Spend {
  return {
    ...data,
    awardAmount: data["awardAmount"] !== undefined ? deserializeGoogleType__Money(data["awardAmount"]) : undefined,
    requiredAmount: data["requiredAmount"] !== undefined ? deserializeGoogleType__Money(data["requiredAmount"]) : undefined,
  };
}

/**
 * The attribute of the metric in key value pair format.
 */
export interface GoogleAdsSearchads360V23Services_MetricAttributes_Attribute {
  /**
   * The key of the attribute.
   */
  key?: string;
  /**
   * The value of the attribute.
   */
  value?: string;
}

/**
 * The list of marketing objectives to generate benchmarks metrics for.
 */
export interface GoogleAdsSearchads360V23Services_ProductFilter_MarketingObjectiveList {
  /**
   * Required. Marketing objectives to generate benchmarks metrics for.
   */
  marketingObjectives?:  | "UNSPECIFIED" | "UNKNOWN" | "AWARENESS" | "CONSIDERATION" | "ACTION"[];
}

/**
 * The list of products to generate benchmarks metrics for.
 */
export interface GoogleAdsSearchads360V23Services_ProductFilter_ProductList {
  /**
   * Required. Products to generate benchmarks metrics for.
   */
  productCodes?: string[];
}

/**
 * A context that describes a business.
 */
export interface GoogleAdsSearchads360V23Services_SmartCampaignSuggestionInfo_BusinessContext {
  /**
   * Optional. The name of the business.
   */
  businessName?: string;
}

/**
 * A list of locations.
 */
export interface GoogleAdsSearchads360V23Services_SmartCampaignSuggestionInfo_LocationList {
  /**
   * Required. Locations.
   */
  locations?: GoogleAdsSearchads360V23Common__LocationInfo[];
}

/**
 * A list of geo target constant resource names.
 */
export interface GoogleAdsSearchads360V23Services_SuggestGeoTargetConstantsRequest_GeoTargets {
  /**
   * A list of geo target constant resource names.
   */
  geoTargetConstants?: string[];
}

/**
 * A list of location names.
 */
export interface GoogleAdsSearchads360V23Services_SuggestGeoTargetConstantsRequest_LocationNames {
  /**
   * A list of location names.
   */
  names?: string[];
}

/**
 * A Smart campaign keyword theme suggestion.
 */
export interface GoogleAdsSearchads360V23Services_SuggestKeywordThemesResponse_KeywordTheme {
  /**
   * A free-form text keyword theme.
   */
  freeFormKeywordTheme?: string;
  /**
   * A Smart campaign keyword theme constant.
   */
  keywordThemeConstant?: GoogleAdsSearchads360V23Resources__KeywordThemeConstant;
}

/**
 * Smart Campaign budget option.
 */
export interface GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption {
  /**
   * The amount of the budget, in the local currency for the account. Amount is
   * specified in micros, where one million is equivalent to one currency unit.
   */
  dailyAmountMicros?: bigint;
  /**
   * Metrics pertaining to the suggested budget, could be empty if there is not
   * enough information to derive the estimates.
   */
  metrics?: GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics;
}

function serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data: any): GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption {
  return {
    ...data,
    dailyAmountMicros: data["dailyAmountMicros"] !== undefined ? String(data["dailyAmountMicros"]) : undefined,
    metrics: data["metrics"] !== undefined ? serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics(data["metrics"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption(data: any): GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_BudgetOption {
  return {
    ...data,
    dailyAmountMicros: data["dailyAmountMicros"] !== undefined ? BigInt(data["dailyAmountMicros"]) : undefined,
    metrics: data["metrics"] !== undefined ? deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics(data["metrics"]) : undefined,
  };
}

/**
 * Performance metrics for a given budget option.
 */
export interface GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics {
  /**
   * The estimated max daily clicks.
   */
  maxDailyClicks?: bigint;
  /**
   * The estimated min daily clicks.
   */
  minDailyClicks?: bigint;
}

function serializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics(data: any): GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics {
  return {
    ...data,
    maxDailyClicks: data["maxDailyClicks"] !== undefined ? String(data["maxDailyClicks"]) : undefined,
    minDailyClicks: data["minDailyClicks"] !== undefined ? String(data["minDailyClicks"]) : undefined,
  };
}

function deserializeGoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics(data: any): GoogleAdsSearchads360V23Services_SuggestSmartCampaignBudgetOptionsResponse_Metrics {
  return {
    ...data,
    maxDailyClicks: data["maxDailyClicks"] !== undefined ? BigInt(data["maxDailyClicks"]) : undefined,
    minDailyClicks: data["minDailyClicks"] !== undefined ? BigInt(data["minDailyClicks"]) : undefined,
  };
}

/**
 * This resource represents a long-running operation that is the result of a
 * network API call.
 */
export interface GoogleLongrunning__Operation {
  /**
   * If the value is `false`, it means the operation is still in progress. If
   * `true`, the operation is completed, and either `error` or `response` is
   * available.
   */
  done?: boolean;
  /**
   * The error result of the operation in case of failure or cancellation.
   */
  error?: GoogleRpc__Status;
  /**
   * Service-specific metadata associated with the operation. It typically
   * contains progress information and common metadata such as create time. Some
   * services might not provide such metadata. Any method that returns a
   * long-running operation should document the metadata type, if any.
   */
  metadata?: {
    [key: string]: any
  };
  /**
   * The server-assigned name, which is only unique within the same service
   * that originally returns it. If you use the default HTTP mapping, the `name`
   * should be a resource name ending with `operations/{unique_id}`.
   */
  name?: string;
  /**
   * The normal, successful response of the operation. If the original method
   * returns no data on success, such as `Delete`, the response is
   * `google.protobuf.Empty`. If the original method is standard
   * `Get`/`Create`/`Update`, the response should be the resource. For other
   * methods, the response should have the type `XxxResponse`, where `Xxx` is
   * the original method name. For example, if the original method name is
   * `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
   */
  response?: {
    [key: string]: any
  };
}

/**
 * A generic empty message that you can re-use to avoid defining duplicated
 * empty messages in your APIs. A typical example is to use it as the request or
 * the response type of an API method. For instance: service Foo { rpc
 * Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
 */
export interface GoogleProtobuf__Empty {
}

/**
 * The `Status` type defines a logical error model that is suitable for
 * different programming environments, including REST APIs and RPC APIs. It is
 * used by [gRPC](https://github.com/grpc). Each `Status` message contains three
 * pieces of data: error code, error message, and error details. You can find
 * out more about this error model and how to work with it in the [API Design
 * Guide](https://cloud.google.com/apis/design/errors).
 */
export interface GoogleRpc__Status {
  /**
   * The status code, which should be an enum value of google.rpc.Code.
   */
  code?: number;
  /**
   * A list of messages that carry the error details. There is a common set of
   * message types for APIs to use.
   */
  details?: {
    [key: string]: any
  }[];
  /**
   * A developer-facing error message, which should be in English. Any
   * user-facing error message should be localized and sent in the
   * google.rpc.Status.details field, or localized by the client.
   */
  message?: string;
}

/**
 * Represents an amount of money with its currency type.
 */
export interface GoogleType__Money {
  /**
   * The three-letter currency code defined in ISO 4217.
   */
  currencyCode?: string;
  /**
   * Number of nano (10^-9) units of the amount. The value must be between
   * -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos`
   * must be positive or zero. If `units` is zero, `nanos` can be positive,
   * zero, or negative. If `units` is negative, `nanos` must be negative or
   * zero. For example $-1.75 is represented as `units`=-1 and
   * `nanos`=-750,000,000.
   */
  nanos?: number;
  /**
   * The whole units of the amount. For example if `currencyCode` is `"USD"`,
   * then 1 unit is one US dollar.
   */
  units?: bigint;
}

function serializeGoogleType__Money(data: any): GoogleType__Money {
  return {
    ...data,
    units: data["units"] !== undefined ? String(data["units"]) : undefined,
  };
}

function deserializeGoogleType__Money(data: any): GoogleType__Money {
  return {
    ...data,
    units: data["units"] !== undefined ? BigInt(data["units"]) : undefined,
  };
}

/**
 * Additional options for SearchAds360#incentivesFetchIncentive.
 */
export interface IncentivesFetchIncentiveOptions {
  /**
   * Optional. User's country code. If not provided, the server will default to
   * "US". Possible country codes:
   * https://developers.google.com/google-ads/api/data/codes-formats#country_codes
   */
  countryCode?: string;
  /**
   * Optional. Email of the user that the requested incentive is meant for.
   * Will be used for channel partners who do NOT use OAuth to authenticate on
   * behalf of user.
   */
  email?: string;
  /**
   * Optional. User's language code. If not provided, the server will default
   * to "en". Possible language codes:
   * https://developers.google.com/google-ads/api/data/codes-formats#languages
   */
  languageCode?: string;
  /**
   * Optional. The type of incentive to get. Defaults to ACQUISITION.
   */
  type?:  | "UNSPECIFIED" | "UNKNOWN" | "ACQUISITION";
}

function decodeBase64(b64: string): Uint8Array {
  const binString = atob(b64);
  const size = binString.length;
  const bytes = new Uint8Array(size);
  for (let i = 0; i < size; i++) {
    bytes[i] = binString.charCodeAt(i);
  }
  return bytes;
}

const base64abc = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"];
/**
 * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
 * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
 * @param data
 */
function encodeBase64(uint8: Uint8Array): string {
  let result = "", i;
  const l = uint8.length;
  for (i = 2; i < l; i += 3) {
    result += base64abc[uint8[i - 2] >> 2];
    result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
    result += base64abc[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)];
    result += base64abc[uint8[i] & 0x3f];
  }
  if (i === l + 1) {
    // 1 octet yet to write
    result += base64abc[uint8[i - 2] >> 2];
    result += base64abc[(uint8[i - 2] & 0x03) << 4];
    result += "==";
  }
  if (i === l) {
    // 2 octets yet to write
    result += base64abc[uint8[i - 2] >> 2];
    result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)];
    result += base64abc[(uint8[i - 1] & 0x0f) << 2];
    result += "=";
  }
  return result;
}
