class Aws::Plugins::DynamoDBSimpleAttributes::ValueTranslator

@api private

def self.apply(rules, mode, data)

def self.apply(rules, mode, data)
  new(rules, mode).apply(data)
end

def apply(values)

def apply(values)
  structure(@rules, values) if @rules
end

def initialize(rules, mode)

def initialize(rules, mode)
  @rules = rules
  @mode = mode
end

def list(ref, values)

def list(ref, values)
  return values unless values.is_a?(Array)
  member_ref = ref.shape.member
  values.inject([]) do |list, value|
    list << translate(member_ref, value)
  end
end

def map(ref, values)

def map(ref, values)
  return values unless values.is_a?(Hash)
  value_ref = ref.shape.value
  values.each.with_object({}) do |(key, value), hash|
    hash[key] = translate(value_ref, value)
  end
end

def structure(ref, values)

def structure(ref, values)
  shape = ref.shape
  if values.is_a?(Struct)
    values.members.each.with_object(values.class.new) do |key, st|
      st[key] = translate(shape.member(key), values[key])
    end
  elsif values.is_a?(Hash)
    values.each.with_object({}) do |(key, value), hash|
      hash[key] = translate(shape.member(key), value)
    end
  else
    values
  end
end

def translate(ref, value)

def translate(ref, value)
  if ref.shape.name == 'AttributeValue'
    DynamoDB::AttributeValue.new.send(@mode, value)
  else
    translate_complex(ref, value)
  end
end

def translate_complex(ref, value)

def translate_complex(ref, value)
  case ref.shape
  when StructureShape then structure(ref, value)
  when ListShape then list(ref, value)
  when MapShape then map(ref, value)
  else value
  end
end