class Aws::Json::Builder

def encode(blob)

def encode(blob)
  Base64.strict_encode64(String === blob ? blob : blob.read)
end

def format(ref, value)

def format(ref, value)
  case ref.shape
  when StructureShape then structure(ref, value)
  when ListShape      then list(ref, value)
  when MapShape       then map(ref, value)
  when TimestampShape then value.to_i
  when BlobShape      then encode(value)
  else value
  end
end

def initialize(rules)

def initialize(rules)
  @rules = rules
end

def list(ref, values)

def list(ref, values)
  member_ref = ref.shape.member
  values.collect { |value| format(member_ref, value) }
end

def map(ref, values)

def map(ref, values)
  value_ref = ref.shape.value
  values.each.with_object({}) do |(key, value), data|
    data[key] = format(value_ref, value)
  end
end

def structure(ref, values)

def structure(ref, values)
  shape = ref.shape
  values.each_pair.with_object({}) do |(key, value), data|
    if shape.member?(key) && !value.nil?
      member_ref = shape.member(key)
      member_name = member_ref.location_name || key
      data[member_name] = format(member_ref, value)
    end
  end
end

def to_json(params)

def to_json(params)
  Json.dump(format(@rules, params))
end