class Aws::Stubbing::Protocols::Rest

def encode_modeled_event(opts, rules, event_type, event_data, builder)

def encode_modeled_event(opts, rules, event_type, event_data, builder)
  event_ref = rules.shape.member(event_type)
  explicit_payload = false
  implicit_payload_members = {}
  event_ref.shape.members.each do |name, ref|
    if ref.eventpayload
      explicit_payload = true
    else
      implicit_payload_members[name] = ref
    end
  end
  if !explicit_payload && !implicit_payload_members.empty?
    unless implicit_payload_members.size > 1
      m_name, _ = implicit_payload_members.first
      value = {}
      value[m_name] = event_data[m_name]
      opts[:payload] = StringIO.new(builder.new(event_ref).serialize(value))
    end
  end
  event_data.each do |k, v|
    member_ref = event_ref.shape.member(k)
    if member_ref.eventheader
      opts[:headers][member_ref.location_name] = Aws::EventStream::HeaderValue.new(
        value: v,
        type: member_ref.eventheader_type
      )
    elsif member_ref.eventpayload
      case member_ref.eventpayload_type
      when 'string'
        opts[:payload] = StringIO.new(v)
      when 'blob'
        opts[:payload] = v
      when 'structure'
        opts[:payload] = StringIO.new(builder.new(member_ref).serialize(v))
      end
    end
  end
  opts[:headers][':event-type'] = Aws::EventStream::HeaderValue.new(
    value: event_ref.location_name,
    type: 'string'
  )
  opts[:headers][':message-type'] = Aws::EventStream::HeaderValue.new(
    value: 'event',
    type: 'string'
  )
  opts
end