class Aws::RpcV2::Parser
Public Class Methods
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 11 def initialize(rules, query_compatible: false) @rules = rules @query_compatible = query_compatible end
@param [Seahorse::Model::ShapeRef] rules
Public Instance Methods
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 16 def parse(cbor, target = nil) return {} if cbor.empty? parse_ref(@rules, RpcV2.decode(cbor), target) end
Private Instance Methods
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 89 def flattened_list?(shape) shape.is_a?(ListShape) && shape.flattened end
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 93 def flattened_map?(shape) shape.is_a?(MapShape) && shape.flattened end
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 60 def list(ref, values, target = nil) target = [] if target.nil? values.each do |value| target << parse_ref(ref.shape.member, value) end target end
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 68 def map(ref, values, target = nil) target = {} if target.nil? values.each do |key, value| target[key] = parse_ref(ref.shape.value, value) unless value.nil? end target end
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 76 def parse_ref(ref, value, target = nil) if value.nil? nil else case ref.shape when StructureShape then structure(ref, value, target) when ListShape then list(ref, value, target) when MapShape then map(ref, value, target) else value end end end
Source
# File lib/aws-sdk-core/rpc_v2/parser.rb, line 24 def structure(ref, values, target = nil) shape = ref.shape target = ref.shape.struct_class.new if target.nil? values.each do |key, value| member_name, member_ref = shape.member_by_location_name(key) if member_ref target[member_name] = parse_ref(member_ref, value) elsif shape.union && key != '__type' target[:unknown] = { 'name' => key, 'value' => value } end end # In services that were previously Query/XML, members that were # "flattened" defaulted to empty lists. In JSON, these values are nil, # which is backwards incompatible. To preserve backwards compatibility, # we set a default value of [] for these members. if @query_compatible ref.shape.members.each do |member_name, member_target| next unless target[member_name].nil? if flattened_list?(member_target.shape) target[member_name] = [] elsif flattened_map?(member_target.shape) target[member_name] = {} end end end if shape.union # convert to subclass member_subclass = shape.member_subclass(target.member).new member_subclass[target.member] = target.value target = member_subclass end target end