class WithKeys extends PTransform<PCollection<V>, PCollection<KV<K, V>>> {

  public static <K, V> WithKeys<K, V> of(SerializableFunction<V, K> fn) {
    checkNotNull(
        fn, "WithKeys constructed with null function. Did you mean WithKeys.of((Void) null)?");
    return new WithKeys<>(fn, null);
  }

  private  WithKeys(SerializableFunction<V, K> fn, Class<K> keyClass);

}