# File lib/aws/option_grammar.rb, line 293
        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)
          end
        end