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.



13
14
15
# File 'lib/protobuf/message/encoder.rb', line 13

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

Class Method Details

.encode(stream, message) ⇒ Object



8
9
10
# File 'lib/protobuf/message/encoder.rb', line 8

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

Instance Method Details

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



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

def encode(stream=@stream, message=@message)
  raise NotInitializedError unless message.initialized?
  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



32
33
34
35
36
37
38
# File 'lib/protobuf/message/encoder.rb', line 32

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