class Protobuf::Decoder
Public Class Methods
decode_each_field(stream) { |tag, bytes| ... }
click to toggle source
Read bytes from stream
and pass to message
object.
# File lib/protobuf/decoder.rb, line 5 def self.decode_each_field(stream) until stream.eof? bits = Varint.decode(stream) wire_type = bits & 0x07 tag = bits >> 3 bytes = if wire_type == ::Protobuf::WireType::VARINT Varint.decode(stream) elsif wire_type == ::Protobuf::WireType::LENGTH_DELIMITED value_length = Varint.decode(stream) stream.read(value_length) elsif wire_type == ::Protobuf::WireType::FIXED64 stream.read(8) elsif wire_type == ::Protobuf::WireType::FIXED32 stream.read(4) else fail InvalidWireType, wire_type end yield(tag, bytes) end end