public static Builder builder() {
    return new Builder();
  }
@Test
  // Test cases that can't be constructed with our Builder class e2e but that will parse correctly
  public void testCanDeserializeWithoutDefaultValues() throws JsonProcessingException {
    // `removals` is null
    UpdateNamespacePropertiesRequest noRemovals =
        UpdateNamespacePropertiesRequest.builder().updateAll(UPDATES).build();
    String jsonWithNullRemovals = "{\"removals\":null,\"updates\":{\"owner\":\"Hank\"}}";
    UpdateNamespacePropertiesRequest parsed = deserialize(jsonWithNullRemovals);
    assertEquals(parsed, noRemovals);

    // `removals` is missing from the JSON
    String jsonWithMissingRemovals = "{\"updates\":{\"owner\":\"Hank\"}}";
    assertEquals(deserialize(jsonWithMissingRemovals), noRemovals);

    // `updates` is null
    UpdateNamespacePropertiesRequest noUpdates =
        UpdateNamespacePropertiesRequest.builder().removeAll(REMOVALS).build();
    String jsonWithNullUpdates = "{\"removals\":[\"foo\",\"bar\"],\"updates\":null}";
    assertEquals(deserialize(jsonWithNullUpdates), noUpdates);

    // `updates` is missing from the JSON
    String jsonWithMissingUpdates = "{\"removals\":[\"foo\",\"bar\"]}";
    assertEquals(deserialize(jsonWithMissingUpdates), noUpdates);

    // all null / no values set
    UpdateNamespacePropertiesRequest allMissing =
        UpdateNamespacePropertiesRequest.builder().build();
    String jsonAllNull = "{\"removals\":null,\"updates\":null}";
    assertEquals(deserialize(jsonAllNull), allMissing);

    String jsonAllMissing = "{}";
    assertEquals(deserialize(jsonAllMissing), allMissing);
  }