Module: Protobuf::Decoder
- Defined in:
- lib/protobuf/message/decoder.rb
Class Method Summary collapse
-
.decode(stream, message) ⇒ Object
Read bytes from +stream+ and pass to +message+ object.
-
.read_end_group(stream) ⇒ Object
Not implemented.
-
.read_fixed32(stream) ⇒ Object
Read 32-bit string value from +stream+.
-
.read_fixed64(stream) ⇒ Object
Read 64-bit string value from +stream+.
-
.read_key(stream) ⇒ Object
Read key pair (tag and wire-type) from +stream+.
-
.read_length_delimited(stream) ⇒ Object
Read length-delimited string value from +stream+.
-
.read_start_group(stream) ⇒ Object
Not implemented.
-
.read_varint(stream) ⇒ Object
Read varint integer value from +stream+.
Class Method Details
.decode(stream, message) ⇒ Object
Read bytes from +stream+ and pass to +message+ object.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/protobuf/message/decoder.rb', line 11 def decode(stream, ) until stream.eof? tag, wire_type = read_key(stream) bytes = case wire_type when WireType::VARINT then read_varint(stream) when WireType::FIXED64 then read_fixed64(stream) when WireType::LENGTH_DELIMITED then read_length_delimited(stream) when WireType::START_GROUP then read_start_group(stream) when WireType::END_GROUP then read_end_group(stream) when WireType::FIXED32 then read_fixed32(stream) else raise InvalidWireType, wire_type end .set_field(tag, bytes) end end |
.read_end_group(stream) ⇒ Object
Not implemented.
78 79 80 |
# File 'lib/protobuf/message/decoder.rb', line 78 def read_end_group(stream) raise NotImplementedError, 'Group is deprecated.' end |
.read_fixed32(stream) ⇒ Object
Read 32-bit string value from +stream+.
57 58 59 |
# File 'lib/protobuf/message/decoder.rb', line 57 def read_fixed32(stream) stream.read(4) end |
.read_fixed64(stream) ⇒ Object
Read 64-bit string value from +stream+.
62 63 64 |
# File 'lib/protobuf/message/decoder.rb', line 62 def read_fixed64(stream) stream.read(8) end |
.read_key(stream) ⇒ Object
Read key pair (tag and wire-type) from +stream+.
37 38 39 40 41 42 |
# File 'lib/protobuf/message/decoder.rb', line 37 def read_key(stream) bits = read_varint(stream) wire_type = bits & 0x07 tag = bits >> 3 [tag, wire_type] end |
.read_length_delimited(stream) ⇒ Object
Read length-delimited string value from +stream+.
67 68 69 70 |
# File 'lib/protobuf/message/decoder.rb', line 67 def read_length_delimited(stream) value_length = read_varint(stream) stream.read(value_length) end |
.read_start_group(stream) ⇒ Object
Not implemented.
73 74 75 |
# File 'lib/protobuf/message/decoder.rb', line 73 def read_start_group(stream) raise NotImplementedError, 'Group is deprecated.' end |
.read_varint(stream) ⇒ Object
Read varint integer value from +stream+.
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/protobuf/message/decoder.rb', line 45 def read_varint(stream) read_method = stream.respond_to?(:readbyte) ? :readbyte : :readchar value = index = 0 begin byte = stream.__send__(read_method) value |= (byte & 0x7f) << (7 * index) index += 1 end while (byte & 0x80).nonzero? value end |