# Encoding: utf-8
#
# This is auto-generated code, changes will be overwritten.
#
# Copyright:: Copyright 2025, Google Inc. All Rights Reserved.
# License:: Licensed under the Apache License, Version 2.0.
#
# Code generated by AdsCommon library 3.0.0 on 2025-08-12 14:47:19.

require 'ad_manager_api/errors'

module AdManagerApi; module V202505; module CustomTargetingService
  class CustomTargetingServiceRegistry
    CUSTOMTARGETINGSERVICE_METHODS = {create_custom_targeting_keys: {input: [{name: :keys, type: "CustomTargetingKey", min_occurs: 0, max_occurs: :unbounded}], output: {name: "create_custom_targeting_keys_response", fields: [{name: :rval, type: "CustomTargetingKey", min_occurs: 0, max_occurs: :unbounded}]}}, create_custom_targeting_values: {input: [{name: :values, type: "CustomTargetingValue", min_occurs: 0, max_occurs: :unbounded}], output: {name: "create_custom_targeting_values_response", fields: [{name: :rval, type: "CustomTargetingValue", min_occurs: 0, max_occurs: :unbounded}]}}, get_custom_targeting_keys_by_statement: {input: [{name: :filter_statement, type: "Statement", min_occurs: 0, max_occurs: 1}], output: {name: "get_custom_targeting_keys_by_statement_response", fields: [{name: :rval, type: "CustomTargetingKeyPage", min_occurs: 0, max_occurs: 1}]}}, get_custom_targeting_values_by_statement: {input: [{name: :filter_statement, type: "Statement", min_occurs: 0, max_occurs: 1}], output: {name: "get_custom_targeting_values_by_statement_response", fields: [{name: :rval, type: "CustomTargetingValuePage", min_occurs: 0, max_occurs: 1}]}}, perform_custom_targeting_key_action: {input: [{name: :custom_targeting_key_action, type: "CustomTargetingKeyAction", min_occurs: 0, max_occurs: 1}, {name: :filter_statement, type: "Statement", min_occurs: 0, max_occurs: 1}], output: {name: "perform_custom_targeting_key_action_response", fields: [{name: :rval, type: "UpdateResult", min_occurs: 0, max_occurs: 1}]}}, perform_custom_targeting_value_action: {input: [{name: :custom_targeting_value_action, type: "CustomTargetingValueAction", min_occurs: 0, max_occurs: 1}, {name: :filter_statement, type: "Statement", min_occurs: 0, max_occurs: 1}], output: {name: "perform_custom_targeting_value_action_response", fields: [{name: :rval, type: "UpdateResult", min_occurs: 0, max_occurs: 1}]}}, update_custom_targeting_keys: {input: [{name: :keys, type: "CustomTargetingKey", min_occurs: 0, max_occurs: :unbounded}], output: {name: "update_custom_targeting_keys_response", fields: [{name: :rval, type: "CustomTargetingKey", min_occurs: 0, max_occurs: :unbounded}]}}, update_custom_targeting_values: {input: [{name: :values, type: "CustomTargetingValue", min_occurs: 0, max_occurs: :unbounded}], output: {name: "update_custom_targeting_values_response", fields: [{name: :rval, type: "CustomTargetingValue", min_occurs: 0, max_occurs: :unbounded}]}}}
    CUSTOMTARGETINGSERVICE_TYPES = {ObjectValue: {fields: [], abstract: true, base: "Value"}, ActivateCustomTargetingKeys: {fields: [], base: "CustomTargetingKeyAction"}, ActivateCustomTargetingValues: {fields: [], base: "CustomTargetingValueAction"}, ApiError: {fields: [{name: :field_path, type: "string", min_occurs: 0, max_occurs: 1}, {name: :field_path_elements, type: "FieldPathElement", min_occurs: 0, max_occurs: :unbounded}, {name: :trigger, type: "string", min_occurs: 0, max_occurs: 1}, {name: :error_string, type: "string", min_occurs: 0, max_occurs: 1}], abstract: true}, ApiException: {fields: [{name: :errors, type: "ApiError", min_occurs: 0, max_occurs: :unbounded}], base: "ApplicationException"}, ApiVersionError: {fields: [{name: :reason, type: "ApiVersionError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, ApplicationException: {fields: [{name: :message, type: "string", min_occurs: 0, max_occurs: 1}]}, AuthenticationError: {fields: [{name: :reason, type: "AuthenticationError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, BooleanValue: {fields: [{name: :value, type: "boolean", min_occurs: 0, max_occurs: 1}], base: "Value"}, CollectionSizeError: {fields: [{name: :reason, type: "CollectionSizeError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, CommonError: {fields: [{name: :reason, type: "CommonError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, CustomTargetingError: {fields: [{name: :reason, type: "CustomTargetingError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, CustomTargetingKeyAction: {fields: [], abstract: true}, CustomTargetingKey: {fields: [{name: :id, type: "long", min_occurs: 0, max_occurs: 1}, {name: :name, type: "string", min_occurs: 0, max_occurs: 1}, {name: :display_name, type: "string", min_occurs: 0, max_occurs: 1}, {name: :type, type: "CustomTargetingKey.Type", min_occurs: 0, max_occurs: 1}, {name: :status, type: "CustomTargetingKey.Status", min_occurs: 0, max_occurs: 1}, {name: :reportable_type, type: "ReportableType", min_occurs: 0, max_occurs: 1}]}, CustomTargetingKeyPage: {fields: [{name: :total_result_set_size, type: "int", min_occurs: 0, max_occurs: 1}, {name: :start_index, type: "int", min_occurs: 0, max_occurs: 1}, {name: :results, type: "CustomTargetingKey", min_occurs: 0, max_occurs: :unbounded}]}, CustomTargetingValueAction: {fields: [], abstract: true}, CustomTargetingValue: {fields: [{name: :custom_targeting_key_id, type: "long", min_occurs: 0, max_occurs: 1}, {name: :id, type: "long", min_occurs: 0, max_occurs: 1}, {name: :name, type: "string", min_occurs: 0, max_occurs: 1}, {name: :display_name, type: "string", min_occurs: 0, max_occurs: 1}, {name: :match_type, type: "CustomTargetingValue.MatchType", min_occurs: 0, max_occurs: 1}, {name: :status, type: "CustomTargetingValue.Status", min_occurs: 0, max_occurs: 1}]}, CustomTargetingValuePage: {fields: [{name: :total_result_set_size, type: "int", min_occurs: 0, max_occurs: 1}, {name: :start_index, type: "int", min_occurs: 0, max_occurs: 1}, {name: :results, type: "CustomTargetingValue", min_occurs: 0, max_occurs: :unbounded}]}, Date: {fields: [{name: :year, type: "int", min_occurs: 0, max_occurs: 1}, {name: :month, type: "int", min_occurs: 0, max_occurs: 1}, {name: :day, type: "int", min_occurs: 0, max_occurs: 1}]}, DateTime: {fields: [{name: :date, type: "Date", min_occurs: 0, max_occurs: 1}, {name: :hour, type: "int", min_occurs: 0, max_occurs: 1}, {name: :minute, type: "int", min_occurs: 0, max_occurs: 1}, {name: :second, type: "int", min_occurs: 0, max_occurs: 1}, {name: :time_zone_id, type: "string", min_occurs: 0, max_occurs: 1}]}, DateTimeValue: {fields: [{name: :value, type: "DateTime", min_occurs: 0, max_occurs: 1}], base: "Value"}, DateValue: {fields: [{name: :value, type: "Date", min_occurs: 0, max_occurs: 1}], base: "Value"}, DeleteCustomTargetingKeys: {fields: [], base: "CustomTargetingKeyAction"}, DeleteCustomTargetingValues: {fields: [], base: "CustomTargetingValueAction"}, EntityChildrenLimitReachedError: {fields: [{name: :reason, type: "EntityChildrenLimitReachedError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, EntityLimitReachedError: {fields: [{name: :reason, type: "EntityLimitReachedError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, FeatureError: {fields: [{name: :reason, type: "FeatureError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, FieldPathElement: {fields: [{name: :field, type: "string", min_occurs: 0, max_occurs: 1}, {name: :index, type: "int", min_occurs: 0, max_occurs: 1}]}, InternalApiError: {fields: [{name: :reason, type: "InternalApiError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, NotNullError: {fields: [{name: :reason, type: "NotNullError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, NullError: {fields: [{name: :reason, type: "NullError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, NumberValue: {fields: [{name: :value, type: "string", min_occurs: 0, max_occurs: 1}], base: "Value"}, ParseError: {fields: [{name: :reason, type: "ParseError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, PermissionError: {fields: [{name: :reason, type: "PermissionError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, PublisherQueryLanguageContextError: {fields: [{name: :reason, type: "PublisherQueryLanguageContextError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, PublisherQueryLanguageSyntaxError: {fields: [{name: :reason, type: "PublisherQueryLanguageSyntaxError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, QuotaError: {fields: [{name: :reason, type: "QuotaError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, RequiredCollectionError: {fields: [{name: :reason, type: "RequiredCollectionError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, RequiredError: {fields: [{name: :reason, type: "RequiredError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, ServerError: {fields: [{name: :reason, type: "ServerError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, SetValue: {fields: [{name: :values, type: "Value", min_occurs: 0, max_occurs: :unbounded}], base: "Value"}, SoapRequestHeader: {fields: [{name: :network_code, type: "string", min_occurs: 0, max_occurs: 1}, {name: :application_name, type: "string", min_occurs: 0, max_occurs: 1}]}, SoapResponseHeader: {fields: [{name: :request_id, type: "string", min_occurs: 0, max_occurs: 1}, {name: :response_time, type: "long", min_occurs: 0, max_occurs: 1}]}, Statement: {fields: [{name: :query, type: "string", min_occurs: 0, max_occurs: 1}, {name: :values, type: "String_ValueMapEntry", min_occurs: 0, max_occurs: :unbounded}]}, StatementError: {fields: [{name: :reason, type: "StatementError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, StringFormatError: {fields: [{name: :reason, type: "StringFormatError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, StringLengthError: {fields: [{name: :reason, type: "StringLengthError.Reason", min_occurs: 0, max_occurs: 1}], base: "ApiError"}, String_ValueMapEntry: {fields: [{name: :key, type: "string", min_occurs: 0, max_occurs: 1}, {name: :value, type: "Value", min_occurs: 0, max_occurs: 1}]}, TextValue: {fields: [{name: :value, type: "string", min_occurs: 0, max_occurs: 1}], base: "Value"}, TypeError: {fields: [], base: "ApiError"}, UniqueError: {fields: [], base: "ApiError"}, UpdateResult: {fields: [{name: :num_changes, type: "int", min_occurs: 0, max_occurs: 1}]}, Value: {fields: [], abstract: true}, "ApiVersionError.Reason": {type: "string", enumerations: ["UPDATE_TO_NEWER_VERSION", "UNKNOWN"]}, "AuthenticationError.Reason": {type: "string", enumerations: ["AMBIGUOUS_SOAP_REQUEST_HEADER", "INVALID_EMAIL", "AUTHENTICATION_FAILED", "INVALID_OAUTH_SIGNATURE", "INVALID_SERVICE", "MISSING_SOAP_REQUEST_HEADER", "MISSING_AUTHENTICATION_HTTP_HEADER", "MISSING_AUTHENTICATION", "NETWORK_API_ACCESS_DISABLED", "NO_NETWORKS_TO_ACCESS", "NETWORK_NOT_FOUND", "NETWORK_CODE_REQUIRED", "CONNECTION_ERROR", "GOOGLE_ACCOUNT_ALREADY_ASSOCIATED_WITH_NETWORK", "UNDER_INVESTIGATION", "UNKNOWN"]}, "CollectionSizeError.Reason": {type: "string", enumerations: ["TOO_LARGE", "UNKNOWN"]}, "CommonError.Reason": {type: "string", enumerations: ["NOT_FOUND", "ALREADY_EXISTS", "NOT_APPLICABLE", "DUPLICATE_OBJECT", "CANNOT_UPDATE", "UNSUPPORTED_OPERATION", "CONCURRENT_MODIFICATION", "UNKNOWN"]}, "CustomTargetingError.Reason": {type: "string", enumerations: ["KEY_NOT_FOUND", "KEY_COUNT_TOO_LARGE", "KEY_NAME_DUPLICATE", "KEY_NAME_EMPTY", "KEY_NAME_INVALID_LENGTH", "KEY_NAME_INVALID_CHARS", "KEY_NAME_RESERVED", "KEY_DISPLAY_NAME_INVALID_LENGTH", "KEY_STATUS_NOT_ACTIVE", "VALUE_NOT_FOUND", "GET_VALUES_BY_STATEMENT_MUST_CONTAIN_KEY_ID", "VALUE_COUNT_FOR_KEY_TOO_LARGE", "VALUE_NAME_DUPLICATE", "VALUE_NAME_EMPTY", "VALUE_NAME_INVALID_LENGTH", "VALUE_NAME_INVALID_CHARS", "VALUE_DISPLAY_NAME_INVALID_LENGTH", "VALUE_MATCH_TYPE_NOT_ALLOWED", "VALUE_MATCH_TYPE_NOT_EXACT_FOR_PREDEFINED_KEY", "SUFFIX_MATCH_TYPE_NOT_ALLOWED", "CONTAINS_MATCH_TYPE_NOT_ALLOWED", "VALUE_STATUS_NOT_ACTIVE", "KEY_WITH_MISSING_VALUES", "INVALID_VALUE_FOR_KEY", "CANNOT_OR_DIFFERENT_KEYS", "INVALID_TARGETING_EXPRESSION", "DELETED_KEY_CANNOT_BE_USED_FOR_TARGETING", "DELETED_VALUE_CANNOT_BE_USED_FOR_TARGETING", "VIDEO_BROWSE_BY_KEY_CANNOT_BE_USED_FOR_CUSTOM_TARGETING", "CANNOT_DELETE_CUSTOM_KEY_USED_IN_PARTNER_ASSIGNMENT_TARGETING", "CANNOT_DELETE_CUSTOM_VALUE_USED_IN_PARTNER_ASSIGNMENT_TARGETING", "CANNOT_TARGET_AUDIENCE_SEGMENT", "CANNOT_TARGET_THIRD_PARTY_AUDIENCE_SEGMENT", "CANNOT_TARGET_INACTIVE_AUDIENCE_SEGMENT", "INVALID_AUDIENCE_SEGMENTS", "CANNOT_TARGET_MAPPED_METADATA", "ONLY_APPROVED_AUDIENCE_SEGMENTS_CAN_BE_TARGETED", "UNKNOWN"]}, "CustomTargetingKey.Status": {type: "string", enumerations: ["ACTIVE", "INACTIVE", "UNKNOWN"]}, "CustomTargetingKey.Type": {type: "string", enumerations: ["PREDEFINED", "FREEFORM"]}, "CustomTargetingValue.MatchType": {type: "string", enumerations: ["EXACT", "BROAD", "PREFIX", "BROAD_PREFIX", "SUFFIX", "CONTAINS", "UNKNOWN"]}, "CustomTargetingValue.Status": {type: "string", enumerations: ["ACTIVE", "INACTIVE", "UNKNOWN"]}, "EntityChildrenLimitReachedError.Reason": {type: "string", enumerations: ["LINE_ITEM_LIMIT_FOR_ORDER_REACHED", "CREATIVE_ASSOCIATION_LIMIT_FOR_LINE_ITEM_REACHED", "AD_UNIT_LIMIT_FOR_PLACEMENT_REACHED", "TARGETING_EXPRESSION_LIMIT_FOR_LINE_ITEM_REACHED", "TARGETING_EXPRESSION_SIZE_LIMIT_REACHED", "CUSTOM_TARGETING_VALUES_FOR_KEY_LIMIT_REACHED", "TARGETING_EXPRESSION_LIMIT_FOR_CREATIVES_ON_LINE_ITEM_REACHED", "ATTACHMENT_LIMIT_FOR_PROPOSAL_REACHED", "PROPOSAL_LINE_ITEM_LIMIT_FOR_PROPOSAL_REACHED", "PRODUCT_LIMIT_FOR_PRODUCT_PACKAGE_REACHED", "PRODUCT_TEMPLATE_AND_PRODUCT_BASE_RATE_LIMIT_FOR_RATE_CARD_REACHED", "PRODUCT_PACKAGE_ITEM_BASE_RATE_LIMIT_FOR_RATE_CARD_REACHED", "PREMIUM_LIMIT_FOR_RATE_CARD_REACHED", "AD_UNIT_LIMIT_FOR_AD_EXCLUSION_RULE_TARGETING_REACHED", "NATIVE_STYLE_LIMIT_FOR_NATIVE_AD_FORMAT_REACHED", "TARGETING_EXPRESSION_LIMIT_FOR_PRESENTATION_ASSIGNMENT_REACHED", "UNKNOWN"]}, "EntityLimitReachedError.Reason": {type: "string", enumerations: ["CUSTOM_TARGETING_VALUES_LIMIT_REACHED", "AD_EXCLUSION_RULES_LIMIT_REACHED", "FIRST_PARTY_AUDIENCE_SEGMENTS_LIMIT_REACHED", "PLACEMENTS_LIMIT_REACHED", "LINE_ITEMS_LIMIT_REACHED", "ACTIVE_LINE_ITEMS_LIMIT_REACHED", "DAI_ENCODING_PROFILES_LIMIT_REACHED", "TRAFFIC_FORECAST_SEGMENTS_LIMIT_REACHED", "FORECAST_ADJUSTMENTS_LIMIT_REACHED", "ACTIVE_EXPERIMENTS_LIMIT_REACHED", "SITES_LIMIT_REACHED", "USER_TEAMS_LIMIT_REACHED", "ACTIVE_TARGETING_PRESETS_LIMIT_REACHED", "UNKNOWN"]}, "FeatureError.Reason": {type: "string", enumerations: ["MISSING_FEATURE", "UNKNOWN"]}, "InternalApiError.Reason": {type: "string", enumerations: ["UNEXPECTED_INTERNAL_API_ERROR", "TRANSIENT_ERROR", "UNKNOWN", "DOWNTIME", "ERROR_GENERATING_RESPONSE"]}, "NotNullError.Reason": {type: "string", enumerations: ["ARG1_NULL", "ARG2_NULL", "ARG3_NULL", "NULL", "UNKNOWN"]}, "NullError.Reason": {type: "string", enumerations: ["NULL_CONTENT"]}, "ParseError.Reason": {type: "string", enumerations: ["UNPARSABLE", "UNKNOWN"]}, "PermissionError.Reason": {type: "string", enumerations: ["PERMISSION_DENIED", "UNKNOWN"]}, "PublisherQueryLanguageContextError.Reason": {type: "string", enumerations: ["UNEXECUTABLE", "UNKNOWN"]}, "PublisherQueryLanguageSyntaxError.Reason": {type: "string", enumerations: ["UNPARSABLE", "UNKNOWN"]}, "QuotaError.Reason": {type: "string", enumerations: ["EXCEEDED_QUOTA", "UNKNOWN", "REPORT_JOB_LIMIT", "SEGMENT_POPULATION_LIMIT"]}, ReportableType: {type: "string", enumerations: ["UNKNOWN", "ON", "OFF", "CUSTOM_DIMENSION"]}, "RequiredCollectionError.Reason": {type: "string", enumerations: ["REQUIRED", "TOO_LARGE", "TOO_SMALL", "UNKNOWN"]}, "RequiredError.Reason": {type: "string", enumerations: ["REQUIRED"]}, "ServerError.Reason": {type: "string", enumerations: ["SERVER_ERROR", "SERVER_BUSY", "UNKNOWN"]}, "StatementError.Reason": {type: "string", enumerations: ["VARIABLE_NOT_BOUND_TO_VALUE", "UNKNOWN"]}, "StringFormatError.Reason": {type: "string", enumerations: ["UNKNOWN", "ILLEGAL_CHARS", "INVALID_FORMAT"]}, "StringLengthError.Reason": {type: "string", enumerations: ["TOO_LONG", "TOO_SHORT", "UNKNOWN"]}}
    CUSTOMTARGETINGSERVICE_NAMESPACES = []

    def self.get_method_signature(method_name)
      return CUSTOMTARGETINGSERVICE_METHODS[method_name.to_sym]
    end

    def self.get_type_signature(type_name)
      return CUSTOMTARGETINGSERVICE_TYPES[type_name.to_sym]
    end

    def self.get_namespace(index)
      return CUSTOMTARGETINGSERVICE_NAMESPACES[index]
    end
  end

  # Base class for exceptions.
  class ApplicationException < AdManagerApi::Errors::ApiException
    attr_reader :message  # string
  end

  # Exception class for holding a list of service errors.
  class ApiException < ApplicationException
    attr_reader :errors  # ApiError
    def initialize(exception_fault)
      @array_fields ||= []
      @array_fields << 'errors'
      super(exception_fault, CustomTargetingServiceRegistry)
    end
  end
end; end; end
