private static String deserializeStringWrapperCompatibleString()

in statefun-sdk-java/src/main/java/org/apache/flink/statefun/sdk/java/types/Types.java [236:264]


    private static String deserializeStringWrapperCompatibleString(Slice input) {
      if (input.readableBytes() == 0) {
        return "";
      }
      ByteString buf = SliceProtobufUtil.asByteString(input);
      int position = 0;
      // read field tag
      if (buf.byteAt(position++) != STRING_WRAPPER_FIELD_TYPE) {
        throw new IllegalStateException("Not a StringWrapper");
      }
      // read VarInt32 length
      int shift = 0;
      long varIntSize = 0;
      while (shift < 32) {
        final byte b = buf.byteAt(position++);
        varIntSize |= (long) (b & 0x7F) << shift;
        if ((b & 0x80) == 0) {
          break;
        }
        shift += 7;
      }
      // sanity checks
      if (varIntSize < 0 || varIntSize > Integer.MAX_VALUE) {
        throw new IllegalStateException("Malformed VarInt");
      }
      final int endIndex = position + (int) varIntSize;
      ByteString utf8Bytes = buf.substring(position, endIndex);
      return utf8Bytes.toStringUtf8();
    }