@param [Seahorse::Model::ShapeRef] rules
# File lib/aws-sdk-core/json/parser.rb, line 11 def initialize(rules) @rules = rules end
@param [String<JSON>] json
# File lib/aws-sdk-core/json/parser.rb, line 16 def parse(json, target = nil) parse_ref(@rules, Json.load(json), target) end
# File lib/aws-sdk-core/json/parser.rb, line 34 def list(ref, values, target = nil) target = [] if target.nil? values.each do |value| target << parse_ref(ref.shape.member, value) end target end
# File lib/aws-sdk-core/json/parser.rb, line 42 def map(ref, values, target = nil) target = {} if target.nil? values.each do |key, value| target[key] = parse_ref(ref.shape.value, value) end target end
# File lib/aws-sdk-core/json/parser.rb, line 50 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) when TimestampShape then time(value) when BlobShape then Base64.decode64(value) when BooleanShape then value.to_s == 'true' else value end end end
# File lib/aws-sdk-core/json/parser.rb, line 22 def structure(ref, values, target = nil) shape = ref.shape target = ref[: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) end end target end
@param [String, Integer] value @return [Time]
# File lib/aws-sdk-core/json/parser.rb, line 68 def time(value) value.is_a?(Numeric) ? Time.at(value) : Time.parse(value) end