module AWS::Core::OptionGrammar::Descriptors::Structure

def validate(value, context = nil)

def validate(value, context = nil)
  raise format_error("hash value", context) unless
    value.respond_to?(:to_hash)
  context = context_description(context)
  value.each do |name, v|
    name = name.to_s
    raise ArgumentError.new("unexpected key #{name} for #{context}") unless
      member_option(name)
    member_option(name).validate(v, "key #{name} of #{context}")
  end
  member_options.each do |option|
    raise ArgumentError.new("missing required key #{option.ruby_name} for #{context}") if
      option.required? and
      !value.has_key?(option.ruby_name) and
      !value.has_key?(option.ruby_name.to_sym) and
      !value.has_key?(option.name)
  end
end