class Aws::RpcV2::Builder

def blob(value)

def blob(value)
  (String === value ? value : value.read).force_encoding(Encoding::BINARY)
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 BlobShape      then blob(value)
  else value
  end
end

def initialize(rules, _options = {})

def initialize(rules, _options = {})
  @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 serialize(params)

def serialize(params)
  # If the input shape is empty, do not set a body. This is
  # different than if the input shape is a structure with no members.
  return nil if @rules.shape.struct_class == EmptyStructure
  RpcV2.encode(format(@rules, params))
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