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_sint32(value)
encode_sint64(value)
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_uint32(value)
encode_uint64(value)
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