code: @SuppressWarnings("unchecked")
    private static TBase<?, ?> toThrift(TStructDescriptor tDesc, Tuple tuple) {
      int size = tDesc.getFields().size();
      int tupleSize = tuple.size();
      @SuppressWarnings("rawtypes")
      TBase tObj = newTInstance(tDesc.getThriftClass());
      for(int i = 0; i<size && i<tupleSize; i++) {
        Object pObj;
        try {
          pObj = tuple.get(i);
        } catch (ExecException e) {
          throw new RuntimeException(e);
        }
        if (pObj != null) {
          Field field = tDesc.getFieldAt(i);
          try {
            tObj.setFieldValue(field.getFieldIdEnum(), toThriftValue(field, pObj));
          } catch (Exception e) {
            String value = String.valueOf(tObj);
            final int max_length = 100;
            if (max_length < value.length()) {
              value = value.substring(0, max_length - 3) + "...";
            }
            String type = tObj == null ? "unknown" : tObj.getClass().getName();
            throw new RuntimeException(String.format(
                "Failed to set field '%s' using tuple value '%s' of type '%s' at index %d",
                field.getName(), value, type, i), e);
          }
        }
        // if tDesc is a union, at least one field needs to be non-null.
        // user is responsible for ensuring that.
      }
      return tObj;
    }
docs: Construct a Thrift object from the tuple.