class Aws::Json::Parser

Public Class Methods

new(rules) click to toggle source

@param [Seahorse::Model::ShapeRef] rules

# File lib/aws-sdk-core/json/parser.rb, line 11
def initialize(rules)
  @rules = rules
end

Public Instance Methods

parse(json, target = nil) click to toggle source

@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

Private Instance Methods

list(ref, values, target = nil) click to toggle source
# 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
map(ref, values, target = nil) click to toggle source
# 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
parse_ref(ref, value, target = nil) click to toggle source
# 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
structure(ref, values, target = nil) click to toggle source
# 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
time(value) click to toggle source

@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