Module: KRPC::ProtobufUtils::Encoder
- Defined in:
- lib/krpc/protobuf_utils.rb
Class Method Summary collapse
- .encode(value, type) ⇒ Object
- .encode_bool(value) ⇒ Object
- .encode_bytes(value) ⇒ Object
- .encode_double(value) ⇒ Object
- .encode_float(value) ⇒ Object
- .encode_nonnegative_varint(value) ⇒ Object (also: encode_uint32, encode_uint64)
- .encode_signed_varint(value) ⇒ Object (also: encode_int32, encode_int64)
- .encode_string(value) ⇒ Object
- .encode_varint(value) ⇒ Object
Class Method Details
.encode(value, type) ⇒ Object
74 75 76 77 78 |
# File 'lib/krpc/protobuf_utils.rb', line 74 def encode(value, type) meth_name = "encode_" + type raise(RuntimeError, "Unsupported type #{type}") unless respond_to?(meth_name) send(meth_name, value) end |
.encode_bool(value) ⇒ Object
114 115 116 |
# File 'lib/krpc/protobuf_utils.rb', line 114 def encode_bool(value) encode_varint(value ? 1 : 0) end |
.encode_bytes(value) ⇒ Object
121 122 123 124 |
# File 'lib/krpc/protobuf_utils.rb', line 121 def encode_bytes(value) size = encode_varint(value.size) size + value.map(&:chr).join.b end |
.encode_double(value) ⇒ Object
111 112 113 |
# File 'lib/krpc/protobuf_utils.rb', line 111 def encode_double(value) [value].pack('E') end |
.encode_float(value) ⇒ Object
108 109 110 |
# File 'lib/krpc/protobuf_utils.rb', line 108 def encode_float(value) [value].pack('e') end |
.encode_nonnegative_varint(value) ⇒ Object Also known as: encode_uint32, encode_uint64
98 99 100 101 |
# File 'lib/krpc/protobuf_utils.rb', line 98 def encode_nonnegative_varint(value) raise(RangeError, "Value must be non-negative, got #{value}") if value < 0 encode_varint(value) end |
.encode_signed_varint(value) ⇒ Object Also known as: encode_int32, encode_int64
94 95 96 97 |
# File 'lib/krpc/protobuf_utils.rb', line 94 def encode_signed_varint(value) value += (1 << 64) if value < 0 encode_varint(value) end |
.encode_string(value) ⇒ Object
117 118 119 120 |
# File 'lib/krpc/protobuf_utils.rb', line 117 def encode_string(value) size = encode_varint(value.bytesize) size + value.bytes.map(&:chr).join.b end |
.encode_varint(value) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/krpc/protobuf_utils.rb', line 81 def encode_varint(value) return [value].pack('C') if value < 0b1000_0000 result = "" loop do byte = value & 0b0111_1111 value >>= 7 if value == 0 return result << byte.chr else result << (byte | 0b1000_0000).chr end end end |