diff --git a/fahk.rb b/fahk.rb new file mode 100644 index 0000000..554360e --- /dev/null +++ b/fahk.rb @@ -0,0 +1,31999 @@ +# encoding: ascii-8bit +# rubocop:disable all +# frozen_string_literal: true + +require "protoboeuf/google/protobuf/uint64value" +require "protoboeuf/google/protobuf/stringvalue" +require "protoboeuf/google/protobuf/doublevalue" +require "protoboeuf/google/protobuf/boolvalue" +require "protoboeuf/google/protobuf/int32value" +require "protoboeuf/google/protobuf/int64value" +require "protoboeuf/google/protobuf/uint32value" +require "protoboeuf/google/protobuf/floatvalue" +require "protoboeuf/google/protobuf/bytesvalue" +require "protoboeuf/google/protobuf/timestamp" + +module VehicleType + BIKE = 0 + SKATEBOARD = 1 + CAR = 2 + BIG_AMERICAN_SUV = 3 + PICKUP_TRUCK = 4 + + def self.lookup(val) + return :BIKE if val == 0 + return :SKATEBOARD if val == 1 + return :CAR if val == 2 + return :BIG_AMERICAN_SUV if val == 3 + return :PICKUP_TRUCK if val == 4 + end + + def self.resolve(val) + return 0 if val == :BIKE + return 1 if val == :SKATEBOARD + return 2 if val == :CAR + return 3 if val == :BIG_AMERICAN_SUV + return 4 if val == :PICKUP_TRUCK + end +end +module TestReservedEnum + CONST_ZERO = 0 + CONST_ONE = 1 + + def self.lookup(val) + return :CONST_ZERO if val == 0 + return :CONST_ONE if val == 1 + end + + def self.resolve(val) + return 0 if val == :CONST_ZERO + return 1 if val == :CONST_ONE + end +end +module EnumAllTheInts + FOO = 0 + BAR = -1 + BIF = 16_711_680 + BIF2 = -16_711_680 + + def self.lookup(val) + return :FOO if val == 0 + return :BAR if val == -1 + return :BIF if val == 16_711_680 + return :BIF2 if val == -16_711_680 + end + + def self.resolve(val) + return 0 if val == :FOO + return -1 if val == :BAR + return 16_711_680 if val == :BIF + return -16_711_680 if val == :BIF2 + end +end +module SimpleEnum + ZERO = 0 + ONE = 1 + TWO = 2 + + def self.lookup(val) + return :ZERO if val == 0 + return :ONE if val == 1 + return :TWO if val == 2 + end + + def self.resolve(val) + return 0 if val == :ZERO + return 1 if val == :ONE + return 2 if val == :TWO + end +end + +class Test1 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + # optional field readers + + attr_reader :a + + # BEGIN writers for optional fields + + def a=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field a is out of bounds (-2147483648..2147483647)" + end + + @_bitmask |= 0x0000000000000001 + @a = v + end + # END writers for optional fields + + def initialize(a: nil) + @_bitmask = 0 + + if a == nil + @a = 0 + else + unless -2_147_483_648 <= a && a <= 2_147_483_647 + raise RangeError, + "Value (#{a}) for field a is out of bounds (-2147483648..2147483647)" + end + @_bitmask |= 0x0000000000000001 + @a = a + end + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_a? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_INT32 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT32 + + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a if !options[:compact] || has_a? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class EmptyMessage + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + def initialize() + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + return self if index >= len + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + return self if index >= len + end + end + def _encode(buff) + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result + end + + def as_json(options = {}) + result = {} + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSigned + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + # optional field readers + + attr_reader :a + + # BEGIN writers for optional fields + + def a=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field a is out of bounds (-2147483648..2147483647)" + end + + @_bitmask |= 0x0000000000000001 + @a = v + end + # END writers for optional fields + + def initialize(a: nil) + @_bitmask = 0 + + if a == nil + @a = 0 + else + unless -2_147_483_648 <= a && a <= 2_147_483_647 + raise RangeError, + "Value (#{a}) for field a is out of bounds (-2147483648..2147483647)" + end + @_bitmask |= 0x0000000000000001 + @a = a + end + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_a? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @a = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a if !options[:compact] || has_a? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestString + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + # optional field readers + + attr_reader :a + + # BEGIN writers for optional fields + + def a=(v) + @_bitmask |= 0x0000000000000001 + @a = v + end + # END writers for optional fields + + def initialize(a: nil) + @_bitmask = 0 + + if a == nil + @a = "" + else + @_bitmask |= 0x0000000000000001 + @a = a + end + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_a? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @a = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a if !options[:compact] || has_a? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestBytes + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + # optional field readers + + attr_reader :a + + # BEGIN writers for optional fields + + def a=(v) + @_bitmask |= 0x0000000000000001 + @a = v + end + # END writers for optional fields + + def initialize(a: nil) + @_bitmask = 0 + + if a == nil + @a = "" + else + @_bitmask |= 0x0000000000000001 + @a = a + end + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_a? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @a = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a if !options[:compact] || has_a? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestMessage + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + attr_reader :shop_id + + attr_reader :boolean + + attr_reader :uuid + + def id=(v) + @id = v + end + + def shop_id=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field shop_id is out of bounds (0..18446744073709551615)" + end + + @shop_id = v + end + + def boolean=(v) + @boolean = v + end + + def uuid=(v) + @uuid = v + end + + def initialize(id: "", shop_id: 0, boolean: false, uuid: "") + @id = id + + unless 0 <= shop_id && shop_id <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{shop_id}) for field shop_id is out of bounds (0..18446744073709551615)" + end + @shop_id = shop_id + + @boolean = boolean + + @uuid = uuid + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = "" + @shop_id = 0 + @boolean = false + @uuid = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @id = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @shop_id = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL BOOLEAN + @boolean = (buff.getbyte(index) == 1) + index += 1 + ## END PULL BOOLEAN + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x22 + found = true + ## PULL_BYTES + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @uuid = buff.byteslice(index, value) + index += value + + ## END PULL_BYTES + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @shop_id + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @boolean + if val == true + buff << 0x18 + + buff << 1 + elsif val == false + # Default value, encode nothing + else + raise "bool values should be true or false" + end + + val = @uuid + if ((bs = val.bytesize) > 0) + buff << 0x22 + len = bs + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff.concat(val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id + result[:"shop_id"] = @shop_id + result[:"boolean"] = @boolean + result[:"uuid"] = @uuid + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id + result["shopId"] = @shop_id + result["boolean"] = @boolean + result["uuid"] = @uuid + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestOutOfOrder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :b + + attr_reader :c + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def b=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..4294967295)" + end + + @b = v + end + + def c=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field c is out of bounds (0..4294967295)" + end + + @c = v + end + + def initialize(a: 0, b: 0, c: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + unless 0 <= b && b <= 4_294_967_295 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..4294967295)" + end + @b = b + + unless 0 <= c && c <= 4_294_967_295 + raise RangeError, + "Value (#{c}) for field c is out of bounds (0..4294967295)" + end + @c = c + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @b = 0 + @c = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @c = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @b + if val != 0 + buff << 0x18 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @c + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"c"] = @c + result[:"b"] = @b + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + result["c"] = @c + result["b"] = @b + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestMessage2 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + attr_reader :shop_id + + attr_reader :boolean + + attr_reader :packed_field + + attr_reader :deprecated_field + + def id=(v) + @id = v + end + + def shop_id=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field shop_id is out of bounds (0..18446744073709551615)" + end + + @shop_id = v + end + + def boolean=(v) + @boolean = v + end + + def packed_field=(v) + v.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field packed_field is out of bounds (0..4294967295)" + end + end + + @packed_field = v + end + + def deprecated_field=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field deprecated_field is out of bounds (0..4294967295)" + end + + @deprecated_field = v + end + + def initialize( + id: "", + shop_id: 0, + boolean: false, + packed_field: [], + deprecated_field: 0 + ) + @id = id + + unless 0 <= shop_id && shop_id <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{shop_id}) for field shop_id is out of bounds (0..18446744073709551615)" + end + @shop_id = shop_id + + @boolean = boolean + + packed_field.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field packed_field is out of bounds (0..4294967295)" + end + end + @packed_field = packed_field + + unless 0 <= deprecated_field && deprecated_field <= 4_294_967_295 + raise RangeError, + "Value (#{deprecated_field}) for field deprecated_field is out of bounds (0..4294967295)" + end + @deprecated_field = deprecated_field + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = "" + @shop_id = 0 + @boolean = false + @packed_field = [] + @deprecated_field = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @id = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @shop_id = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL BOOLEAN + @boolean = (buff.getbyte(index) == 1) + index += 1 + ## END PULL BOOLEAN + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x22 + found = true + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + goal = index + value + list = @packed_field + while true + break if index >= goal + ## PULL_UINT64 + list << if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x28 + found = true + ## PULL_UINT64 + @deprecated_field = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @shop_id + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @boolean + if val == true + buff << 0x18 + + buff << 1 + elsif val == false + # Default value, encode nothing + else + raise "bool values should be true or false" + end + + list = @packed_field + if list.size > 0 + buff << 0x22 + + # Save the buffer size before appending the repeated bytes + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + + # write each item + list.each do |item| + val = item + if val != 0 + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + end + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + end + + val = @deprecated_field + if val != 0 + buff << 0x28 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id + result[:"shop_id"] = @shop_id + result[:"boolean"] = @boolean + result[:"packed_field"] = @packed_field + result[:"deprecated_field"] = @deprecated_field + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id + result["shopId"] = @shop_id + result["boolean"] = @boolean + @packed_field.tap do |v| + result["packedField"] = v if !options[:compact] || v.any? + end + result["deprecatedField"] = @deprecated_field + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestEmbeddee + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field value is out of bounds (0..18446744073709551615)" + end + + @value = v + end + + def initialize(value: 0) + unless 0 <= value && value <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{value}) for field value is out of bounds (0..18446744073709551615)" + end + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestEmbedder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + attr_reader :value + + attr_reader :message + + def id=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field id is out of bounds (0..18446744073709551615)" + end + + @id = v + end + + def value=(v) + @value = v + end + + def message=(v) + @message = v + end + + def initialize(id: 0, value: nil, message: "") + unless 0 <= id && id <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{id}) for field id is out of bounds (0..18446744073709551615)" + end + @id = id + + @value = value + + @message = message + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = 0 + @value = nil + @message = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @id = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @value = + TestEmbeddee.allocate.decode_from(buff, index, index += msg_len) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x1a + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @message = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @value + if val + buff << 0x12 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @message + if ((len = val.bytesize) > 0) + buff << 0x1a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id + result[:"value"] = @value.to_h + result[:"message"] = @message + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id + result["value"] = @value.nil? ? {} : @value.as_json(options) + result["message"] = @message + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestReserved + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :message + + def message=(v) + @message = v + end + + def initialize(message: "") + @message = message + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @message = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x1a + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @message = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @message + if ((len = val.bytesize) > 0) + buff << 0x1a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"message"] = @message + + result + end + + def as_json(options = {}) + result = {} + + result["message"] = @message + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestRepeatedField + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :e + + attr_reader :another_value + + def e=(v) + v.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field e is out of bounds (0..4294967295)" + end + end + + @e = v + end + + def another_value=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field another_value is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @another_value = v + end + + def initialize(e: [], another_value: 0) + e.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field e is out of bounds (0..4294967295)" + end + end + @e = e + + unless -9_223_372_036_854_775_808 <= another_value && + another_value <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{another_value}) for field another_value is out of bounds (-9223372036854775808..9223372036854775807)" + end + @another_value = another_value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @e = [] + @another_value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + goal = index + value + list = @e + while true + break if index >= goal + ## PULL_UINT64 + list << if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_INT64 + @another_value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + list = @e + if list.size > 0 + buff << 0x0a + + # Save the buffer size before appending the repeated bytes + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + + # write each item + list.each do |item| + val = item + if val != 0 + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + end + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + end + + val = @another_value + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"e"] = @e + result[:"another_value"] = @another_value + + result + end + + def as_json(options = {}) + result = {} + + @e.tap { |v| result["e"] = v if !options[:compact] || v.any? } + result["anotherValue"] = @another_value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestInt64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :int_64 + + def int_64=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field int_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @int_64 = v + end + + def initialize(int_64: 0) + unless -9_223_372_036_854_775_808 <= int_64 && + int_64 <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{int_64}) for field int_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + @int_64 = int_64 + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @int_64 = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_INT64 + @int_64 = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @int_64 + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"int_64"] = @int_64 + + result + end + + def as_json(options = {}) + result = {} + + result["int64"] = @int_64 + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSint64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :sint_64 + + def sint_64=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field sint_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @sint_64 = v + end + + def initialize(sint_64: 0) + unless -9_223_372_036_854_775_808 <= sint_64 && + sint_64 <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{sint_64}) for field sint_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + @sint_64 = sint_64 + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @sint_64 = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @sint_64 = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @sint_64 + if val != 0 + buff << 0x08 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"sint_64"] = @sint_64 + + result + end + + def as_json(options = {}) + result = {} + + result["sint64"] = @sint_64 + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSInt64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field value is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @value = v + end + + def initialize(value: 0) + unless -9_223_372_036_854_775_808 <= value && + value <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{value}) for field value is out of bounds (-9223372036854775808..9223372036854775807)" + end + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @value = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSInt32 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field value is out of bounds (-2147483648..2147483647)" + end + + @value = v + end + + def initialize(value: 0) + unless -2_147_483_648 <= value && value <= 2_147_483_647 + raise RangeError, + "Value (#{value}) for field value is out of bounds (-2147483648..2147483647)" + end + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @value = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestFixed64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x9 + found = true + @value = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | + (buff.getbyte(index + 3) << 24) | + (buff.getbyte(index + 4) << 32) | + (buff.getbyte(index + 5) << 40) | + (buff.getbyte(index + 6) << 48) | (buff.getbyte(index + 7) << 56) + ) + index += 8 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x09 + + [val].pack("Q<", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSFixed64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x9 + found = true + @value = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | + (buff.getbyte(index + 3) << 24) | + (buff.getbyte(index + 4) << 32) | + (buff.getbyte(index + 5) << 40) | + (buff.getbyte(index + 6) << 48) | (buff.getbyte(index + 7) << 56) + ) + index += 8 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x09 + + [val].pack("q<", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestFixed32 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xd + found = true + @value = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | (buff.getbyte(index + 3) << 24) + ) + index += 4 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x0d + + [val].pack("L<", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestSFixed32 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xd + found = true + @value = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | (buff.getbyte(index + 3) << 24) + ) + index += 4 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x0d + + [val].pack("l<", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestDouble + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0.0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0.0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x9 + found = true + @value = buff.unpack1("E", offset: index) + index += 8 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x09 + + [val].pack("E", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestFloat + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: 0.0) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0.0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xd + found = true + @value = buff.unpack1("e", offset: index) + index += 4 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x0d + + [val].pack("e", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestTwoFields + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :b + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def b=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field b is out of bounds (-2147483648..2147483647)" + end + + @b = v + end + + def initialize(a: 0, b: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + unless -2_147_483_648 <= b && b <= 2_147_483_647 + raise RangeError, + "Value (#{b}) for field b is out of bounds (-2147483648..2147483647)" + end + @b = b + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @b = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @b = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @b + if val != 0 + buff << 0x10 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"b"] = @b + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + result["b"] = @b + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestMsgGoogleTypes + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :int_64 + + attr_reader :a_id + + attr_reader :c_id + + attr_reader :sint_64 + + def int_64=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field int_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @int_64 = v + end + + def a_id=(v) + @a_id = v + end + + def c_id=(v) + @c_id = v + end + + def sint_64=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field sint_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @sint_64 = v + end + + def initialize(int_64: 0, a_id: nil, c_id: nil, sint_64: 0) + unless -9_223_372_036_854_775_808 <= int_64 && + int_64 <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{int_64}) for field int_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + @int_64 = int_64 + + @a_id = a_id + + @c_id = c_id + + unless -9_223_372_036_854_775_808 <= sint_64 && + sint_64 <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{sint_64}) for field sint_64 is out of bounds (-9223372036854775808..9223372036854775807)" + end + @sint_64 = sint_64 + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @int_64 = 0 + @a_id = nil + @c_id = nil + @sint_64 = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x20 + found = true + ## PULL_INT64 + @int_64 = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @a_id = + ::ProtoBoeuf::Google::Protobuf::UInt64Value.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @c_id = + ::ProtoBoeuf::Google::Protobuf::StringValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @sint_64 = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @int_64 + if val != 0 + buff << 0x20 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + + val = @a_id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @c_id + if val + buff << 0x12 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @sint_64 + if val != 0 + buff << 0x18 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a_id"] = @a_id.to_h + result[:"c_id"] = @c_id.to_h + result[:"sint_64"] = @sint_64 + result[:"int_64"] = @int_64 + + result + end + + def as_json(options = {}) + result = {} + + result["aId"] = @a_id.nil? ? {} : @a_id.as_json(options) + result["cId"] = @c_id.nil? ? {} : @c_id.as_json(options) + result["sint64"] = @sint_64 + result["int64"] = @int_64 + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TestMessageWithOneOf + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + attr_reader :shop_id + + attr_reader :boolean + + # oneof field readers + + attr_reader :oneof_field + + attr_reader :oneof_u32 + + attr_reader :oneof_msg + + attr_reader :oneof_str + + def id=(v) + @id = v + end + + def shop_id=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field shop_id is out of bounds (0..18446744073709551615)" + end + + @shop_id = v + end + + def boolean=(v) + @boolean = v + end + + # BEGIN writers for oneof fields + def oneof_u32=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field oneof_u32 is out of bounds (0..4294967295)" + end + + @oneof_field = :oneof_u32 + @oneof_u32 = v + end + + def oneof_msg=(v) + @oneof_field = :oneof_msg + @oneof_msg = v + end + + def oneof_str=(v) + @oneof_field = :oneof_str + @oneof_str = v + end + # END writers for oneof fields + + def initialize( + id: "", + shop_id: 0, + oneof_u32: nil, + oneof_msg: nil, + oneof_str: nil, + boolean: false + ) + @oneof_field = nil # oneof field + + @id = id + + unless 0 <= shop_id && shop_id <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{shop_id}) for field shop_id is out of bounds (0..18446744073709551615)" + end + @shop_id = shop_id + + if oneof_u32 == nil + @oneof_u32 = 0 + else + unless 0 <= oneof_u32 && oneof_u32 <= 4_294_967_295 + raise RangeError, + "Value (#{oneof_u32}) for field oneof_u32 is out of bounds (0..4294967295)" + end + + @oneof_field = :oneof_u32 + @oneof_u32 = oneof_u32 + end + + if oneof_msg == nil + @oneof_msg = nil + else + @oneof_field = :oneof_msg + @oneof_msg = oneof_msg + end + + if oneof_str == nil + @oneof_str = "" + else + @oneof_field = :oneof_str + @oneof_str = oneof_str + end + + @boolean = boolean + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @oneof_field = nil # oneof field + @id = "" + @shop_id = 0 + @oneof_u32 = 0 + @oneof_msg = nil + @oneof_str = "" + @boolean = false + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @id = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @shop_id = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x28 + found = true + ## PULL_UINT64 + @oneof_u32 = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @oneof_field = :oneof_u32 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x32 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @oneof_msg = + TestEmbeddee.allocate.decode_from(buff, index, index += msg_len) + ## END PULL_MESSAGE + + @oneof_field = :oneof_msg + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x3a + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @oneof_str = + buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + @oneof_field = :oneof_str + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL BOOLEAN + @boolean = (buff.getbyte(index) == 1) + index += 1 + ## END PULL BOOLEAN + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @shop_id + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @oneof_u32 + if val != 0 + buff << 0x28 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @oneof_msg + if val + buff << 0x32 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @oneof_str + if ((len = val.bytesize) > 0) + buff << 0x3a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @boolean + if val == true + buff << 0x18 + + buff << 1 + elsif val == false + # Default value, encode nothing + else + raise "bool values should be true or false" + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id + result[:"shop_id"] = @shop_id + result[:"boolean"] = @boolean + result[:"oneof_u32"] = @oneof_u32 if send(:"oneof_field") == :"oneof_u32" + result[:"oneof_msg"] = @oneof_msg.to_h if send(:"oneof_field") == + :"oneof_msg" + result[:"oneof_str"] = @oneof_str if send(:"oneof_field") == :"oneof_str" + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id + result["shopId"] = @shop_id + result["boolean"] = @boolean + result["oneofU32"] = @oneof_u32 if send(:"oneof_field") == :"oneof_u32" + result["oneofMsg"] = ( + if @oneof_msg.nil? + {} + else + @oneof_msg.as_json(options) + end + ) if send(:"oneof_field") == :"oneof_msg" + result["oneofStr"] = @oneof_str if send(:"oneof_field") == :"oneof_str" + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class Bucket + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + class WorldeCoords + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :lat + + attr_reader :lng + + def lat=(v) + @lat = v + end + + def lng=(v) + @lng = v + end + + def initialize(lat: nil, lng: nil) + @lat = lat + + @lng = lng + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @lat = nil + @lng = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x2a + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @lat = + ::ProtoBoeuf::Google::Protobuf::DoubleValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x32 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @lng = + ::ProtoBoeuf::Google::Protobuf::DoubleValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @lat + if val + buff << 0x2a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @lng + if val + buff << 0x32 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"lat"] = @lat.to_h + result[:"lng"] = @lng.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["lat"] = @lat.nil? ? {} : @lat.as_json(options) + result["lng"] = @lng.nil? ? {} : @lng.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end + end + module NestedEnum + FOO = 0 + BAR = 1 + + def self.lookup(val) + return :FOO if val == 0 + return :BAR if val == 1 + end + + def self.resolve(val) + return 0 if val == :FOO + return 1 if val == :BAR + end + end + # required field readers + + attr_reader :loc1 + + attr_reader :loc2 + + # enum readers + def kind + Bucket::NestedEnum.lookup(@kind) || @kind + end + + def loc1=(v) + @loc1 = v + end + + def loc2=(v) + @loc2 = v + end + + # enum writers + def kind=(v) + @kind = Bucket::NestedEnum.resolve(v) || v + end + + def initialize(loc1: nil, loc2: nil, kind: 0) + @loc1 = loc1 + + @loc2 = loc2 + + @kind = Bucket::NestedEnum.resolve(kind) || kind + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @loc1 = nil + @loc2 = nil + @kind = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @loc1 = + Bucket::WorldeCoords.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @loc2 = + Bucket::WorldeCoords.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL_INT64 + @kind = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @loc1 + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @loc2 + if val + buff << 0x12 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @kind + if val != 0 + buff << 0x18 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"loc1"] = @loc1.to_h + result[:"loc2"] = @loc2.to_h + result[:"kind"] = @kind + + result + end + + def as_json(options = {}) + result = {} + + result["loc1"] = @loc1.nil? ? {} : @loc1.as_json(options) + result["loc2"] = @loc2.nil? ? {} : @loc2.as_json(options) + result["kind"] = @kind + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class ManyOptional + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :c + + # optional field readers + + attr_reader :a + + attr_reader :b + + attr_reader :d + + def c=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field c is out of bounds (0..18446744073709551615)" + end + + @c = v + end + + # BEGIN writers for optional fields + + def a=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..18446744073709551615)" + end + + @_bitmask |= 0x0000000000000001 + @a = v + end + + def b=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..18446744073709551615)" + end + + @_bitmask |= 0x0000000000000002 + @b = v + end + + def d=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field d is out of bounds (0..18446744073709551615)" + end + + @_bitmask |= 0x0000000000000004 + @d = v + end + # END writers for optional fields + + def initialize(a: nil, b: nil, c: 0, d: nil) + @_bitmask = 0 + + if a == nil + @a = 0 + else + unless 0 <= a && a <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..18446744073709551615)" + end + @_bitmask |= 0x0000000000000001 + @a = a + end + + if b == nil + @b = 0 + else + unless 0 <= b && b <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..18446744073709551615)" + end + @_bitmask |= 0x0000000000000002 + @b = b + end + + unless 0 <= c && c <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{c}) for field c is out of bounds (0..18446744073709551615)" + end + @c = c + + if d == nil + @d = 0 + else + unless 0 <= d && d <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{d}) for field d is out of bounds (0..18446744073709551615)" + end + @_bitmask |= 0x0000000000000004 + @d = d + end + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_a? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def has_b? + (@_bitmask & 0x0000000000000002) == 0x0000000000000002 + end + + def has_d? + (@_bitmask & 0x0000000000000004) == 0x0000000000000004 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = 0 + @b = 0 + @c = 0 + @d = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @_bitmask |= 0x0000000000000002 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL_UINT64 + @c = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x20 + found = true + ## PULL_UINT64 + @d = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @_bitmask |= 0x0000000000000004 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @b + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @c + if val != 0 + buff << 0x18 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @d + if val != 0 + buff << 0x20 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"b"] = @b + result[:"c"] = @c + result[:"d"] = @d + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a if !options[:compact] || has_a? + result["b"] = @b if !options[:compact] || has_b? + result["c"] = @c + result["d"] = @d if !options[:compact] || has_d? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class BucketObj + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + class OrigFoo + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :q + + # oneof field readers + + attr_reader :foo_bar_bif + + attr_reader :i + + attr_reader :s + + def q=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field q is out of bounds (-2147483648..2147483647)" + end + + @q = v + end + + # BEGIN writers for oneof fields + def i=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field i is out of bounds (0..4294967295)" + end + + @foo_bar_bif = :i + @i = v + end + + def s=(v) + @foo_bar_bif = :s + @s = v + end + # END writers for oneof fields + + def initialize(i: nil, s: nil, q: 0) + @foo_bar_bif = nil # oneof field + if i == nil + @i = 0 + else + unless 0 <= i && i <= 4_294_967_295 + raise RangeError, + "Value (#{i}) for field i is out of bounds (0..4294967295)" + end + + @foo_bar_bif = :i + @i = i + end + + if s == nil + @s = "" + else + @foo_bar_bif = :s + @s = s + end + + unless -2_147_483_648 <= q && q <= 2_147_483_647 + raise RangeError, + "Value (#{q}) for field q is out of bounds (-2147483648..2147483647)" + end + @q = q + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @foo_bar_bif = nil # oneof field + @i = 0 + @s = "" + @q = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @i = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @foo_bar_bif = :i + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @s = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + @foo_bar_bif = :s + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x38 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @q = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @i + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @s + if ((len = val.bytesize) > 0) + buff << 0x12 + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @q + if val != 0 + buff << 0x38 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"i"] = @i if send(:"foo_bar_bif") == :"i" + result[:"s"] = @s if send(:"foo_bar_bif") == :"s" + result[:"q"] = @q + + result + end + + def as_json(options = {}) + result = {} + + result["i"] = @i if send(:"foo_bar_bif") == :"i" + result["s"] = @s if send(:"foo_bar_bif") == :"s" + result["q"] = @q + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end + end + # required field readers + + attr_reader :fi + + def fi=(v) + unless -2_147_483_648 <= v && v <= 2_147_483_647 + raise RangeError, + "Value (#{v}) for field fi is out of bounds (-2147483648..2147483647)" + end + + @fi = v + end + + def initialize(fi: 0) + unless -2_147_483_648 <= fi && fi <= 2_147_483_647 + raise RangeError, + "Value (#{fi}) for field fi is out of bounds (-2147483648..2147483647)" + end + @fi = fi + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @fi = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x28 + found = true + ## PULL SINT32 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + # If value is even, then it's positive + @fi = + ( + if value.even? + value >> 1 + else + -((value + 1) >> 1) + end + ) + ## END PULL SINT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @fi + if val != 0 + buff << 0x28 + + # Zigzag encoding: + # Positive values encoded as 2 * n (even) + # Negative values encoded as 2 * |n| - 1 (odd) + val = + if val >= 0 + 2 * val + else + (-2 * val) - 1 + end + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"fi"] = @fi + + result + end + + def as_json(options = {}) + result = {} + + result["fi"] = @fi + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasMap + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :something + + attr_reader :number + + def something=(v) + @something = v + end + + def number=(v) + unless -9_223_372_036_854_775_808 <= v && v <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{v}) for field number is out of bounds (-9223372036854775808..9223372036854775807)" + end + + @number = v + end + + def initialize(something: {}, number: 0) + @something = something + + unless -9_223_372_036_854_775_808 <= number && + number <= 9_223_372_036_854_775_807 + raise RangeError, + "Value (#{number}) for field number is out of bounds (-9223372036854775808..9223372036854775807)" + end + @number = number + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @something = {} + @number = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MAP + map = @something + while tag == 0xa + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + index += 1 # skip the tag, assume it's the key + return self if index >= len + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + key = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + index += 1 # skip the tag, assume it's the value + ## PULL_INT64 + map[key] = if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + if tag == 0x10 + found = true + ## PULL_INT64 + @number = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + map = @something + if map.size > 0 + old_buff = buff + map.each do |key, value| + buff = new_buffer = +"" + val = key + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = value + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + + buff = old_buff + buff << 0x0a + len = new_buffer.bytesize + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + old_buff.concat(new_buffer) + end + end + + val = @number + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"something"] = @something + result[:"number"] = @number + + result + end + + def as_json(options = {}) + result = {} + + @something.tap do |v| + result["something"] = v if !options[:compact] || v.any? + end + result["number"] = @number + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class NoFieldsLol + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + def initialize() + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + return self if index >= len + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + return self if index >= len + end + end + def _encode(buff) + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result + end + + def as_json(options = {}) + result = {} + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class FixedWidthNumbers + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :c + + attr_reader :d + + attr_reader :e + + # optional field readers + + attr_reader :b + + def a=(v) + @a = v + end + + def c=(v) + @c = v + end + + def d=(v) + @d = v + end + + def e=(v) + @e = v + end + + # BEGIN writers for optional fields + + def b=(v) + @_bitmask |= 0x0000000000000001 + @b = v + end + # END writers for optional fields + + def initialize(a: 0.0, b: nil, c: 0, d: 0.0, e: 0) + @_bitmask = 0 + + @a = a + + if b == nil + @b = 0.0 + else + @_bitmask |= 0x0000000000000001 + @b = b + end + + @c = c + + @d = d + + @e = e + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def has_b? + (@_bitmask & 0x0000000000000001) == 0x0000000000000001 + end + + def decode_from(buff, index, len) + @_bitmask = 0 + + @a = 0.0 + @b = 0.0 + @c = 0 + @d = 0.0 + @e = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x9 + found = true + @a = buff.unpack1("E", offset: index) + index += 8 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x11 + found = true + @b = buff.unpack1("E", offset: index) + index += 8 + @_bitmask |= 0x0000000000000001 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x19 + found = true + @c = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | + (buff.getbyte(index + 3) << 24) | + (buff.getbyte(index + 4) << 32) | + (buff.getbyte(index + 5) << 40) | + (buff.getbyte(index + 6) << 48) | (buff.getbyte(index + 7) << 56) + ) + index += 8 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x25 + found = true + @d = buff.unpack1("e", offset: index) + index += 4 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x2d + found = true + @e = + ( + (buff.getbyte(index + 0) << 0) | (buff.getbyte(index + 1) << 8) | + (buff.getbyte(index + 2) << 16) | (buff.getbyte(index + 3) << 24) + ) + index += 4 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x09 + + [val].pack("E", buffer: buff) + end + + val = @b + if val != 0 + buff << 0x11 + + [val].pack("E", buffer: buff) + end + + val = @c + if val != 0 + buff << 0x19 + + [val].pack("Q<", buffer: buff) + end + + val = @d + if val != 0 + buff << 0x25 + + [val].pack("e", buffer: buff) + end + + val = @e + if val != 0 + buff << 0x2d + + [val].pack("L<", buffer: buff) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"b"] = @b + result[:"c"] = @c + result[:"d"] = @d + result[:"e"] = @e + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + result["b"] = @b if !options[:compact] || has_b? + result["c"] = @c + result["d"] = @d + result["e"] = @e + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class UnpackedFields + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :ids + + attr_reader :b + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def ids=(v) + v.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field ids is out of bounds (0..4294967295)" + end + end + + @ids = v + end + + def b=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..4294967295)" + end + + @b = v + end + + def initialize(a: 0, ids: [], b: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + ids.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field ids is out of bounds (0..4294967295)" + end + end + @ids = ids + + unless 0 <= b && b <= 4_294_967_295 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..4294967295)" + end + @b = b + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @ids = [] + @b = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## DECODE REPEATED + list = @ids + while true + ## PULL_UINT64 + list << if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + break unless tag == 0x10 + end + ## END DECODE REPEATED + + return self if index >= len + end + if tag == 0x18 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + list = @ids + if list.size > 0 + list.each do |item| + val = item + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + end + end + + val = @b + if val != 0 + buff << 0x18 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"ids"] = @ids + result[:"b"] = @b + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + @ids.tap { |v| result["ids"] = v if !options[:compact] || v.any? } + result["b"] = @b + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class RepeatedStrings + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :names + + attr_reader :b + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def names=(v) + @names = v + end + + def b=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..4294967295)" + end + + @b = v + end + + def initialize(a: 0, names: [], b: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + @names = names + + unless 0 <= b && b <= 4_294_967_295 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..4294967295)" + end + @b = b + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @names = [] + @b = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## DECODE REPEATED + list = @names + while true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + list << buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + break unless tag == 0x12 + end + ## END DECODE REPEATED + + return self if index >= len + end + if tag == 0x18 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + list = @names + if list.size > 0 + list.each do |item| + val = item + if ((len = val.bytesize) > 0) + buff << 0x12 + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + end + end + + val = @b + if val != 0 + buff << 0x18 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"names"] = @names + result[:"b"] = @b + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + @names.tap { |v| result["names"] = v if !options[:compact] || v.any? } + result["b"] = @b + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class RepeatedSubMessages + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :ints + + def ints=(v) + @ints = v + end + + def initialize(ints: []) + @ints = ints + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @ints = [] + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## DECODE REPEATED + list = @ints + while true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + list << TestSint64.allocate.decode_from(buff, index, index += msg_len) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + break unless tag == 0xa + end + ## END DECODE REPEATED + + return self if index >= len + end + + return self if index >= len + end + end + def _encode(buff) + list = @ints + if list.size > 0 + list.each do |item| + val = item + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"ints"] = @ints.map { |v| v.to_h } + + result + end + + def as_json(options = {}) + result = {} + + @ints + .map { |v| v.as_json(options) } + .tap { |v| result["ints"] = v if !options[:compact] || v.any? } + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class ObjWithEmbedded + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + class Embedded + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :b + + attr_reader :c + + def b=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..4294967295)" + end + + @b = v + end + + def c=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field c is out of bounds (0..4294967295)" + end + + @c = v + end + + def initialize(b: 0, c: 0) + unless 0 <= b && b <= 4_294_967_295 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..4294967295)" + end + @b = b + + unless 0 <= c && c <= 4_294_967_295 + raise RangeError, + "Value (#{c}) for field c is out of bounds (0..4294967295)" + end + @c = c + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @b = 0 + @c = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @c = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @b + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @c + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"b"] = @b + result[:"c"] = @c + + result + end + + def as_json(options = {}) + result = {} + + result["b"] = @b + result["c"] = @c + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end + end + # required field readers + + attr_reader :a + + attr_reader :b + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def b=(v) + @b = v + end + + def initialize(a: 0, b: nil) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + @b = b + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @b = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @b = + ObjWithEmbedded::Embedded.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @b + if val + buff << 0x12 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"b"] = @b.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + result["b"] = @b.nil? ? {} : @b.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasEnum + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + # enum readers + def a + SimpleEnum.lookup(@a) || @a + end + # enum writers + def a=(v) + @a = SimpleEnum.resolve(v) || v + end + + def initialize(a: 0) + @a = SimpleEnum.resolve(a) || a + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_INT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasSubEnum + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + module Thing + BASE = 0 + NEAT = 1 + + def self.lookup(val) + return :BASE if val == 0 + return :NEAT if val == 1 + end + + def self.resolve(val) + return 0 if val == :BASE + return 1 if val == :NEAT + end + end + # required field readers + + # enum readers + def a + HasSubEnum::Thing.lookup(@a) || @a + end + # enum writers + def a=(v) + @a = HasSubEnum::Thing.resolve(v) || v + end + + def initialize(a: 0) + @a = HasSubEnum::Thing.resolve(a) || a + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_INT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeBool + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::BoolValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeInt32 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::Int32Value.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeInt64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::Int64Value.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeUInt32 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::UInt32Value.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeUInt64 + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::UInt64Value.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeFloat + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::FloatValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeDouble + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::DoubleValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeString + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::StringValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeBytes + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :id + + def id=(v) + @id = v + end + + def initialize(id: nil) + @id = id + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @id = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @id = + ::ProtoBoeuf::Google::Protobuf::BytesValue.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id.nil? ? {} : @id.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class HasKnownTypeTimestamp + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :t + + def t=(v) + @t = v + end + + def initialize(t: nil) + @t = t + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @t = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @t = + ::ProtoBoeuf::Google::Protobuf::Timestamp.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @t + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"t"] = @t.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["t"] = @t.nil? ? {} : @t.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class EnumEncoder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + module Enum + ZERO = 0 + ONE = 1 + TWO = 2 + THREE = 3 + INT_MAX = 2_147_483_647 + + def self.lookup(val) + return :ZERO if val == 0 + return :ONE if val == 1 + return :TWO if val == 2 + return :THREE if val == 3 + return :INT_MAX if val == 2_147_483_647 + end + + def self.resolve(val) + return 0 if val == :ZERO + return 1 if val == :ONE + return 2 if val == :TWO + return 3 if val == :THREE + return 2_147_483_647 if val == :INT_MAX + end + end + # required field readers + + # enum readers + def value + EnumEncoder::Enum.lookup(@value) || @value + end + # enum writers + def value=(v) + @value = EnumEncoder::Enum.resolve(v) || v + end + + def initialize(value: 0) + @value = EnumEncoder::Enum.resolve(value) || value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_INT64 + @value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF_FFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class RepeatedEncoder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :intValues + + attr_reader :looseIntValues + + attr_reader :stringValues + + def intValues=(v) + v.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field intValues is out of bounds (0..4294967295)" + end + end + + @intValues = v + end + + def looseIntValues=(v) + v.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field looseIntValues is out of bounds (0..4294967295)" + end + end + + @looseIntValues = v + end + + def stringValues=(v) + @stringValues = v + end + + def initialize(intValues: [], looseIntValues: [], stringValues: []) + intValues.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field intValues is out of bounds (0..4294967295)" + end + end + @intValues = intValues + + looseIntValues.each do |v| + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}}) for field looseIntValues is out of bounds (0..4294967295)" + end + end + @looseIntValues = looseIntValues + + @stringValues = stringValues + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @intValues = [] + @looseIntValues = [] + @stringValues = [] + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + goal = index + value + list = @intValues + while true + break if index >= goal + ## PULL_UINT64 + list << if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## DECODE REPEATED + list = @looseIntValues + while true + ## PULL_UINT64 + list << if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + break unless tag == 0x10 + end + ## END DECODE REPEATED + + return self if index >= len + end + if tag == 0x1a + found = true + ## DECODE REPEATED + list = @stringValues + while true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + list << buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + break unless tag == 0x1a + end + ## END DECODE REPEATED + + return self if index >= len + end + + return self if index >= len + end + end + def _encode(buff) + list = @intValues + if list.size > 0 + buff << 0x0a + + # Save the buffer size before appending the repeated bytes + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + + # write each item + list.each do |item| + val = item + if val != 0 + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + end + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + end + + list = @looseIntValues + if list.size > 0 + list.each do |item| + val = item + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + end + end + + list = @stringValues + if list.size > 0 + list.each do |item| + val = item + if ((len = val.bytesize) > 0) + buff << 0x1a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"intValues"] = @intValues + result[:"looseIntValues"] = @looseIntValues + result[:"stringValues"] = @stringValues + + result + end + + def as_json(options = {}) + result = {} + + @intValues.tap do |v| + result["intValues"] = v if !options[:compact] || v.any? + end + @looseIntValues.tap do |v| + result["looseIntValues"] = v if !options[:compact] || v.any? + end + @stringValues.tap do |v| + result["stringValues"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class MapEncoder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :intIntMap + + attr_reader :stringIntMap + + attr_reader :stringStringMap + + def intIntMap=(v) + @intIntMap = v + end + + def stringIntMap=(v) + @stringIntMap = v + end + + def stringStringMap=(v) + @stringStringMap = v + end + + def initialize(intIntMap: {}, stringIntMap: {}, stringStringMap: {}) + @intIntMap = intIntMap + + @stringIntMap = stringIntMap + + @stringStringMap = stringStringMap + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @intIntMap = {} + @stringIntMap = {} + @stringStringMap = {} + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MAP + map = @intIntMap + while tag == 0xa + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + index += 1 # skip the tag, assume it's the key + return self if index >= len + ## PULL_INT32 + key = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT32 + + index += 1 # skip the tag, assume it's the value + ## PULL_INT32 + map[key] = if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + # Negative 32 bit integers are still encoded with 10 bytes + # handle 2's complement negative numbers + # If the top bit is 1, then it must be negative. + -( + ( + ( + ~( + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + ) + ) & 0xFFFF_FFFF + ) + 1 + ) + else + raise "integer decoding error" + end + + ## END PULL_INT32 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + if tag == 0x12 + found = true + ## PULL_MAP + map = @stringIntMap + while tag == 0x12 + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + index += 1 # skip the tag, assume it's the key + return self if index >= len + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + key = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + index += 1 # skip the tag, assume it's the value + ## PULL_UINT64 + map[key] = if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + if tag == 0x1a + found = true + ## PULL_MAP + map = @stringStringMap + while tag == 0x1a + ## PULL_UINT64 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + index += 1 # skip the tag, assume it's the key + return self if index >= len + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + key = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + index += 1 # skip the tag, assume it's the value + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + map[key] = buff.byteslice(index, value).force_encoding( + Encoding::UTF_8 + ) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + + return self if index >= len + end + end + def _encode(buff) + map = @intIntMap + if map.size > 0 + old_buff = buff + map.each do |key, value| + buff = new_buffer = +"" + val = key + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + + val = value + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + buff << byte + end + end + + buff = old_buff + buff << 0x0a + len = new_buffer.bytesize + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + old_buff.concat(new_buffer) + end + end + + map = @stringIntMap + if map.size > 0 + old_buff = buff + map.each do |key, value| + buff = new_buffer = +"" + val = key + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = value + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + buff = old_buff + buff << 0x12 + len = new_buffer.bytesize + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + old_buff.concat(new_buffer) + end + end + + map = @stringStringMap + if map.size > 0 + old_buff = buff + map.each do |key, value| + buff = new_buffer = +"" + val = key + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = value + if ((len = val.bytesize) > 0) + buff << 0x12 + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + buff = old_buff + buff << 0x1a + len = new_buffer.bytesize + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + old_buff.concat(new_buffer) + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"intIntMap"] = @intIntMap + result[:"stringIntMap"] = @stringIntMap + result[:"stringStringMap"] = @stringStringMap + + result + end + + def as_json(options = {}) + result = {} + + @intIntMap.tap do |v| + result["intIntMap"] = v if !options[:compact] || v.any? + end + @stringIntMap.tap do |v| + result["stringIntMap"] = v if !options[:compact] || v.any? + end + @stringStringMap.tap do |v| + result["stringStringMap"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class SubmessageEncoder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + class Submessage + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + attr_reader :strValue + + def value=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field value is out of bounds (0..4294967295)" + end + + @value = v + end + + def strValue=(v) + @strValue = v + end + + def initialize(value: 0, strValue: "") + unless 0 <= value && value <= 4_294_967_295 + raise RangeError, + "Value (#{value}) for field value is out of bounds (0..4294967295)" + end + @value = value + + @strValue = strValue + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + @strValue = "" + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x12 + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @strValue = + buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @strValue + if ((len = val.bytesize) > 0) + buff << 0x12 + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + result[:"strValue"] = @strValue + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result["strValue"] = @strValue + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end + end + # required field readers + + attr_reader :value + + def value=(v) + @value = v + end + + def initialize(value: nil) + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = nil + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @value = + SubmessageEncoder::Submessage.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val + buff << 0x0a + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value.nil? ? {} : @value.as_json(options) + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class OneOfEncoder + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + class TestEmbeddee + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :value + + def value=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field value is out of bounds (0..18446744073709551615)" + end + + @value = v + end + + def initialize(value: 0) + unless 0 <= value && value <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{value}) for field value is out of bounds (0..18446744073709551615)" + end + @value = value + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @value = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | + ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x8 + found = true + ## PULL_UINT64 + @value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @value + if val != 0 + buff << 0x08 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end + end + # required field readers + + attr_reader :id + + attr_reader :shop_id + + attr_reader :boolean + + # oneof field readers + + attr_reader :oneof_field + + attr_reader :oneof_u32 + + attr_reader :oneof_msg + + attr_reader :oneof_str + + def id=(v) + @id = v + end + + def shop_id=(v) + unless 0 <= v && v <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{v}) for field shop_id is out of bounds (0..18446744073709551615)" + end + + @shop_id = v + end + + def boolean=(v) + @boolean = v + end + + # BEGIN writers for oneof fields + def oneof_u32=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field oneof_u32 is out of bounds (0..4294967295)" + end + + @oneof_field = :oneof_u32 + @oneof_u32 = v + end + + def oneof_msg=(v) + @oneof_field = :oneof_msg + @oneof_msg = v + end + + def oneof_str=(v) + @oneof_field = :oneof_str + @oneof_str = v + end + # END writers for oneof fields + + def initialize( + id: "", + shop_id: 0, + oneof_u32: nil, + oneof_msg: nil, + oneof_str: nil, + boolean: false + ) + @oneof_field = nil # oneof field + + @id = id + + unless 0 <= shop_id && shop_id <= 18_446_744_073_709_551_615 + raise RangeError, + "Value (#{shop_id}) for field shop_id is out of bounds (0..18446744073709551615)" + end + @shop_id = shop_id + + if oneof_u32 == nil + @oneof_u32 = 0 + else + unless 0 <= oneof_u32 && oneof_u32 <= 4_294_967_295 + raise RangeError, + "Value (#{oneof_u32}) for field oneof_u32 is out of bounds (0..4294967295)" + end + + @oneof_field = :oneof_u32 + @oneof_u32 = oneof_u32 + end + + if oneof_msg == nil + @oneof_msg = nil + else + @oneof_field = :oneof_msg + @oneof_msg = oneof_msg + end + + if oneof_str == nil + @oneof_str = "" + else + @oneof_field = :oneof_str + @oneof_str = oneof_str + end + + @boolean = boolean + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @oneof_field = nil # oneof field + @id = "" + @shop_id = 0 + @oneof_u32 = 0 + @oneof_msg = nil + @oneof_str = "" + @boolean = false + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xa + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @id = buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x10 + found = true + ## PULL_UINT64 + @shop_id = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x28 + found = true + ## PULL_UINT64 + @oneof_u32 = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @oneof_field = :oneof_u32 + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x32 + found = true + ## PULL_MESSAGE + ## PULL_UINT64 + msg_len = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + @oneof_msg = + OneOfEncoder::TestEmbeddee.allocate.decode_from( + buff, + index, + index += msg_len + ) + ## END PULL_MESSAGE + + @oneof_field = :oneof_msg + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x3a + found = true + ## PULL_STRING + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + @oneof_str = + buff.byteslice(index, value).force_encoding(Encoding::UTF_8) + index += value + + ## END PULL_STRING + + @oneof_field = :oneof_str + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x18 + found = true + ## PULL BOOLEAN + @boolean = (buff.getbyte(index) == 1) + index += 1 + ## END PULL BOOLEAN + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @id + if ((len = val.bytesize) > 0) + buff << 0x0a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @shop_id + if val != 0 + buff << 0x10 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @oneof_u32 + if val != 0 + buff << 0x28 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @oneof_msg + if val + buff << 0x32 + + # Save the buffer size before appending the submessage + current_len = buff.bytesize + + # Write a single dummy byte to later store encoded length + buff << 42 # "*" + val._encode(buff) + + # Calculate the submessage's size + submessage_size = buff.bytesize - current_len - 1 + + # Hope the size fits in one byte + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + + # If the sub message was bigger + if submessage_size > 0 + current_len += 1 + + # compute how much we need to shift + encoded_int_len = 0 + remaining_size = submessage_size + while remaining_size != 0 + remaining_size >>= 7 + encoded_int_len += 1 + end + + # Make space in the string with dummy bytes + buff.bytesplice(current_len, 0, "*********", 0, encoded_int_len) + + # Overwrite the dummy bytes with the encoded length + while submessage_size != 0 + byte = submessage_size & 0x7F + submessage_size >>= 7 + byte |= 0x80 if submessage_size > 0 + buff.setbyte(current_len, byte) + current_len += 1 + end + end + + buff + end + + val = @oneof_str + if ((len = val.bytesize) > 0) + buff << 0x3a + while len != 0 + byte = len & 0x7F + len >>= 7 + byte |= 0x80 if len > 0 + buff << byte + end + + buff << (val.ascii_only? ? val : val.b) + end + + val = @boolean + if val == true + buff << 0x18 + + buff << 1 + elsif val == false + # Default value, encode nothing + else + raise "bool values should be true or false" + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"id"] = @id + result[:"shop_id"] = @shop_id + result[:"boolean"] = @boolean + result[:"oneof_u32"] = @oneof_u32 if send(:"oneof_field") == :"oneof_u32" + result[:"oneof_msg"] = @oneof_msg.to_h if send(:"oneof_field") == + :"oneof_msg" + result[:"oneof_str"] = @oneof_str if send(:"oneof_field") == :"oneof_str" + + result + end + + def as_json(options = {}) + result = {} + + result["id"] = @id + result["shopId"] = @shop_id + result["boolean"] = @boolean + result["oneofU32"] = @oneof_u32 if send(:"oneof_field") == :"oneof_u32" + result["oneofMsg"] = ( + if @oneof_msg.nil? + {} + else + @oneof_msg.as_json(options) + end + ) if send(:"oneof_field") == :"oneof_msg" + result["oneofStr"] = @oneof_str if send(:"oneof_field") == :"oneof_str" + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TooManyFields + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def initialize(a: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0x100 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0x80 + buff << 0x02 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end +class TooManyFieldsAgain + def self.decode(buff) + allocate.decode_from(buff.b, 0, buff.bytesize) + end + + def self.encode(obj) + obj._encode("".b) + end + # required field readers + + attr_reader :a + + attr_reader :b + + def a=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field a is out of bounds (0..4294967295)" + end + + @a = v + end + + def b=(v) + unless 0 <= v && v <= 4_294_967_295 + raise RangeError, + "Value (#{v}) for field b is out of bounds (0..4294967295)" + end + + @b = v + end + + def initialize(a: 0, b: 0) + unless 0 <= a && a <= 4_294_967_295 + raise RangeError, + "Value (#{a}) for field a is out of bounds (0..4294967295)" + end + @a = a + + unless 0 <= b && b <= 4_294_967_295 + raise RangeError, + "Value (#{b}) for field b is out of bounds (0..4294967295)" + end + @b = b + end + + def to_proto(_options = {}) + self.class.encode(self) + end + + def decode_from(buff, index, len) + @a = 0 + @b = 0 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + found = true + while true + # If we have looped around since the last found tag this one is + # unexpected, so discard it and continue. + if !found + wire_type = tag & 0x7 + + unknown_bytes = +"".b + val = tag + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + case wire_type + when 0 + i = 0 + while true + newbyte = buff.getbyte(index) + index += 1 + break if newbyte.nil? + unknown_bytes << newbyte + break if newbyte < 0x80 + i += 1 + break if i > 9 + end + when 1 + unknown_bytes << buff.byteslice(index, 8) + index += 8 + when 2 + value = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + val = value + while val != 0 + byte = val & 0x7F + + val >>= 7 + # This drops the top bits, + # Otherwise, with a signed right shift, + # we get infinity one bits at the top + val &= (1 << 57) - 1 + + byte |= 0x80 if val != 0 + unknown_bytes << byte + end + + unknown_bytes << buff.byteslice(index, value) + index += value + when 5 + unknown_bytes << buff.byteslice(index, 4) + index += 4 + else + raise "unknown wire type #{wire_type}" + end + (@_unknown_fields ||= +"".b) << unknown_bytes + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + found = false + + if tag == 0xf8 + found = true + ## PULL_UINT64 + @a = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + if tag == 0x120 + found = true + ## PULL_UINT64 + @b = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + + return self if index >= len + ## PULL_UINT64 + tag = + if (byte0 = buff.getbyte(index)) < 0x80 + index += 1 + byte0 + elsif (byte1 = buff.getbyte(index + 1)) < 0x80 + index += 2 + (byte1 << 7) | (byte0 & 0x7F) + elsif (byte2 = buff.getbyte(index + 2)) < 0x80 + index += 3 + (byte2 << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte3 = buff.getbyte(index + 3)) < 0x80 + index += 4 + (byte3 << 21) | ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | + (byte0 & 0x7F) + elsif (byte4 = buff.getbyte(index + 4)) < 0x80 + index += 5 + (byte4 << 28) | ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte5 = buff.getbyte(index + 5)) < 0x80 + index += 6 + (byte5 << 35) | ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte6 = buff.getbyte(index + 6)) < 0x80 + index += 7 + (byte6 << 42) | ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte7 = buff.getbyte(index + 7)) < 0x80 + index += 8 + (byte7 << 49) | ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte8 = buff.getbyte(index + 8)) < 0x80 + index += 9 + (byte8 << 56) | ((byte7 & 0x7F) << 49) | ((byte6 & 0x7F) << 42) | + ((byte5 & 0x7F) << 35) | ((byte4 & 0x7F) << 28) | + ((byte3 & 0x7F) << 21) | ((byte2 & 0x7F) << 14) | + ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + elsif (byte9 = buff.getbyte(index + 9)) < 0x80 + index += 10 + + (byte9 << 63) | ((byte8 & 0x7F) << 56) | ((byte7 & 0x7F) << 49) | + ((byte6 & 0x7F) << 42) | ((byte5 & 0x7F) << 35) | + ((byte4 & 0x7F) << 28) | ((byte3 & 0x7F) << 21) | + ((byte2 & 0x7F) << 14) | ((byte1 & 0x7F) << 7) | (byte0 & 0x7F) + else + raise "integer decoding error" + end + + ## END PULL_UINT64 + end + + return self if index >= len + end + end + def _encode(buff) + val = @a + if val != 0 + buff << 0xf8 + buff << 0x01 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + + val = @b + if val != 0 + buff << 0xa0 + buff << 0x02 + + while val != 0 + byte = val & 0x7F + val >>= 7 + byte |= 0x80 if val > 0 + buff << byte + end + end + buff << @_unknown_fields if @_unknown_fields + buff + end + + def to_h + result = {} + + result[:"a"] = @a + result[:"b"] = @b + + result + end + + def as_json(options = {}) + result = {} + + result["a"] = @a + result["b"] = @b + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end +end diff --git a/lib/protoboeuf/codegen.rb b/lib/protoboeuf/codegen.rb index 68416a7..eb44bfc 100644 --- a/lib/protoboeuf/codegen.rb +++ b/lib/protoboeuf/codegen.rb @@ -77,6 +77,139 @@ def resolve end end + # Generates #to_h, #as_json, and #to_json methods + class HashSerializationCompiler + include TypeHelper + + attr_reader :message, :fields, :oneof_selection_fields, :generate_types + + class << self + def result(message:, fields:, oneof_selection_fields:, generate_types:) + new(message:, fields:, oneof_selection_fields:, generate_types:).result + end + end + + def initialize(message:, fields:, oneof_selection_fields:, generate_types:) + @message = message + @fields = fields.sort_by(&:number) # Serialize fields in their proto order + @oneof_selection_fields = oneof_selection_fields + @generate_types = generate_types + end + + def result + <<~RUBY + #{type_signature(returns: "T::Hash[Symbol, T.untyped]")} + def to_h + result = {} + + #{fields.map { |f| to_h_assign_statement_rb(f) }.join("\n")} + + result + end + + #{type_signature(params: { options: "T::Hash[T.untyped, T.untyped]" }, returns: "T::Hash[Symbol, T.untyped]")} + def as_json(options = {}) + result = {} + + #{fields.map { |f| as_json_assign_statement_rb(f) }.join("\n")} + + result + end + + def to_json(options = {}) + require 'json' + JSON.dump(as_json(options)) + end + RUBY + end + + private + + def to_h_assign_statement_rb(field) + key = to_h_hash_key_rb(field) + value = to_h_hash_value_rb(field) + + if field.has_oneof_index? && !field.optional? + oneof_selection_field_name = oneof_selection_fields[field.oneof_index].name.dump + field_name = field.name.dump + + "result[#{key}] = #{value} if send(:#{oneof_selection_field_name}) == :#{field_name}" + else + "result[#{key}] = #{value}" + end + end + + def to_h_hash_key_rb(field) + ":#{field.name.dump}" + end + + def to_h_hash_value_rb(field) + return to_h_hash_value_for_map_rb(field) if field.map_field? + + # For primitives or arrays of primitives we can just use the instance variable value + return field.iv_name unless field.type == :TYPE_MESSAGE + + if field.repeated? + # repeated maps aren't possible so we don't have to worry about to_h arity or as_json not being defined + "#{field.iv_name}.map { |v| v.to_h }" + else + "#{field.iv_name}.to_h" + end + end + + def to_h_hash_value_for_map_rb(field) + if field.map_type.value.type == :TYPE_MESSAGE + "#{field.iv_name}.transform_values { |value| value.to_h }" + else + field.iv_name + end + end + + def as_json_assign_statement_rb(field) + key = as_json_hash_key_rb(field) + value = as_json_hash_value_rb(field) + + if field.has_oneof_index? && !field.optional? + oneof_selection_field_name = oneof_selection_fields[field.oneof_index].name.dump + field_name = field.name.dump + + "result[#{key}] = #{value} if send(:#{oneof_selection_field_name}) == :#{field_name}" + elsif field.repeated? + "#{value}.tap { |v| result[#{key}] = v if !options[:compact] || v.any? }" + elsif field.optional? + "result[#{key}] = #{value} if !options[:compact] || has_#{field.name}?" + else + "result[#{key}] = #{value}" + end + end + + def as_json_hash_key_rb(field) + field.json_name.dump + end + + def as_json_hash_value_rb(field) + return as_json_hash_value_for_map_rb(field) if field.map_field? + + # For primitives or arrays of primitives we can just use the instance variable value + return field.iv_name unless field.type == :TYPE_MESSAGE + + if field.repeated? + # repeated maps aren't possible so we don't have to worry about to_h arity or as_json not being defined + "#{field.iv_name}.map { |v| v.as_json(options) }" + else + "#{field.iv_name}.nil? ? {} : #{field.iv_name}.as_json(options)" + end + end + + def as_json_hash_value_for_map_rb(field) + if field.map_type.value.type == :TYPE_MESSAGE + "#{field.iv_name}.transform_values { |value| value.as_json(options) }" + else + field.iv_name + end + end + end + class MessageCompiler attr_reader :generate_types, :requires @@ -88,8 +221,13 @@ def result(message, toplevel_enums, generate_types:, requires:, syntax:, options end end - attr_reader :message, :fields, :oneof_fields, :syntax - attr_reader :optional_fields, :enum_field_types + attr_reader :message, + :fields, + :oneof_fields, + :syntax, + :optional_fields, + :enum_field_types, + :oneof_selection_fields def initialize(message, toplevel_enums, generate_types:, requires:, syntax:, options:) @message = message @@ -160,32 +298,7 @@ def class_body end def conversion - fields = self.fields.reject do |field| - field.has_oneof_index? && !field.optional? - end - - oneofs = @oneof_selection_fields.map do |field| - "send(#{field.name.dump}).tap { |f| result[f.to_sym] = send(f) if f }" - end - - <<~RUBY - #{type_signature(returns: "T::Hash[Symbol, T.untyped]")} - def to_h - result = {} - #{(oneofs + fields.map { |field| convert_field(field) }).join("\n")} - result - end - RUBY - end - - def convert_field(field) - if field.repeated? - "result['#{field.name}'.to_sym] = #{field.iv_name}" - elsif field.type == :TYPE_MESSAGE - "result['#{field.name}'.to_sym] = #{field.iv_name}.to_h" - else - "result['#{field.name}'.to_sym] = #{field.iv_name}" - end + HashSerializationCompiler.result(message:, fields:, oneof_selection_fields:, generate_types:) end def encode diff --git a/lib/protoboeuf/decorated_field.rb b/lib/protoboeuf/decorated_field.rb index ac916dc..7f28298 100644 --- a/lib/protoboeuf/decorated_field.rb +++ b/lib/protoboeuf/decorated_field.rb @@ -8,7 +8,16 @@ class DecoratedField extend Forwardable - def_delegators :@original_field, :name, :label, :type_name, :type, :number, :options, :oneof_index, :has_oneof_index? + def_delegators :@original_field, + :name, + :label, + :type_name, + :type, + :number, + :options, + :oneof_index, + :has_oneof_index?, + :json_name def initialize(field:, message:, syntax:) @original_field = field diff --git a/lib/protoboeuf/google/protobuf/any.rb b/lib/protoboeuf/google/protobuf/any.rb index 5977153..9323836 100644 --- a/lib/protoboeuf/google/protobuf/any.rb +++ b/lib/protoboeuf/google/protobuf/any.rb @@ -553,10 +553,26 @@ def _encode(buff) def to_h result = {} - result["type_url".to_sym] = @type_url - result["value".to_sym] = @value + + result[:"type_url"] = @type_url + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["typeUrl"] = @type_url + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/boolvalue.rb b/lib/protoboeuf/google/protobuf/boolvalue.rb index ed3424c..774a5b0 100644 --- a/lib/protoboeuf/google/protobuf/boolvalue.rb +++ b/lib/protoboeuf/google/protobuf/boolvalue.rb @@ -349,9 +349,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/bytesvalue.rb b/lib/protoboeuf/google/protobuf/bytesvalue.rb index 05905a2..877eb7a 100644 --- a/lib/protoboeuf/google/protobuf/bytesvalue.rb +++ b/lib/protoboeuf/google/protobuf/bytesvalue.rb @@ -408,9 +408,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/descriptor.rb b/lib/protoboeuf/google/protobuf/descriptor.rb index af152fe..cf1bdc8 100644 --- a/lib/protoboeuf/google/protobuf/descriptor.rb +++ b/lib/protoboeuf/google/protobuf/descriptor.rb @@ -512,9 +512,26 @@ def _encode(buff) def to_h result = {} - result["file".to_sym] = @file + + result[:"file"] = @file.map { |v| v.to_h } + result end + + def as_json(options = {}) + result = {} + + @file + .map { |v| v.as_json(options) } + .tap { |v| result["file"] = v if !options[:compact] || v.any? } + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FileDescriptorProto def self.decode(buff) @@ -3357,21 +3374,76 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["package".to_sym] = @package - result["dependency".to_sym] = @dependency - result["public_dependency".to_sym] = @public_dependency - result["weak_dependency".to_sym] = @weak_dependency - result["message_type".to_sym] = @message_type - result["enum_type".to_sym] = @enum_type - result["service".to_sym] = @service - result["extension".to_sym] = @extension - result["options".to_sym] = @options.to_h - result["source_code_info".to_sym] = @source_code_info.to_h - result["syntax".to_sym] = @syntax - result["edition".to_sym] = @edition + + result[:"name"] = @name + result[:"package"] = @package + result[:"dependency"] = @dependency + result[:"message_type"] = @message_type.map { |v| v.to_h } + result[:"enum_type"] = @enum_type.map { |v| v.to_h } + result[:"service"] = @service.map { |v| v.to_h } + result[:"extension"] = @extension.map { |v| v.to_h } + result[:"options"] = @options.to_h + result[:"source_code_info"] = @source_code_info.to_h + result[:"public_dependency"] = @public_dependency + result[:"weak_dependency"] = @weak_dependency + result[:"syntax"] = @syntax + result[:"edition"] = @edition + + result + end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + result["package"] = @package if !options[:compact] || has_package? + @dependency.tap do |v| + result["dependency"] = v if !options[:compact] || v.any? + end + @message_type + .map { |v| v.as_json(options) } + .tap do |v| + result["messageType"] = v if !options[:compact] || v.any? + end + @enum_type + .map { |v| v.as_json(options) } + .tap { |v| result["enumType"] = v if !options[:compact] || v.any? } + @service + .map { |v| v.as_json(options) } + .tap { |v| result["service"] = v if !options[:compact] || v.any? } + @extension + .map { |v| v.as_json(options) } + .tap { |v| result["extension"] = v if !options[:compact] || v.any? } + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + result["sourceCodeInfo"] = ( + if @source_code_info.nil? + {} + else + @source_code_info.as_json(options) + end + ) if !options[:compact] || has_source_code_info? + @public_dependency.tap do |v| + result["publicDependency"] = v if !options[:compact] || v.any? + end + @weak_dependency.tap do |v| + result["weakDependency"] = v if !options[:compact] || v.any? + end + result["syntax"] = @syntax if !options[:compact] || has_syntax? + result["edition"] = @edition if !options[:compact] || has_edition? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class DescriptorProto def self.decode(buff) @@ -4205,11 +4277,34 @@ def _encode(buff) def to_h result = {} - result["start".to_sym] = @start - result["end".to_sym] = @end - result["options".to_sym] = @options.to_h + + result[:"start"] = @start + result[:"end"] = @end + result[:"options"] = @options.to_h + result end + + def as_json(options = {}) + result = {} + + result["start"] = @start if !options[:compact] || has_start? + result["end"] = @end if !options[:compact] || has_end? + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class ReservedRange @@ -4840,10 +4935,26 @@ def _encode(buff) def to_h result = {} - result["start".to_sym] = @start - result["end".to_sym] = @end + + result[:"start"] = @start + result[:"end"] = @end + + result + end + + def as_json(options = {}) + result = {} + + result["start"] = @start if !options[:compact] || has_start? + result["end"] = @end if !options[:compact] || has_end? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -7055,18 +7166,70 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["field".to_sym] = @field - result["extension".to_sym] = @extension - result["nested_type".to_sym] = @nested_type - result["enum_type".to_sym] = @enum_type - result["extension_range".to_sym] = @extension_range - result["oneof_decl".to_sym] = @oneof_decl - result["options".to_sym] = @options.to_h - result["reserved_range".to_sym] = @reserved_range - result["reserved_name".to_sym] = @reserved_name + + result[:"name"] = @name + result[:"field"] = @field.map { |v| v.to_h } + result[:"nested_type"] = @nested_type.map { |v| v.to_h } + result[:"enum_type"] = @enum_type.map { |v| v.to_h } + result[:"extension_range"] = @extension_range.map { |v| v.to_h } + result[:"extension"] = @extension.map { |v| v.to_h } + result[:"options"] = @options.to_h + result[:"oneof_decl"] = @oneof_decl.map { |v| v.to_h } + result[:"reserved_range"] = @reserved_range.map { |v| v.to_h } + result[:"reserved_name"] = @reserved_name + + result + end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + @field + .map { |v| v.as_json(options) } + .tap { |v| result["field"] = v if !options[:compact] || v.any? } + @nested_type + .map { |v| v.as_json(options) } + .tap do |v| + result["nestedType"] = v if !options[:compact] || v.any? + end + @enum_type + .map { |v| v.as_json(options) } + .tap { |v| result["enumType"] = v if !options[:compact] || v.any? } + @extension_range + .map { |v| v.as_json(options) } + .tap do |v| + result["extensionRange"] = v if !options[:compact] || v.any? + end + @extension + .map { |v| v.as_json(options) } + .tap { |v| result["extension"] = v if !options[:compact] || v.any? } + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + @oneof_decl + .map { |v| v.as_json(options) } + .tap { |v| result["oneofDecl"] = v if !options[:compact] || v.any? } + @reserved_range + .map { |v| v.as_json(options) } + .tap do |v| + result["reservedRange"] = v if !options[:compact] || v.any? + end + @reserved_name.tap do |v| + result["reservedName"] = v if !options[:compact] || v.any? + end + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class ExtensionRangeOptions def self.decode(buff) @@ -8038,13 +8201,35 @@ def _encode(buff) def to_h result = {} - result["number".to_sym] = @number - result["full_name".to_sym] = @full_name - result["type".to_sym] = @type - result["reserved".to_sym] = @reserved - result["repeated".to_sym] = @repeated + + result[:"number"] = @number + result[:"full_name"] = @full_name + result[:"type"] = @type + result[:"reserved"] = @reserved + result[:"repeated"] = @repeated + + result + end + + def as_json(options = {}) + result = {} + + result["number"] = @number if !options[:compact] || has_number? + result["fullName"] = @full_name if !options[:compact] || + has_full_name? + result["type"] = @type if !options[:compact] || has_type? + result["reserved"] = @reserved if !options[:compact] || + has_reserved? + result["repeated"] = @repeated if !options[:compact] || + has_repeated? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end module VerificationState DECLARATION = 0 @@ -9104,12 +9289,47 @@ def _encode(buff) def to_h result = {} - result["uninterpreted_option".to_sym] = @uninterpreted_option - result["declaration".to_sym] = @declaration - result["features".to_sym] = @features.to_h - result["verification".to_sym] = @verification + + result[:"declaration"] = @declaration.map { |v| v.to_h } + result[:"verification"] = @verification + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + @declaration + .map { |v| v.as_json(options) } + .tap do |v| + result["declaration"] = v if !options[:compact] || v.any? + end + result["verification"] = @verification if !options[:compact] || + has_verification? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FieldDescriptorProto def self.decode(buff) @@ -11243,19 +11463,55 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["number".to_sym] = @number - result["label".to_sym] = @label - result["type".to_sym] = @type - result["type_name".to_sym] = @type_name - result["extendee".to_sym] = @extendee - result["default_value".to_sym] = @default_value - result["oneof_index".to_sym] = @oneof_index - result["json_name".to_sym] = @json_name - result["options".to_sym] = @options.to_h - result["proto3_optional".to_sym] = @proto3_optional + + result[:"name"] = @name + result[:"extendee"] = @extendee + result[:"number"] = @number + result[:"label"] = @label + result[:"type"] = @type + result[:"type_name"] = @type_name + result[:"default_value"] = @default_value + result[:"options"] = @options.to_h + result[:"oneof_index"] = @oneof_index + result[:"json_name"] = @json_name + result[:"proto3_optional"] = @proto3_optional + result end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + result["extendee"] = @extendee if !options[:compact] || has_extendee? + result["number"] = @number if !options[:compact] || has_number? + result["label"] = @label if !options[:compact] || has_label? + result["type"] = @type if !options[:compact] || has_type? + result["typeName"] = @type_name if !options[:compact] || + has_type_name? + result["defaultValue"] = @default_value if !options[:compact] || + has_default_value? + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + result["oneofIndex"] = @oneof_index if !options[:compact] || + has_oneof_index? + result["jsonName"] = @json_name if !options[:compact] || + has_json_name? + result["proto3Optional"] = @proto3_optional if !options[:compact] || + has_proto3_optional? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class OneofDescriptorProto def self.decode(buff) @@ -11876,10 +12132,32 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["options".to_sym] = @options.to_h + + result[:"name"] = @name + result[:"options"] = @options.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class EnumDescriptorProto def self.decode(buff) @@ -12517,10 +12795,26 @@ def _encode(buff) def to_h result = {} - result["start".to_sym] = @start - result["end".to_sym] = @end + + result[:"start"] = @start + result[:"end"] = @end + + result + end + + def as_json(options = {}) + result = {} + + result["start"] = @start if !options[:compact] || has_start? + result["end"] = @end if !options[:compact] || has_end? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -13707,13 +14001,46 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["value".to_sym] = @value - result["options".to_sym] = @options.to_h - result["reserved_range".to_sym] = @reserved_range - result["reserved_name".to_sym] = @reserved_name + + result[:"name"] = @name + result[:"value"] = @value.map { |v| v.to_h } + result[:"options"] = @options.to_h + result[:"reserved_range"] = @reserved_range.map { |v| v.to_h } + result[:"reserved_name"] = @reserved_name + result end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + @value + .map { |v| v.as_json(options) } + .tap { |v| result["value"] = v if !options[:compact] || v.any? } + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + @reserved_range + .map { |v| v.as_json(options) } + .tap do |v| + result["reservedRange"] = v if !options[:compact] || v.any? + end + @reserved_name.tap do |v| + result["reservedName"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class EnumValueDescriptorProto def self.decode(buff) @@ -14511,11 +14838,34 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["number".to_sym] = @number - result["options".to_sym] = @options.to_h + + result[:"name"] = @name + result[:"number"] = @number + result[:"options"] = @options.to_h + result end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + result["number"] = @number if !options[:compact] || has_number? + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class ServiceDescriptorProto def self.decode(buff) @@ -15340,11 +15690,36 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["method".to_sym] = @method - result["options".to_sym] = @options.to_h + + result[:"name"] = @name + result[:"method"] = @method.map { |v| v.to_h } + result[:"options"] = @options.to_h + + result + end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + @method + .map { |v| v.as_json(options) } + .tap { |v| result["method"] = v if !options[:compact] || v.any? } + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class MethodDescriptorProto def self.decode(buff) @@ -16478,14 +16853,44 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["input_type".to_sym] = @input_type - result["output_type".to_sym] = @output_type - result["options".to_sym] = @options.to_h - result["client_streaming".to_sym] = @client_streaming - result["server_streaming".to_sym] = @server_streaming + + result[:"name"] = @name + result[:"input_type"] = @input_type + result[:"output_type"] = @output_type + result[:"options"] = @options.to_h + result[:"client_streaming"] = @client_streaming + result[:"server_streaming"] = @server_streaming + + result + end + + def as_json(options = {}) + result = {} + + result["name"] = @name if !options[:compact] || has_name? + result["inputType"] = @input_type if !options[:compact] || + has_input_type? + result["outputType"] = @output_type if !options[:compact] || + has_output_type? + result["options"] = ( + if @options.nil? + {} + else + @options.as_json(options) + end + ) if !options[:compact] || has_options? + result["clientStreaming"] = @client_streaming if !options[:compact] || + has_client_streaming? + result["serverStreaming"] = @server_streaming if !options[:compact] || + has_server_streaming? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FileOptions def self.decode(buff) @@ -19719,31 +20124,107 @@ def _encode(buff) def to_h result = {} - result["java_package".to_sym] = @java_package - result["java_outer_classname".to_sym] = @java_outer_classname - result["java_multiple_files".to_sym] = @java_multiple_files + + result[:"java_package"] = @java_package + result[:"java_outer_classname"] = @java_outer_classname + result[:"optimize_for"] = @optimize_for + result[:"java_multiple_files"] = @java_multiple_files + result[:"go_package"] = @go_package + result[:"cc_generic_services"] = @cc_generic_services + result[:"java_generic_services"] = @java_generic_services + result[:"py_generic_services"] = @py_generic_services result[ - "java_generate_equals_and_hash".to_sym + :"java_generate_equals_and_hash" ] = @java_generate_equals_and_hash - result["java_string_check_utf8".to_sym] = @java_string_check_utf8 - result["optimize_for".to_sym] = @optimize_for - result["go_package".to_sym] = @go_package - result["cc_generic_services".to_sym] = @cc_generic_services - result["java_generic_services".to_sym] = @java_generic_services - result["py_generic_services".to_sym] = @py_generic_services - result["deprecated".to_sym] = @deprecated - result["cc_enable_arenas".to_sym] = @cc_enable_arenas - result["objc_class_prefix".to_sym] = @objc_class_prefix - result["csharp_namespace".to_sym] = @csharp_namespace - result["swift_prefix".to_sym] = @swift_prefix - result["php_class_prefix".to_sym] = @php_class_prefix - result["php_namespace".to_sym] = @php_namespace - result["php_metadata_namespace".to_sym] = @php_metadata_namespace - result["ruby_package".to_sym] = @ruby_package - result["features".to_sym] = @features.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + result[:"deprecated"] = @deprecated + result[:"java_string_check_utf8"] = @java_string_check_utf8 + result[:"cc_enable_arenas"] = @cc_enable_arenas + result[:"objc_class_prefix"] = @objc_class_prefix + result[:"csharp_namespace"] = @csharp_namespace + result[:"swift_prefix"] = @swift_prefix + result[:"php_class_prefix"] = @php_class_prefix + result[:"php_namespace"] = @php_namespace + result[:"php_metadata_namespace"] = @php_metadata_namespace + result[:"ruby_package"] = @ruby_package + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["javaPackage"] = @java_package if !options[:compact] || + has_java_package? + result["javaOuterClassname"] = @java_outer_classname if !options[ + :compact + ] || has_java_outer_classname? + result["optimizeFor"] = @optimize_for if !options[:compact] || + has_optimize_for? + result["javaMultipleFiles"] = @java_multiple_files if !options[ + :compact + ] || has_java_multiple_files? + result["goPackage"] = @go_package if !options[:compact] || + has_go_package? + result["ccGenericServices"] = @cc_generic_services if !options[ + :compact + ] || has_cc_generic_services? + result["javaGenericServices"] = @java_generic_services if !options[ + :compact + ] || has_java_generic_services? + result["pyGenericServices"] = @py_generic_services if !options[ + :compact + ] || has_py_generic_services? + result[ + "javaGenerateEqualsAndHash" + ] = @java_generate_equals_and_hash if !options[:compact] || + has_java_generate_equals_and_hash? + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["javaStringCheckUtf8"] = @java_string_check_utf8 if !options[ + :compact + ] || has_java_string_check_utf8? + result["ccEnableArenas"] = @cc_enable_arenas if !options[:compact] || + has_cc_enable_arenas? + result["objcClassPrefix"] = @objc_class_prefix if !options[ + :compact + ] || has_objc_class_prefix? + result["csharpNamespace"] = @csharp_namespace if !options[:compact] || + has_csharp_namespace? + result["swiftPrefix"] = @swift_prefix if !options[:compact] || + has_swift_prefix? + result["phpClassPrefix"] = @php_class_prefix if !options[:compact] || + has_php_class_prefix? + result["phpNamespace"] = @php_namespace if !options[:compact] || + has_php_namespace? + result["phpMetadataNamespace"] = @php_metadata_namespace if !options[ + :compact + ] || has_php_metadata_namespace? + result["rubyPackage"] = @ruby_package if !options[:compact] || + has_ruby_package? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class MessageOptions def self.decode(buff) @@ -20908,19 +21389,62 @@ def _encode(buff) def to_h result = {} - result["message_set_wire_format".to_sym] = @message_set_wire_format + + result[:"message_set_wire_format"] = @message_set_wire_format result[ - "no_standard_descriptor_accessor".to_sym + :"no_standard_descriptor_accessor" ] = @no_standard_descriptor_accessor - result["deprecated".to_sym] = @deprecated - result["map_entry".to_sym] = @map_entry + result[:"deprecated"] = @deprecated + result[:"map_entry"] = @map_entry result[ - "deprecated_legacy_json_field_conflicts".to_sym + :"deprecated_legacy_json_field_conflicts" ] = @deprecated_legacy_json_field_conflicts - result["features".to_sym] = @features.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["messageSetWireFormat"] = @message_set_wire_format if !options[ + :compact + ] || has_message_set_wire_format? + result[ + "noStandardDescriptorAccessor" + ] = @no_standard_descriptor_accessor if !options[:compact] || + has_no_standard_descriptor_accessor? + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["mapEntry"] = @map_entry if !options[:compact] || + has_map_entry? + result[ + "deprecatedLegacyJsonFieldConflicts" + ] = @deprecated_legacy_json_field_conflicts if !options[:compact] || + has_deprecated_legacy_json_field_conflicts? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FieldOptions def self.decode(buff) @@ -21527,10 +22051,26 @@ def _encode(buff) def to_h result = {} - result["edition".to_sym] = @edition - result["value".to_sym] = @value + + result[:"value"] = @value + result[:"edition"] = @edition + result end + + def as_json(options = {}) + result = {} + + result["value"] = @value if !options[:compact] || has_value? + result["edition"] = @edition if !options[:compact] || has_edition? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FeatureSupport @@ -22476,12 +23016,37 @@ def _encode(buff) def to_h result = {} - result["edition_introduced".to_sym] = @edition_introduced - result["edition_deprecated".to_sym] = @edition_deprecated - result["deprecation_warning".to_sym] = @deprecation_warning - result["edition_removed".to_sym] = @edition_removed + + result[:"edition_introduced"] = @edition_introduced + result[:"edition_deprecated"] = @edition_deprecated + result[:"deprecation_warning"] = @deprecation_warning + result[:"edition_removed"] = @edition_removed + + result + end + + def as_json(options = {}) + result = {} + + result["editionIntroduced"] = @edition_introduced if !options[ + :compact + ] || has_edition_introduced? + result["editionDeprecated"] = @edition_deprecated if !options[ + :compact + ] || has_edition_deprecated? + result["deprecationWarning"] = @deprecation_warning if !options[ + :compact + ] || has_deprecation_warning? + result["editionRemoved"] = @edition_removed if !options[:compact] || + has_edition_removed? + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end module CType STRING = 0 @@ -24927,22 +25492,78 @@ def _encode(buff) def to_h result = {} - result["ctype".to_sym] = @ctype - result["packed".to_sym] = @packed - result["jstype".to_sym] = @jstype - result["lazy".to_sym] = @lazy - result["unverified_lazy".to_sym] = @unverified_lazy - result["deprecated".to_sym] = @deprecated - result["weak".to_sym] = @weak - result["debug_redact".to_sym] = @debug_redact - result["retention".to_sym] = @retention - result["targets".to_sym] = @targets - result["edition_defaults".to_sym] = @edition_defaults - result["features".to_sym] = @features.to_h - result["feature_support".to_sym] = @feature_support.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + + result[:"ctype"] = @ctype + result[:"packed"] = @packed + result[:"deprecated"] = @deprecated + result[:"lazy"] = @lazy + result[:"jstype"] = @jstype + result[:"weak"] = @weak + result[:"unverified_lazy"] = @unverified_lazy + result[:"debug_redact"] = @debug_redact + result[:"retention"] = @retention + result[:"targets"] = @targets + result[:"edition_defaults"] = @edition_defaults.map { |v| v.to_h } + result[:"features"] = @features.to_h + result[:"feature_support"] = @feature_support.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["ctype"] = @ctype if !options[:compact] || has_ctype? + result["packed"] = @packed if !options[:compact] || has_packed? + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["lazy"] = @lazy if !options[:compact] || has_lazy? + result["jstype"] = @jstype if !options[:compact] || has_jstype? + result["weak"] = @weak if !options[:compact] || has_weak? + result["unverifiedLazy"] = @unverified_lazy if !options[:compact] || + has_unverified_lazy? + result["debugRedact"] = @debug_redact if !options[:compact] || + has_debug_redact? + result["retention"] = @retention if !options[:compact] || + has_retention? + @targets.tap do |v| + result["targets"] = v if !options[:compact] || v.any? + end + @edition_defaults + .map { |v| v.as_json(options) } + .tap do |v| + result["editionDefaults"] = v if !options[:compact] || v.any? + end + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + result["featureSupport"] = ( + if @feature_support.nil? + {} + else + @feature_support.as_json(options) + end + ) if !options[:compact] || has_feature_support? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class OneofOptions def self.decode(buff) @@ -25612,10 +26233,38 @@ def _encode(buff) def to_h result = {} - result["features".to_sym] = @features.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class EnumOptions def self.decode(buff) @@ -26584,15 +27233,51 @@ def _encode(buff) def to_h result = {} - result["allow_alias".to_sym] = @allow_alias - result["deprecated".to_sym] = @deprecated + + result[:"allow_alias"] = @allow_alias + result[:"deprecated"] = @deprecated result[ - "deprecated_legacy_json_field_conflicts".to_sym + :"deprecated_legacy_json_field_conflicts" ] = @deprecated_legacy_json_field_conflicts - result["features".to_sym] = @features.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["allowAlias"] = @allow_alias if !options[:compact] || + has_allow_alias? + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result[ + "deprecatedLegacyJsonFieldConflicts" + ] = @deprecated_legacy_json_field_conflicts if !options[:compact] || + has_deprecated_legacy_json_field_conflicts? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class EnumValueOptions def self.decode(buff) @@ -27658,13 +28343,52 @@ def _encode(buff) def to_h result = {} - result["deprecated".to_sym] = @deprecated - result["features".to_sym] = @features.to_h - result["debug_redact".to_sym] = @debug_redact - result["feature_support".to_sym] = @feature_support.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + + result[:"deprecated"] = @deprecated + result[:"features"] = @features.to_h + result[:"debug_redact"] = @debug_redact + result[:"feature_support"] = @feature_support.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + + result + end + + def as_json(options = {}) + result = {} + + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + result["debugRedact"] = @debug_redact if !options[:compact] || + has_debug_redact? + result["featureSupport"] = ( + if @feature_support.nil? + {} + else + @feature_support.as_json(options) + end + ) if !options[:compact] || has_feature_support? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class ServiceOptions def self.decode(buff) @@ -28433,11 +29157,41 @@ def _encode(buff) def to_h result = {} - result["features".to_sym] = @features.to_h - result["deprecated".to_sym] = @deprecated - result["uninterpreted_option".to_sym] = @uninterpreted_option + + result[:"deprecated"] = @deprecated + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + + result + end + + def as_json(options = {}) + result = {} + + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class MethodOptions def self.decode(buff) @@ -29403,12 +30157,45 @@ def _encode(buff) def to_h result = {} - result["deprecated".to_sym] = @deprecated - result["idempotency_level".to_sym] = @idempotency_level - result["features".to_sym] = @features.to_h - result["uninterpreted_option".to_sym] = @uninterpreted_option + + result[:"deprecated"] = @deprecated + result[:"idempotency_level"] = @idempotency_level + result[:"features"] = @features.to_h + result[:"uninterpreted_option"] = @uninterpreted_option.map do |v| + v.to_h + end + result end + + def as_json(options = {}) + result = {} + + result["deprecated"] = @deprecated if !options[:compact] || + has_deprecated? + result["idempotencyLevel"] = @idempotency_level if !options[ + :compact + ] || has_idempotency_level? + result["features"] = ( + if @features.nil? + {} + else + @features.as_json(options) + end + ) if !options[:compact] || has_features? + @uninterpreted_option + .map { |v| v.as_json(options) } + .tap do |v| + result["uninterpretedOption"] = v if !options[:compact] || v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class UninterpretedOption def self.decode(buff) @@ -29913,10 +30700,26 @@ def _encode(buff) def to_h result = {} - result["name_part".to_sym] = @name_part - result["is_extension".to_sym] = @is_extension + + result[:"name_part"] = @name_part + result[:"is_extension"] = @is_extension + result end + + def as_json(options = {}) + result = {} + + result["namePart"] = @name_part + result["isExtension"] = @is_extension + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -31287,15 +32090,46 @@ def _encode(buff) def to_h result = {} - result["name".to_sym] = @name - result["identifier_value".to_sym] = @identifier_value - result["positive_int_value".to_sym] = @positive_int_value - result["negative_int_value".to_sym] = @negative_int_value - result["double_value".to_sym] = @double_value - result["string_value".to_sym] = @string_value - result["aggregate_value".to_sym] = @aggregate_value + + result[:"name"] = @name.map { |v| v.to_h } + result[:"identifier_value"] = @identifier_value + result[:"positive_int_value"] = @positive_int_value + result[:"negative_int_value"] = @negative_int_value + result[:"double_value"] = @double_value + result[:"string_value"] = @string_value + result[:"aggregate_value"] = @aggregate_value + result end + + def as_json(options = {}) + result = {} + + @name + .map { |v| v.as_json(options) } + .tap { |v| result["name"] = v if !options[:compact] || v.any? } + result["identifierValue"] = @identifier_value if !options[:compact] || + has_identifier_value? + result["positiveIntValue"] = @positive_int_value if !options[ + :compact + ] || has_positive_int_value? + result["negativeIntValue"] = @negative_int_value if !options[ + :compact + ] || has_negative_int_value? + result["doubleValue"] = @double_value if !options[:compact] || + has_double_value? + result["stringValue"] = @string_value if !options[:compact] || + has_string_value? + result["aggregateValue"] = @aggregate_value if !options[:compact] || + has_aggregate_value? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FeatureSet def self.decode(buff) @@ -32698,14 +33532,42 @@ def _encode(buff) def to_h result = {} - result["field_presence".to_sym] = @field_presence - result["enum_type".to_sym] = @enum_type - result["repeated_field_encoding".to_sym] = @repeated_field_encoding - result["utf8_validation".to_sym] = @utf8_validation - result["message_encoding".to_sym] = @message_encoding - result["json_format".to_sym] = @json_format + + result[:"field_presence"] = @field_presence + result[:"enum_type"] = @enum_type + result[:"repeated_field_encoding"] = @repeated_field_encoding + result[:"utf8_validation"] = @utf8_validation + result[:"message_encoding"] = @message_encoding + result[:"json_format"] = @json_format + result end + + def as_json(options = {}) + result = {} + + result["fieldPresence"] = @field_presence if !options[:compact] || + has_field_presence? + result["enumType"] = @enum_type if !options[:compact] || + has_enum_type? + result[ + "repeatedFieldEncoding" + ] = @repeated_field_encoding if !options[:compact] || + has_repeated_field_encoding? + result["utf8Validation"] = @utf8_validation if !options[:compact] || + has_utf8_validation? + result["messageEncoding"] = @message_encoding if !options[:compact] || + has_message_encoding? + result["jsonFormat"] = @json_format if !options[:compact] || + has_json_format? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class FeatureSetDefaults def self.decode(buff) @@ -33552,11 +34414,40 @@ def _encode(buff) def to_h result = {} - result["edition".to_sym] = @edition - result["overridable_features".to_sym] = @overridable_features.to_h - result["fixed_features".to_sym] = @fixed_features.to_h + + result[:"edition"] = @edition + result[:"overridable_features"] = @overridable_features.to_h + result[:"fixed_features"] = @fixed_features.to_h + result end + + def as_json(options = {}) + result = {} + + result["edition"] = @edition if !options[:compact] || has_edition? + result["overridableFeatures"] = ( + if @overridable_features.nil? + {} + else + @overridable_features.as_json(options) + end + ) if !options[:compact] || has_overridable_features? + result["fixedFeatures"] = ( + if @fixed_features.nil? + {} + else + @fixed_features.as_json(options) + end + ) if !options[:compact] || has_fixed_features? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -34352,11 +35243,32 @@ def _encode(buff) def to_h result = {} - result["defaults".to_sym] = @defaults - result["minimum_edition".to_sym] = @minimum_edition - result["maximum_edition".to_sym] = @maximum_edition + + result[:"defaults"] = @defaults.map { |v| v.to_h } + result[:"minimum_edition"] = @minimum_edition + result[:"maximum_edition"] = @maximum_edition + result end + + def as_json(options = {}) + result = {} + + @defaults + .map { |v| v.as_json(options) } + .tap { |v| result["defaults"] = v if !options[:compact] || v.any? } + result["minimumEdition"] = @minimum_edition if !options[:compact] || + has_minimum_edition? + result["maximumEdition"] = @maximum_edition if !options[:compact] || + has_maximum_edition? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class SourceCodeInfo def self.decode(buff) @@ -35673,15 +36585,39 @@ def _encode(buff) def to_h result = {} - result["path".to_sym] = @path - result["span".to_sym] = @span - result["leading_comments".to_sym] = @leading_comments - result["trailing_comments".to_sym] = @trailing_comments - result[ - "leading_detached_comments".to_sym - ] = @leading_detached_comments + + result[:"path"] = @path + result[:"span"] = @span + result[:"leading_comments"] = @leading_comments + result[:"trailing_comments"] = @trailing_comments + result[:"leading_detached_comments"] = @leading_detached_comments + result end + + def as_json(options = {}) + result = {} + + @path.tap { |v| result["path"] = v if !options[:compact] || v.any? } + @span.tap { |v| result["span"] = v if !options[:compact] || v.any? } + result["leadingComments"] = @leading_comments if !options[ + :compact + ] || has_leading_comments? + result["trailingComments"] = @trailing_comments if !options[ + :compact + ] || has_trailing_comments? + @leading_detached_comments.tap do |v| + result["leadingDetachedComments"] = v if !options[:compact] || + v.any? + end + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -36137,9 +37073,26 @@ def _encode(buff) def to_h result = {} - result["location".to_sym] = @location + + result[:"location"] = @location.map { |v| v.to_h } + + result + end + + def as_json(options = {}) + result = {} + + @location + .map { |v| v.as_json(options) } + .tap { |v| result["location"] = v if !options[:compact] || v.any? } + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class GeneratedCodeInfo def self.decode(buff) @@ -37409,13 +38362,34 @@ def _encode(buff) def to_h result = {} - result["path".to_sym] = @path - result["source_file".to_sym] = @source_file - result["begin".to_sym] = @begin - result["end".to_sym] = @end - result["semantic".to_sym] = @semantic + + result[:"path"] = @path + result[:"source_file"] = @source_file + result[:"begin"] = @begin + result[:"end"] = @end + result[:"semantic"] = @semantic + result end + + def as_json(options = {}) + result = {} + + @path.tap { |v| result["path"] = v if !options[:compact] || v.any? } + result["sourceFile"] = @source_file if !options[:compact] || + has_source_file? + result["begin"] = @begin if !options[:compact] || has_begin? + result["end"] = @end if !options[:compact] || has_end? + result["semantic"] = @semantic if !options[:compact] || + has_semantic? + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end # required field readers @@ -37871,9 +38845,28 @@ def _encode(buff) def to_h result = {} - result["annotation".to_sym] = @annotation + + result[:"annotation"] = @annotation.map { |v| v.to_h } + + result + end + + def as_json(options = {}) + result = {} + + @annotation + .map { |v| v.as_json(options) } + .tap do |v| + result["annotation"] = v if !options[:compact] || v.any? + end + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/doublevalue.rb b/lib/protoboeuf/google/protobuf/doublevalue.rb index 7bd516a..5b37122 100644 --- a/lib/protoboeuf/google/protobuf/doublevalue.rb +++ b/lib/protoboeuf/google/protobuf/doublevalue.rb @@ -343,9 +343,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/duration.rb b/lib/protoboeuf/google/protobuf/duration.rb index c8848e9..f484cb7 100644 --- a/lib/protoboeuf/google/protobuf/duration.rb +++ b/lib/protoboeuf/google/protobuf/duration.rb @@ -597,10 +597,26 @@ def _encode(buff) def to_h result = {} - result["seconds".to_sym] = @seconds - result["nanos".to_sym] = @nanos + + result[:"seconds"] = @seconds + result[:"nanos"] = @nanos + + result + end + + def as_json(options = {}) + result = {} + + result["seconds"] = @seconds + result["nanos"] = @nanos + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/field_mask.rb b/lib/protoboeuf/google/protobuf/field_mask.rb index a63d3af..f90cb78 100644 --- a/lib/protoboeuf/google/protobuf/field_mask.rb +++ b/lib/protoboeuf/google/protobuf/field_mask.rb @@ -423,9 +423,24 @@ def _encode(buff) def to_h result = {} - result["paths".to_sym] = @paths + + result[:"paths"] = @paths + + result + end + + def as_json(options = {}) + result = {} + + @paths.tap { |v| result["paths"] = v if !options[:compact] || v.any? } + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/floatvalue.rb b/lib/protoboeuf/google/protobuf/floatvalue.rb index 395f0f3..cc092af 100644 --- a/lib/protoboeuf/google/protobuf/floatvalue.rb +++ b/lib/protoboeuf/google/protobuf/floatvalue.rb @@ -343,9 +343,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/int32value.rb b/lib/protoboeuf/google/protobuf/int32value.rb index 99e1f76..fddf4bd 100644 --- a/lib/protoboeuf/google/protobuf/int32value.rb +++ b/lib/protoboeuf/google/protobuf/int32value.rb @@ -429,9 +429,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/int64value.rb b/lib/protoboeuf/google/protobuf/int64value.rb index b0c8f8c..4d9f78b 100644 --- a/lib/protoboeuf/google/protobuf/int64value.rb +++ b/lib/protoboeuf/google/protobuf/int64value.rb @@ -431,9 +431,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/stringvalue.rb b/lib/protoboeuf/google/protobuf/stringvalue.rb index 4ac9462..8312921 100644 --- a/lib/protoboeuf/google/protobuf/stringvalue.rb +++ b/lib/protoboeuf/google/protobuf/stringvalue.rb @@ -408,9 +408,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/struct.rb b/lib/protoboeuf/google/protobuf/struct.rb index 0228456..be30a6b 100644 --- a/lib/protoboeuf/google/protobuf/struct.rb +++ b/lib/protoboeuf/google/protobuf/struct.rb @@ -628,9 +628,26 @@ def _encode(buff) def to_h result = {} - result["fields".to_sym] = @fields + + result[:"fields"] = @fields.transform_values { |value| value.to_h } + result end + + def as_json(options = {}) + result = {} + + @fields + .transform_values { |value| value.as_json(options) } + .tap { |v| result["fields"] = v if !options[:compact] || v.any? } + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class Value def self.decode(buff) @@ -1784,9 +1801,52 @@ def _encode(buff) def to_h result = {} - send("kind").tap { |f| result[f.to_sym] = send(f) if f } + + result[:"null_value"] = @null_value if send(:"kind") == :"null_value" + result[:"number_value"] = @number_value if send(:"kind") == + :"number_value" + result[:"string_value"] = @string_value if send(:"kind") == + :"string_value" + result[:"bool_value"] = @bool_value if send(:"kind") == :"bool_value" + result[:"struct_value"] = @struct_value.to_h if send(:"kind") == + :"struct_value" + result[:"list_value"] = @list_value.to_h if send(:"kind") == + :"list_value" + + result + end + + def as_json(options = {}) + result = {} + + result["nullValue"] = @null_value if send(:"kind") == :"null_value" + result["numberValue"] = @number_value if send(:"kind") == + :"number_value" + result["stringValue"] = @string_value if send(:"kind") == + :"string_value" + result["boolValue"] = @bool_value if send(:"kind") == :"bool_value" + result["structValue"] = ( + if @struct_value.nil? + {} + else + @struct_value.as_json(options) + end + ) if send(:"kind") == :"struct_value" + result["listValue"] = ( + if @list_value.nil? + {} + else + @list_value.as_json(options) + end + ) if send(:"kind") == :"list_value" + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end class ListValue def self.decode(buff) @@ -2250,9 +2310,26 @@ def _encode(buff) def to_h result = {} - result["values".to_sym] = @values + + result[:"values"] = @values.map { |v| v.to_h } + result end + + def as_json(options = {}) + result = {} + + @values + .map { |v| v.as_json(options) } + .tap { |v| result["values"] = v if !options[:compact] || v.any? } + + result + end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/timestamp.rb b/lib/protoboeuf/google/protobuf/timestamp.rb index ff5cf7c..2969288 100644 --- a/lib/protoboeuf/google/protobuf/timestamp.rb +++ b/lib/protoboeuf/google/protobuf/timestamp.rb @@ -597,10 +597,26 @@ def _encode(buff) def to_h result = {} - result["seconds".to_sym] = @seconds - result["nanos".to_sym] = @nanos + + result[:"seconds"] = @seconds + result[:"nanos"] = @nanos + + result + end + + def as_json(options = {}) + result = {} + + result["seconds"] = @seconds + result["nanos"] = @nanos + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/uint32value.rb b/lib/protoboeuf/google/protobuf/uint32value.rb index bd54058..3f73628 100644 --- a/lib/protoboeuf/google/protobuf/uint32value.rb +++ b/lib/protoboeuf/google/protobuf/uint32value.rb @@ -412,9 +412,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/lib/protoboeuf/google/protobuf/uint64value.rb b/lib/protoboeuf/google/protobuf/uint64value.rb index e1764d8..bee942a 100644 --- a/lib/protoboeuf/google/protobuf/uint64value.rb +++ b/lib/protoboeuf/google/protobuf/uint64value.rb @@ -412,9 +412,24 @@ def _encode(buff) def to_h result = {} - result["value".to_sym] = @value + + result[:"value"] = @value + + result + end + + def as_json(options = {}) + result = {} + + result["value"] = @value + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end end end diff --git a/test/fixtures/person.proto b/test/fixtures/person.proto new file mode 100644 index 0000000..1ac2886 --- /dev/null +++ b/test/fixtures/person.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +message Employer { + optional string name = 1; +} + +message Person { + optional string first_name = 1; + optional string last_name = 2; + optional int32 year_of_birth = 3; + optional Employer current_employer = 4; + repeated Employer previous_employers = 5; + map employers_by_name = 6; + map tags = 7; +} diff --git a/test/fixtures/typed_test.correct.rb b/test/fixtures/typed_test.correct.rb index 9f73016..51d7870 100644 --- a/test/fixtures/typed_test.correct.rb +++ b/test/fixtures/typed_test.correct.rb @@ -1635,12 +1635,44 @@ def _encode(buff) sig { returns(T::Hash[Symbol, T.untyped]) } def to_h result = {} - send("oneof_field").tap { |f| result[f.to_sym] = send(f) if f } - result["int_field".to_sym] = @int_field - result["string_field".to_sym] = @string_field - result["repeated_ints".to_sym] = @repeated_ints - result["map_field".to_sym] = @map_field - result["bytes_field".to_sym] = @bytes_field + + result[:"int_field"] = @int_field + result[:"string_field"] = @string_field + result[:"enum_1"] = @enum_1 if send(:"oneof_field") == :"enum_1" + result[:"enum_2"] = @enum_2 if send(:"oneof_field") == :"enum_2" + result[:"repeated_ints"] = @repeated_ints + result[:"map_field"] = @map_field + result[:"bytes_field"] = @bytes_field + + result + end + + sig do + params(options: T::Hash[T.untyped, T.untyped]).returns( + T::Hash[Symbol, T.untyped] + ) + end + def as_json(options = {}) + result = {} + + result["intField"] = @int_field + result["stringField"] = @string_field if !options[:compact] || + has_string_field? + result["enum1"] = @enum_1 if send(:"oneof_field") == :"enum_1" + result["enum2"] = @enum_2 if send(:"oneof_field") == :"enum_2" + @repeated_ints.tap do |v| + result["repeatedInts"] = v if !options[:compact] || v.any? + end + @map_field.tap do |v| + result["mapField"] = v if !options[:compact] || v.any? + end + result["bytesField"] = @bytes_field + result end + + def to_json(options = {}) + require "json" + JSON.dump(as_json(options)) + end end diff --git a/test/hash_serialization_test.rb b/test/hash_serialization_test.rb new file mode 100644 index 0000000..c90c2c8 --- /dev/null +++ b/test/hash_serialization_test.rb @@ -0,0 +1,292 @@ +# frozen_string_literal: true + +require "helper" +require "json" + +class HashSerializationTest < ProtoBoeuf::Test + unit = parse_proto_string(<<~PROTO) + syntax = "proto3"; + + message Employer { + string name = 1; + } + + message Person { + string first_name = 1; + optional string nick_name = 2; + optional int32 birth_year = 3; + optional Employer current_employer = 4; + repeated Employer previous_employers = 5; + map favorite_employers_by_name = 6; + map metadata = 7; + } + + message PersonWithMoreRequiredFields { + string first_name = 1; + optional string nick_name = 2; + int32 birth_year = 3; + Employer current_employer = 4; + repeated Employer previous_employers = 5; + map favorite_employers_by_name = 6; + map metadata = 7; + } + + message EmployerWithCustomJsonNames { + optional string name = 1 [json_name = "NAME"]; + } + + message PersonWithCustomJsonNames { + string first_name = 1 [json_name = "FIRST_NAME"]; + optional string nick_name = 2 [json_name = "NICK_NAME"]; + optional int32 birth_year = 3 [json_name = "BIRTH_YEAR"]; + optional EmployerWithCustomJsonNames current_employer = 4 [json_name = "CURRENT_EMPLOYER"]; + repeated EmployerWithCustomJsonNames previous_employers = 5 [json_name = "PREVIOUS_EMPLOYERS"]; + map favorite_employers_by_name = 6 [json_name = "FAVORITE_EMPLOYERS_BY_NAME"]; + map metadata = 7 [json_name = "METADATA"]; + } + PROTO + + class_eval ProtoBoeuf::CodeGen.new(unit).to_ruby + + def test_to_h_with_all_fields + jane = Person.new( + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: Employer.new(name: "Business Inc."), + previous_employers: [Employer.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => Employer.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + assert_equal( + { + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: { name: "Business Inc." }, + previous_employers: [{ name: "Funny Business LLC" }], + favorite_employers_by_name: { "Business Inc." => { name: "Business Inc." } }, + metadata: { "favorite_color" => "blue" }, + }, + jane.to_h, + ) + end + + def test_to_h_with_missing_fields + nobody = Person.new + + assert_equal( + { + first_name: "", + nick_name: "", + birth_year: 0, + current_employer: {}, + previous_employers: [], + favorite_employers_by_name: {}, + metadata: {}, + }, + nobody.to_h, + ) + end + + def test_as_json_with_all_fields + jane = Person.new( + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: Employer.new(name: "Business Inc."), + previous_employers: [Employer.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => Employer.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + assert_equal( + { + "firstName" => "Jane", + "nickName" => "J-dog", + "birthYear" => 1984, + "currentEmployer" => { "name" => "Business Inc." }, + "previousEmployers" => [{ "name" => "Funny Business LLC" }], + "favoriteEmployersByName" => { "Business Inc." => { "name" => "Business Inc." } }, + "metadata" => { "favorite_color" => "blue" }, + }, + jane.as_json, + ) + end + + def test_as_json_with_missing_fields + nobody = Person.new + + assert_equal( + { + "firstName" => "", + "nickName" => "", + "birthYear" => 0, + "currentEmployer" => {}, + "previousEmployers" => [], + "favoriteEmployersByName" => {}, + "metadata" => {}, + }, + nobody.as_json, + ) + end + + def test_as_json_compact_compact_with_all_fields + jane = Person.new( + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: Employer.new(name: "Business Inc."), + previous_employers: [Employer.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => Employer.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + assert_equal( + { + "firstName" => "Jane", + "nickName" => "J-dog", + "birthYear" => 1984, + "currentEmployer" => { "name" => "Business Inc." }, + "previousEmployers" => [{ "name" => "Funny Business LLC" }], + "favoriteEmployersByName" => { "Business Inc." => { "name" => "Business Inc." } }, + "metadata" => { "favorite_color" => "blue" }, + }, + jane.as_json(compact: true), + ) + end + + def test_as_json_compact_with_missing_fields + nobody = Person.new + + # The compact option will omit empty or non-default values for fields marked as optional. Non-optional fields with + # default or empty values will still appear in the resulting Hash. + + assert_equal( + { + "firstName" => "", + }, + nobody.as_json(compact: true), + ) + + another_nobody = PersonWithMoreRequiredFields.new + + assert_equal( + { + "firstName" => "", + "birthYear" => 0, + "currentEmployer" => {}, + }, + another_nobody.as_json(compact: true), + ) + end + + def test_as_json_with_json_value_overrides + jane = PersonWithCustomJsonNames.new( + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: EmployerWithCustomJsonNames.new(name: "Business Inc."), + previous_employers: [EmployerWithCustomJsonNames.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => EmployerWithCustomJsonNames.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + # Confirm that #to_h isn't affected by json_value overrides + assert_equal( + { + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: { name: "Business Inc." }, + previous_employers: [{ name: "Funny Business LLC" }], + favorite_employers_by_name: { "Business Inc." => { name: "Business Inc." } }, + metadata: { "favorite_color" => "blue" }, + }, + jane.to_h, + ) + + assert_equal( + { + "FIRST_NAME" => "Jane", + "NICK_NAME" => "J-dog", + "BIRTH_YEAR" => 1984, + "CURRENT_EMPLOYER" => { "NAME" => "Business Inc." }, + "PREVIOUS_EMPLOYERS" => [{ "NAME" => "Funny Business LLC" }], + "FAVORITE_EMPLOYERS_BY_NAME" => { "Business Inc." => { "NAME" => "Business Inc." } }, + "METADATA" => { "favorite_color" => "blue" }, + }, + jane.as_json, + ) + end + + def test_to_json + jane = Person.new( + first_name: "Jane", + nick_name: "J-dog", + birth_year: 1984, + current_employer: Employer.new(name: "Business Inc."), + previous_employers: [Employer.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => Employer.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + assert_equal( + { + "firstName" => "Jane", + "nickName" => "J-dog", + "birthYear" => 1984, + "currentEmployer" => { "name" => "Business Inc." }, + "previousEmployers" => [{ "name" => "Funny Business LLC" }], + "favoriteEmployersByName" => { "Business Inc." => { "name" => "Business Inc." } }, + "metadata" => { "favorite_color" => "blue" }, + }, + JSON.parse(jane.to_json), + ) + + nobody = Person.new + + assert_equal( + { + "firstName" => "", + }, + JSON.parse(nobody.to_json(compact: true)), + ) + + joe = PersonWithCustomJsonNames.new( + first_name: "Joe", + nick_name: "J-dog", + birth_year: 1984, + current_employer: EmployerWithCustomJsonNames.new(name: "Business Inc."), + previous_employers: [EmployerWithCustomJsonNames.new(name: "Funny Business LLC")], + favorite_employers_by_name: { + "Business Inc." => EmployerWithCustomJsonNames.new(name: "Business Inc."), + }, + metadata: { "favorite_color" => "blue" }, + ) + + assert_equal( + { + "FIRST_NAME" => "Joe", + "NICK_NAME" => "J-dog", + "BIRTH_YEAR" => 1984, + "CURRENT_EMPLOYER" => { "NAME" => "Business Inc." }, + "PREVIOUS_EMPLOYERS" => [{ "NAME" => "Funny Business LLC" }], + "FAVORITE_EMPLOYERS_BY_NAME" => { "Business Inc." => { "NAME" => "Business Inc." } }, + "METADATA" => { "favorite_color" => "blue" }, + }, + JSON.parse(joe.to_json), + ) + end +end diff --git a/test/message_test.rb b/test/message_test.rb index e56cdba..499c086 100644 --- a/test/message_test.rb +++ b/test/message_test.rb @@ -7,6 +7,8 @@ class MessageTest < ProtoBoeuf::Test unit = parse_proto_file(FIXTURE_FILE) gen = ProtoBoeuf::CodeGen.new(unit) + File.open("fahk.rb", "w") { |f| f.puts(gen.to_ruby) } + class_eval gen.to_ruby def test_sint64