code: @Nullable
    public <S, T> T valueFor(FieldPartitioner<S, T> fp) {
      if (has(fp.getName())) {
        return getAs(fp.getName(), fp.getType());
      } else if (has(fp.getSourceName())) {
        return fp.apply(getAs(fp.getSourceName(), fp.getSourceType()));
      } else {
        return null;
      }
    }
docs: Return the value of a {@code FieldPartitioner} field for this {@link Marker}.
  
  If the {@code Marker} has a value for the field's name, that value is
  returned using {@link Marker#getAs(java.lang.String, java.lang.Class)}. If
  the {@code Marker} only has a value for the the source field name, then
  that value is retrieved using
  {@link org.kitesdk.data.spi.Marker#getAs(java.lang.String,
  java.lang.Class)} and the field's transformation is applied to it as the source value.
  
  @param fp a {@code FieldPartitioner}
  @return the value of the field for this {@code marker}, or null
  @since 0.9.0