public static <InputT, OutputT> MapElements<InputT, OutputT> via(
      final InferableFunction<InputT, OutputT> fn) {
    return new MapElements<>(fn, fn.getInputTypeDescriptor(), fn.getOutputTypeDescriptor());
  }
@Test
  public void testInferableFunctionDisplayData() {
    InferableFunction<Integer, ?> inferableFn =
        new InferableFunction<Integer, Integer>() {
          @Override
          public Integer apply(Integer input) {
            return input;
          }

          @Override
          public void populateDisplayData(DisplayData.Builder builder) {
            builder.add(DisplayData.item("foo", "baz"));
          }
        };

    MapElements<?, ?> inferableMap = MapElements.via(inferableFn);
    assertThat(DisplayData.from(inferableMap), hasDisplayItem("class", inferableFn.getClass()));
    assertThat(DisplayData.from(inferableMap), hasDisplayItem("foo", "baz"));
  }