public static <T> Bounded<T> from(BoundedSource<T> source) {
    return new Bounded<>(null, source);
  }
@Test
  public void testReadBoundedPreservesTypeDescriptor() {
    PCollection<String> input = pipeline.apply(Read.from(new SerializableBoundedSource()));
    TypeDescriptor<String> typeDescriptor = input.getTypeDescriptor();
    assertEquals(String.class, typeDescriptor.getType());

    ListBoundedSource<Long> longs = new ListBoundedSource<>(VarLongCoder.of());
    PCollection<List<Long>> numbers = pipeline.apply(Read.from(longs));
    assertEquals(new TypeDescriptor<List<Long>>() {}, numbers.getTypeDescriptor());
  }