module KRPC::ProtobufUtils::Encoder
Public Class Methods
encode(value, type)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 67 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)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 111 def encode_bool(value) encode_varint(value ? 1 : 0) end
encode_bytes(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 119 def encode_bytes(value) size = encode_varint(value.size) size + value.map(&:chr).join.b end
encode_double(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 108 def encode_double(value) [value].pack('E') end
encode_float(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 105 def encode_float(value) [value].pack('e') end
encode_nonnegative_varint(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 87 def encode_nonnegative_varint(value) raise(RangeError, "Value must be non-negative, got #{value}") if value < 0 encode_varint(value) end
Also aliased as: encode_uint32, encode_uint64
encode_string(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 114 def encode_string(value) data = value.encode(Encoding::UTF_8).b size = encode_varint(data.bytesize) size + data end
encode_varint(value)
click to toggle source
based on: www.rubydoc.info/gems/ruby-protocol-buffers/1.0.1/ProtocolBuffers/Varint#decode-class_method & github.com/google/protobuf/blob/master/python/google/protobuf/internal/encoder.py#L390
# File lib/krpc/protobuf_utils.rb, line 74 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
encode_zigzaged_varint_32(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 91 def encode_zigzaged_varint_32(value) zigzaged = (value << 1) ^ (value >> 31) encode_varint(zigzaged) end
Also aliased as: encode_sint32
encode_zigzaged_varint_64(value)
click to toggle source
# File lib/krpc/protobuf_utils.rb, line 95 def encode_zigzaged_varint_64(value) zigzaged = (value << 1) ^ (value >> 63) encode_varint(zigzaged) end
Also aliased as: encode_sint64