@SuppressWarnings("dereference.of.nullable")
  public static PTransform<PCollection<Failure>, PDone> getDlqTransform(String fullConfig) {
    List<String> strings = Splitter.on(":").limit(2).splitToList(fullConfig);
    checkArgument(
        strings.size() == 2, "Invalid config, must start with `identifier:`. %s", fullConfig);
    String key = strings.get(0);
    String config = strings.get(1).trim();
    GenericDlqProvider provider = PROVIDERS.get(key);
    checkArgument(
        provider != null, "Invalid config, no DLQ provider exists with identifier `%s`.", key);
    return provider.newDlqTransform(config);
  }
@Test
  public void testParseFailures() {
    assertThrows(
        IllegalArgumentException.class, () -> GenericDlq.getDlqTransform("no colon present"));
    assertThrows(IllegalArgumentException.class, () -> GenericDlq.getDlqTransform("bad_id:xxx"));
    assertThrows(
        IllegalArgumentException.class,
        () -> GenericDlq.getDlqTransform(StoringDlqProvider.ID + ": not config"));
  }