docs: public int readTag() throws IOException
      {
          if (!buffer.hasRemaining())
          {
              lastTag = 0;
              return 0;
          }
  
          final int tag = readRawVarint32();
          if (tag >>> TAG_TYPE_BITS == 0)
          {
              // If we actually read zero, that's not a valid tag.
              throw ProtobufException.invalidTag();
          }
          lastTag = tag;
          return tag;
      }