class Protobuf::Message

def encode

def encode
  stream = ""
  each_field_for_serialization do |field, value|
    if field.repeated?
      if field.packed?
        key = (field.tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED
        packed_value = value.map { |val| field.encode(val) }.join
        stream << ::Protobuf::Field::VarintField.encode(key)
        stream << ::Protobuf::Field::VarintField.encode(packed_value.size)
        stream << packed_value
      else
        value.each { |val| write_pair(stream, field, val) }
      end
    else
      write_pair(stream, field, value)
    end
  end
  return stream
end