public static <T> Inner<T> create() {
    return new Inner<>();
  }
@Test
  @Category(NeedsRunner.class)
  public void renameTopLevelFields() {
    Schema schema = Schema.builder().addStringField("field1").addInt32Field("field2").build();
    PCollection<Row> renamed =
        pipeline
            .apply(
                Create.of(
                        Row.withSchema(schema).addValues("one", 1).build(),
                        Row.withSchema(schema).addValues("two", 2).build())
                    .withRowSchema(schema))
            .apply(RenameFields.<Row>create().rename("field1", "new1").rename("field2", "new2"));
    Schema expectedSchema = Schema.builder().addStringField("new1").addInt32Field("new2").build();
    assertEquals(expectedSchema, renamed.getSchema());
    List<Row> expectedRows =
        ImmutableList.of(
            Row.withSchema(expectedSchema).addValues("one", 1).build(),
            Row.withSchema(expectedSchema).addValues("two", 2).build());
    PAssert.that(renamed).containsInAnyOrder(expectedRows);
    pipeline.run();
  }