Class: Protobuf::Encoder

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream = nil, message = nil) ⇒ Encoder

Returns a new instance of Encoder.



11
12
13
# File 'lib/protobuf/message/encoder.rb', line 11

def initialize(stream=nil, message=nil)
  @stream, @message = stream, message
end

Class Method Details

.encode(stream, message) ⇒ Object



6
7
8
# File 'lib/protobuf/message/encoder.rb', line 6

def encode(stream, message)
  self.new(stream, message).encode
end

Instance Method Details

#encode(stream = @stream, message = @message) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/protobuf/message/encoder.rb', line 15

def encode(stream=@stream, message=@message)
  message.each_field do |field, value|
    next unless message.has_field?(field.name)

    if field.repeated?
      value.each do |val|
        write_pair field, val, stream
      end
    else
      write_pair field, value, stream
    end
  end
end

#write_pair(field, value, stream) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/protobuf/message/encoder.rb', line 29

def write_pair(field, value, stream)
  key = (field.tag << 3) | field.wire_type
  key_bytes = Protobuf::Field::VarintField.get_bytes key
  stream.write key_bytes
  bytes = field.get value
  stream.write bytes
end