Class: Protobuf::Encoder

Inherits:
Object
  • Object
show all
Defined in:
lib/protobuf/encoder.rb

Class Method Summary collapse

Class Method Details

.encode(message, stream) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/protobuf/encoder.rb', line 3

def self.encode(message, stream)
  message.each_field_for_serialization do |field, value|
    if field.repeated?
      if field.packed?
        packed_value = value.map { |val| field.encode(val) }.join
        stream << "#{field.tag_encoded}#{::Protobuf::Field::VarintField.encode(packed_value.size)}#{packed_value}"
      else
        value.each do |val|
          stream << "#{field.tag_encoded}#{field.encode(val)}"
        end
      end
    else
      stream << "#{field.tag_encoded}#{field.encode(value)}"
    end
  end

  stream
end