static Builder builder() {
    return new AutoValue_CsvIOParseError.Builder();
  }
@Test
  public void usableInMultiOutput() {
    List<CsvIOParseError> want =
        Arrays.asList(
            CsvIOParseError.builder()
                .setMessage("error message")
                .setObservedTimestamp(Instant.now())
                .setStackTrace("stack trace")
                .build(),
            CsvIOParseError.builder()
                .setMessage("error message")
                .setObservedTimestamp(Instant.now())
                .setStackTrace("stack trace")
                .setFilename("filename")
                .setCsvRecord("csv record")
                .build());

    TupleTag<CsvIOParseError> errorTag = new TupleTag<CsvIOParseError>() {};
    TupleTag<String> anotherTag = new TupleTag<String>() {};

    PCollection<CsvIOParseError> errors = pipeline.apply("createWant", Create.of(want));
    PCollection<String> anotherPCol = pipeline.apply("createAnother", Create.of("a", "b", "c"));
    PCollectionTuple pct = PCollectionTuple.of(errorTag, errors).and(anotherTag, anotherPCol);
    PAssert.that(pct.get(errorTag)).containsInAnyOrder(want);

    pipeline.run();
  }