docs: public static MatDesc parse(String matdesc)
    {
      if (matdesc == null)
      {
        return null;
      }
      try
      {
        JsonNode jsonNode = mapper.readTree(matdesc);
        JsonNode queryIdNode = jsonNode.path(QUERY_ID);
        if (queryIdNode.isMissingNode() || queryIdNode.isNull())
        {
          return null;
        }
        JsonNode smkIdNode = jsonNode.path(SMK_ID);
        if (smkIdNode.isMissingNode() || smkIdNode.isNull())
        {
          return null;
        }
        String queryId = queryIdNode.asText();
        long smkId = smkIdNode.asLong();
        JsonNode keySizeNode = jsonNode.path(KEY_SIZE);
        if (!keySizeNode.isMissingNode() && !keySizeNode.isNull())
        {
          return new MatDesc(smkId, queryId, keySizeNode.asInt());
        }
        return new MatDesc(smkId, queryId);
      }
      catch (Exception ex)
      {
        return null;
      }
    }