public static CoderProvider fromStaticMethods(Class<?> rawType, Class<?> coderClazz) {
    checkArgument(
        Coder.class.isAssignableFrom(coderClazz),
        "%s is not a subtype of %s",
        coderClazz.getName(),
        Coder.class.getSimpleName());
    return new CoderProviderFromStaticMethods(rawType, coderClazz);
  }
@Test
  public void testIterableCoderProvider() throws Exception {
    TypeDescriptor<Iterable<Double>> type = TypeDescriptors.iterables(TypeDescriptors.doubles());
    CoderProvider iterableCoderProvider =
        CoderProviders.fromStaticMethods(Iterable.class, IterableCoder.class);

    assertEquals(
        IterableCoder.of(DoubleCoder.of()),
        iterableCoderProvider.coderFor(type, Arrays.asList(DoubleCoder.of())));
  }