# File lib/aws/core/option_grammar.rb, line 336
          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