# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'date'
require 'google/apis/core/base_service'
require 'google/apis/core/json_representation'
require 'google/apis/core/hashable'
require 'google/apis/errors'

module Google
  module Apis
    module TrafficdirectorV2
      
      class Address
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class BuildVersion
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ClientConfig
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ClientStatusRequest
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ClientStatusResponse
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ClustersConfigDump
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DoubleMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DoubleRange
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DynamicCluster
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DynamicListener
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DynamicListenerState
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DynamicRouteConfig
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class DynamicScopedRouteConfigs
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class Extension
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class GoogleRe2
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class InlineScopedRouteConfigs
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ListMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ListenersConfigDump
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class Locality
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class Node
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class NodeMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class NullMatch
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class PathSegment
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class PerXdsConfig
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class Pipe
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class RegexMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class RoutesConfigDump
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ScopedRoutesConfigDump
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class SemanticVersion
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class SocketAddress
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class StaticCluster
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class StaticListener
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class StaticRouteConfig
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class StringMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class StructMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class UpdateFailureState
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class ValueMatcher
        class Representation < Google::Apis::Core::JsonRepresentation; end
      
        include Google::Apis::Core::JsonObjectSupport
      end
      
      class Address
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :pipe, as: 'pipe', class: Google::Apis::TrafficdirectorV2::Pipe, decorator: Google::Apis::TrafficdirectorV2::Pipe::Representation
      
          property :socket_address, as: 'socketAddress', class: Google::Apis::TrafficdirectorV2::SocketAddress, decorator: Google::Apis::TrafficdirectorV2::SocketAddress::Representation
      
        end
      end
      
      class BuildVersion
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          hash :metadata, as: 'metadata'
          property :version, as: 'version', class: Google::Apis::TrafficdirectorV2::SemanticVersion, decorator: Google::Apis::TrafficdirectorV2::SemanticVersion::Representation
      
        end
      end
      
      class ClientConfig
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :node, as: 'node', class: Google::Apis::TrafficdirectorV2::Node, decorator: Google::Apis::TrafficdirectorV2::Node::Representation
      
          collection :xds_config, as: 'xdsConfig', class: Google::Apis::TrafficdirectorV2::PerXdsConfig, decorator: Google::Apis::TrafficdirectorV2::PerXdsConfig::Representation
      
        end
      end
      
      class ClientStatusRequest
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :node_matchers, as: 'nodeMatchers', class: Google::Apis::TrafficdirectorV2::NodeMatcher, decorator: Google::Apis::TrafficdirectorV2::NodeMatcher::Representation
      
        end
      end
      
      class ClientStatusResponse
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :config, as: 'config', class: Google::Apis::TrafficdirectorV2::ClientConfig, decorator: Google::Apis::TrafficdirectorV2::ClientConfig::Representation
      
        end
      end
      
      class ClustersConfigDump
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :dynamic_active_clusters, as: 'dynamicActiveClusters', class: Google::Apis::TrafficdirectorV2::DynamicCluster, decorator: Google::Apis::TrafficdirectorV2::DynamicCluster::Representation
      
          collection :dynamic_warming_clusters, as: 'dynamicWarmingClusters', class: Google::Apis::TrafficdirectorV2::DynamicCluster, decorator: Google::Apis::TrafficdirectorV2::DynamicCluster::Representation
      
          collection :static_clusters, as: 'staticClusters', class: Google::Apis::TrafficdirectorV2::StaticCluster, decorator: Google::Apis::TrafficdirectorV2::StaticCluster::Representation
      
          property :version_info, as: 'versionInfo'
        end
      end
      
      class DoubleMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :exact, as: 'exact'
          property :range, as: 'range', class: Google::Apis::TrafficdirectorV2::DoubleRange, decorator: Google::Apis::TrafficdirectorV2::DoubleRange::Representation
      
        end
      end
      
      class DoubleRange
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :end, as: 'end'
          property :start, as: 'start'
        end
      end
      
      class DynamicCluster
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          hash :cluster, as: 'cluster'
          property :last_updated, as: 'lastUpdated'
          property :version_info, as: 'versionInfo'
        end
      end
      
      class DynamicListener
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :active_state, as: 'activeState', class: Google::Apis::TrafficdirectorV2::DynamicListenerState, decorator: Google::Apis::TrafficdirectorV2::DynamicListenerState::Representation
      
          property :draining_state, as: 'drainingState', class: Google::Apis::TrafficdirectorV2::DynamicListenerState, decorator: Google::Apis::TrafficdirectorV2::DynamicListenerState::Representation
      
          property :error_state, as: 'errorState', class: Google::Apis::TrafficdirectorV2::UpdateFailureState, decorator: Google::Apis::TrafficdirectorV2::UpdateFailureState::Representation
      
          property :name, as: 'name'
          property :warming_state, as: 'warmingState', class: Google::Apis::TrafficdirectorV2::DynamicListenerState, decorator: Google::Apis::TrafficdirectorV2::DynamicListenerState::Representation
      
        end
      end
      
      class DynamicListenerState
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          hash :listener, as: 'listener'
          property :version_info, as: 'versionInfo'
        end
      end
      
      class DynamicRouteConfig
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          hash :route_config, as: 'routeConfig'
          property :version_info, as: 'versionInfo'
        end
      end
      
      class DynamicScopedRouteConfigs
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          property :name, as: 'name'
          collection :scoped_route_configs, as: 'scopedRouteConfigs'
          property :version_info, as: 'versionInfo'
        end
      end
      
      class Extension
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :category, as: 'category'
          property :disabled, as: 'disabled'
          property :name, as: 'name'
          property :type_descriptor, as: 'typeDescriptor'
          property :version, as: 'version', class: Google::Apis::TrafficdirectorV2::BuildVersion, decorator: Google::Apis::TrafficdirectorV2::BuildVersion::Representation
      
        end
      end
      
      class GoogleRe2
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :max_program_size, as: 'maxProgramSize'
        end
      end
      
      class InlineScopedRouteConfigs
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          property :name, as: 'name'
          collection :scoped_route_configs, as: 'scopedRouteConfigs'
        end
      end
      
      class ListMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :one_of, as: 'oneOf', class: Google::Apis::TrafficdirectorV2::ValueMatcher, decorator: Google::Apis::TrafficdirectorV2::ValueMatcher::Representation
      
        end
      end
      
      class ListenersConfigDump
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :dynamic_listeners, as: 'dynamicListeners', class: Google::Apis::TrafficdirectorV2::DynamicListener, decorator: Google::Apis::TrafficdirectorV2::DynamicListener::Representation
      
          collection :static_listeners, as: 'staticListeners', class: Google::Apis::TrafficdirectorV2::StaticListener, decorator: Google::Apis::TrafficdirectorV2::StaticListener::Representation
      
          property :version_info, as: 'versionInfo'
        end
      end
      
      class Locality
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :region, as: 'region'
          property :sub_zone, as: 'subZone'
          property :zone, as: 'zone'
        end
      end
      
      class Node
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :build_version, as: 'buildVersion'
          collection :client_features, as: 'clientFeatures'
          property :cluster, as: 'cluster'
          collection :extensions, as: 'extensions', class: Google::Apis::TrafficdirectorV2::Extension, decorator: Google::Apis::TrafficdirectorV2::Extension::Representation
      
          property :id, as: 'id'
          collection :listening_addresses, as: 'listeningAddresses', class: Google::Apis::TrafficdirectorV2::Address, decorator: Google::Apis::TrafficdirectorV2::Address::Representation
      
          property :locality, as: 'locality', class: Google::Apis::TrafficdirectorV2::Locality, decorator: Google::Apis::TrafficdirectorV2::Locality::Representation
      
          hash :metadata, as: 'metadata'
          property :user_agent_build_version, as: 'userAgentBuildVersion', class: Google::Apis::TrafficdirectorV2::BuildVersion, decorator: Google::Apis::TrafficdirectorV2::BuildVersion::Representation
      
          property :user_agent_name, as: 'userAgentName'
          property :user_agent_version, as: 'userAgentVersion'
        end
      end
      
      class NodeMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :node_id, as: 'nodeId', class: Google::Apis::TrafficdirectorV2::StringMatcher, decorator: Google::Apis::TrafficdirectorV2::StringMatcher::Representation
      
          collection :node_metadatas, as: 'nodeMetadatas', class: Google::Apis::TrafficdirectorV2::StructMatcher, decorator: Google::Apis::TrafficdirectorV2::StructMatcher::Representation
      
        end
      end
      
      class NullMatch
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
        end
      end
      
      class PathSegment
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :key, as: 'key'
        end
      end
      
      class PerXdsConfig
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :cluster_config, as: 'clusterConfig', class: Google::Apis::TrafficdirectorV2::ClustersConfigDump, decorator: Google::Apis::TrafficdirectorV2::ClustersConfigDump::Representation
      
          property :listener_config, as: 'listenerConfig', class: Google::Apis::TrafficdirectorV2::ListenersConfigDump, decorator: Google::Apis::TrafficdirectorV2::ListenersConfigDump::Representation
      
          property :route_config, as: 'routeConfig', class: Google::Apis::TrafficdirectorV2::RoutesConfigDump, decorator: Google::Apis::TrafficdirectorV2::RoutesConfigDump::Representation
      
          property :scoped_route_config, as: 'scopedRouteConfig', class: Google::Apis::TrafficdirectorV2::ScopedRoutesConfigDump, decorator: Google::Apis::TrafficdirectorV2::ScopedRoutesConfigDump::Representation
      
          property :status, as: 'status'
        end
      end
      
      class Pipe
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :mode, as: 'mode'
          property :path, as: 'path'
        end
      end
      
      class RegexMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :google_re2, as: 'googleRe2', class: Google::Apis::TrafficdirectorV2::GoogleRe2, decorator: Google::Apis::TrafficdirectorV2::GoogleRe2::Representation
      
          property :regex, as: 'regex'
        end
      end
      
      class RoutesConfigDump
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :dynamic_route_configs, as: 'dynamicRouteConfigs', class: Google::Apis::TrafficdirectorV2::DynamicRouteConfig, decorator: Google::Apis::TrafficdirectorV2::DynamicRouteConfig::Representation
      
          collection :static_route_configs, as: 'staticRouteConfigs', class: Google::Apis::TrafficdirectorV2::StaticRouteConfig, decorator: Google::Apis::TrafficdirectorV2::StaticRouteConfig::Representation
      
        end
      end
      
      class ScopedRoutesConfigDump
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :dynamic_scoped_route_configs, as: 'dynamicScopedRouteConfigs', class: Google::Apis::TrafficdirectorV2::DynamicScopedRouteConfigs, decorator: Google::Apis::TrafficdirectorV2::DynamicScopedRouteConfigs::Representation
      
          collection :inline_scoped_route_configs, as: 'inlineScopedRouteConfigs', class: Google::Apis::TrafficdirectorV2::InlineScopedRouteConfigs, decorator: Google::Apis::TrafficdirectorV2::InlineScopedRouteConfigs::Representation
      
        end
      end
      
      class SemanticVersion
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :major_number, as: 'majorNumber'
          property :minor_number, as: 'minorNumber'
          property :patch, as: 'patch'
        end
      end
      
      class SocketAddress
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :address, as: 'address'
          property :ipv4_compat, as: 'ipv4Compat'
          property :named_port, as: 'namedPort'
          property :port_value, as: 'portValue'
          property :protocol, as: 'protocol'
          property :resolver_name, as: 'resolverName'
        end
      end
      
      class StaticCluster
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          hash :cluster, as: 'cluster'
          property :last_updated, as: 'lastUpdated'
        end
      end
      
      class StaticListener
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          hash :listener, as: 'listener'
        end
      end
      
      class StaticRouteConfig
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :last_updated, as: 'lastUpdated'
          hash :route_config, as: 'routeConfig'
        end
      end
      
      class StringMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :exact, as: 'exact'
          property :ignore_case, as: 'ignoreCase'
          property :prefix, as: 'prefix'
          property :regex, as: 'regex'
          property :safe_regex, as: 'safeRegex', class: Google::Apis::TrafficdirectorV2::RegexMatcher, decorator: Google::Apis::TrafficdirectorV2::RegexMatcher::Representation
      
          property :suffix, as: 'suffix'
        end
      end
      
      class StructMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          collection :path, as: 'path', class: Google::Apis::TrafficdirectorV2::PathSegment, decorator: Google::Apis::TrafficdirectorV2::PathSegment::Representation
      
          property :value, as: 'value', class: Google::Apis::TrafficdirectorV2::ValueMatcher, decorator: Google::Apis::TrafficdirectorV2::ValueMatcher::Representation
      
        end
      end
      
      class UpdateFailureState
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :details, as: 'details'
          hash :failed_configuration, as: 'failedConfiguration'
          property :last_update_attempt, as: 'lastUpdateAttempt'
        end
      end
      
      class ValueMatcher
        # @private
        class Representation < Google::Apis::Core::JsonRepresentation
          property :bool_match, as: 'boolMatch'
          property :double_match, as: 'doubleMatch', class: Google::Apis::TrafficdirectorV2::DoubleMatcher, decorator: Google::Apis::TrafficdirectorV2::DoubleMatcher::Representation
      
          property :list_match, as: 'listMatch', class: Google::Apis::TrafficdirectorV2::ListMatcher, decorator: Google::Apis::TrafficdirectorV2::ListMatcher::Representation
      
          property :null_match, as: 'nullMatch', class: Google::Apis::TrafficdirectorV2::NullMatch, decorator: Google::Apis::TrafficdirectorV2::NullMatch::Representation
      
          property :present_match, as: 'presentMatch'
          property :string_match, as: 'stringMatch', class: Google::Apis::TrafficdirectorV2::StringMatcher, decorator: Google::Apis::TrafficdirectorV2::StringMatcher::Representation
      
        end
      end
    end
  end
end
