@@ -13,21 +13,22 @@ def initialize(options = {})
1313 def deserialize ( shape , bytes , target )
1414 return { } if bytes . empty?
1515
16- shape ( shape , ::JSON . parse ( bytes ) , target )
16+ ref = shape . is_a? ( ShapeRef ) ? shape : ShapeRef . new ( shape : shape )
17+ shape ( ref , ::JSON . parse ( bytes ) , target )
1718 end
1819
1920 private
2021
21- def shape ( shape , value , target = nil ) # rubocop:disable Metrics/CyclomaticComplexity
22- case shape
22+ def shape ( ref , value , target = nil ) # rubocop:disable Metrics/CyclomaticComplexity
23+ case ref . shape
2324 when BlobShape then Base64 . decode64 ( value )
2425 when BooleanShape then value . to_s == 'true'
2526 when FloatShape then float ( value )
26- when ListShape then list ( shape , value , target )
27- when MapShape then map ( shape , value , target )
28- when StructureShape then structure ( shape , value , target )
27+ when ListShape then list ( ref , value , target )
28+ when MapShape then map ( ref , value , target )
29+ when StructureShape then structure ( ref , value , target )
2930 when TimestampShape then timestamp ( value )
30- when UnionShape then union ( shape , value , target )
31+ when UnionShape then union ( ref , value , target )
3132 else value
3233 end
3334 end
@@ -42,35 +43,35 @@ def float(value)
4243 end
4344 end
4445
45- def list ( shape , values , target = nil )
46+ def list ( ref , values , target = nil )
4647 target = [ ] if target . nil?
4748 values . each do |value |
48- next if value . nil? && !sparse? ( shape )
49+ next if value . nil? && !sparse? ( ref . shape )
4950
50- target << ( value . nil? ? nil : shape ( shape . member . shape , value ) )
51+ target << ( value . nil? ? nil : shape ( ref . shape . member , value ) )
5152 end
5253 target
5354 end
5455
55- def map ( shape , values , target = nil )
56+ def map ( ref , values , target = nil )
5657 target = { } if target . nil?
5758 values . each do |key , value |
58- next if value . nil? && !sparse? ( shape )
59+ next if value . nil? && !sparse? ( ref . shape )
5960
60- target [ key ] = value . nil? ? nil : shape ( shape . value . shape , value )
61+ target [ key ] = value . nil? ? nil : shape ( ref . shape . value , value )
6162 end
6263 target
6364 end
6465
65- def structure ( shape , values , target = nil )
66- return Smithy ::Schema ::EmptyStructure . new if shape == Prelude ::Unit
66+ def structure ( ref , values , target = nil ) # rubocop:disable Metrics/AbcSize
67+ return Smithy ::Schema ::EmptyStructure . new if ref . shape == Prelude ::Unit
6768
68- target = shape . type . new if target . nil?
69- shape . members . each do |member_name , member_shape |
70- key = member_shape . traits [ 'smithy.api#jsonName' ] || member_shape . name
69+ target = ref . shape . type . new if target . nil?
70+ ref . shape . members . each do |member_name , member_ref |
71+ key = member_ref . traits [ 'smithy.api#jsonName' ] || member_ref . location_name
7172 next unless values . key? ( key )
7273
73- target [ member_name ] = shape ( member_shape . shape , values [ key ] )
74+ target [ member_name ] = shape ( member_ref , values [ key ] )
7475 end
7576 target
7677 end
@@ -90,29 +91,29 @@ def timestamp(value)
9091 end
9192 end
9293
93- def union ( shape , values , target = nil ) # rubocop:disable Metrics/AbcSize
94- sanitize_union! ( shape , values )
94+ def union ( ref , values , target = nil ) # rubocop:disable Metrics/AbcSize
95+ sanitize_union! ( ref , values )
9596
9697 key , value = values . first
9798 return nil if key . nil?
9899
99- shape . members . each do |member_name , member_shape |
100- name = member_shape . traits [ 'smithy.api#jsonName' ] || member_shape . name
100+ ref . shape . members . each do |member_name , member_ref |
101+ name = member_ref . traits [ 'smithy.api#jsonName' ] || member_ref . location_name
101102 next unless values . key? ( name )
102103
103- target = shape . member_type ( member_name ) if target . nil?
104- return target . new ( shape ( member_shape . shape , values [ name ] ) )
104+ target = ref . shape . member_type ( member_name ) if target . nil?
105+ return target . new ( shape ( member_ref , values [ name ] ) )
105106 end
106- shape . member_type ( :unknown ) . new ( key , value )
107+ ref . shape . member_type ( :unknown ) . new ( key , value )
107108 end
108109
109- def sanitize_union! ( shape , values ) # rubocop:disable Metrics/CyclomaticComplexity
110+ def sanitize_union! ( ref , values ) # rubocop:disable Metrics/CyclomaticComplexity
110111 return unless values . size > 1
111112
112113 # __type should be ignored unless it's a jsonName for a member
113114 type_as_name = false
114- shape . members . each_value do |member_shape |
115- name = member_shape . traits [ 'smithy.api#jsonName' ] || member_shape . name
115+ ref . shape . members . each_value do |member_ref |
116+ name = member_ref . traits [ 'smithy.api#jsonName' ] || member_ref . location_name
116117 type_as_name = true if name == '__type'
117118 end
118119
0 commit comments