class Aws::ParamValidator

def structure(ref, values, errors, context)

def structure(ref, values, errors, context)
  # ensure the value is hash like
  return unless correct_type?(ref, values, errors, context)
  if ref.eventstream
    # input eventstream is provided from event signals
    values.each do |value|
      # each event is structure type
      case value[:message_type]
      when 'event'
        val = value.dup
        val.delete(:message_type)
        structure(ref.shape.member(val[:event_type]), val, errors, context)
      when 'error' # Error is unmodeled
      when 'exception' # Pending
        raise Aws::Errors::EventStreamParserError.new(
          ':exception event validation is not supported')
      end
    end
  else
    shape = ref.shape
    # ensure required members are present
    if @validate_required
      shape.required.each do |member_name|
        input_eventstream = ref.shape.member(member_name).eventstream && @input
        if values[member_name].nil? && !input_eventstream
          param = "#{context}[#{member_name.inspect}]"
          errors << "missing required parameter #{param}"
        end
      end
    end
    if @validate_required && shape.union
      if values.length > 1
        errors << "multiple values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
      elsif values.length == 0
        errors << "No values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
      end
    end
    # validate non-nil members
    values.each_pair do |name, value|
      unless value.nil?
        # :event_type is not modeled
        # and also needed when construct body
        next if name == :event_type
        if shape.member?(name)
          member_ref = shape.member(name)
          shape(member_ref, value, errors, context + "[#{name.inspect}]")
        else
          errors << "unexpected value at #{context}[#{name.inspect}]"
        end
      end
    end
  end
end