docs: @Override
      public <T> int readFieldNumber(Schema<T> schema) throws IOException
      {
          if (isAtEnd())
          {
              lastTag = 0;
              return 0;
          }
  
          // are we reading packed field?
          if (isCurrentFieldPacked())
          {
              if (packedLimit < getTotalBytesRead())
                  throw ProtobufException.misreportedSize();
  
              // Return field number while reading packed field
              return lastTag >>> TAG_TYPE_BITS;
          }
  
          packedLimit = 0;
          final int tag = readRawVarint32();
          final int fieldNumber = tag >>> TAG_TYPE_BITS;
          if (fieldNumber == 0)
          {
              if (decodeNestedMessageAsGroup && WIRETYPE_TAIL_DELIMITER == (tag & TAG_TYPE_MASK))
              {
                  // protostuff's tail delimiter for streaming
                  // 2 options: length-delimited or tail-delimited.
                  lastTag = 0;
                  return 0;
              }
              // If we actually read zero, that's not a valid tag.
              throw ProtobufException.invalidTag();
          }
          if (decodeNestedMessageAsGroup && WIRETYPE_END_GROUP == (tag & TAG_TYPE_MASK))
          {
              lastTag = 0;
              return 0;
          }
  
          lastTag = tag;
          return fieldNumber;
      }