public <OutputT extends @NonNull Object> CsvIOParse<T> withCustomRecordParsing(
      String fieldName, SerializableFunction<String, OutputT> customRecordParsingFn) {

    Map<String, SerializableFunction<String, Object>> customProcessingMap =
        getConfigBuilder().getOrCreateCustomProcessingMap();

    customProcessingMap.put(fieldName, customRecordParsingFn::apply);
    getConfigBuilder().setCustomProcessingMap(customProcessingMap);
    return this;
  }
@Test
  public void givenSingleCustomParsingLambda_parsesPOJOs() {
    PCollection<String> records =
        csvRecords(
            pipeline,
            "instant,instantList",
            "2024-01-23T10:00:05.000Z,10-00-05-2024-01-23;12-59-59-2024-01-24");
    TimeContaining want =
        timeContaining(
            Instant.parse("2024-01-23T10:00:05.000Z"),
            Arrays.asList(
                Instant.parse("2024-01-23T10:00:05.000Z"),
                Instant.parse("2024-01-24T12:59:59.000Z")));

    CsvIOParse<TimeContaining> underTest =
        underTest(
                TIME_CONTAINING_SCHEMA,
                CSVFormat.DEFAULT
                    .withHeader("instant", "instantList")
                    .withAllowDuplicateHeaderNames(false),
                new HashMap<>(),
                timeContainingFromRowFn(),
                TIME_CONTAINING_CODER)
            .withCustomRecordParsing("instantList", instantListParsingLambda());

    CsvIOParseResult<TimeContaining> result = records.apply(underTest);
    PAssert.that(result.getOutput()).containsInAnyOrder(want);
    PAssert.that(result.getErrors()).empty();

    pipeline.run();
  }