public static <C> AsyncBuilder<C> builder() {
    return new AsyncBuilder<>();
  }
@Test
  void throwsOriginalExceptionAfterFailedRetries() throws Throwable {
    server.enqueue(new MockResponse().setResponseCode(503).setBody("foo 1"));
    server.enqueue(new MockResponse().setResponseCode(503).setBody("foo 2"));

    final String message = "the innerest";

    TestInterfaceAsync api = AsyncFeign.builder().exceptionPropagationPolicy(UNWRAP)
        .retryer(new Retryer.Default(1, 1, 2))
        .errorDecoder(
            (methodKey, response) -> new RetryableException(response.status(), "play it again sam!",
                HttpMethod.POST, new TestInterfaceException(message), NON_RETRYABLE,
                response.request()))
        .target(TestInterfaceAsync.class, "http://localhost:" + server.getPort());

    Throwable exception = assertThrows(TestInterfaceException.class, () -> unwrap(api.post()));
    assertThat(exception.getMessage()).contains(message);
  }