package org.restler.async; import org.restler.client.AbstractWrapperHandler; import org.restler.client.Call; import org.restler.client.CallExecutor; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.Future; public class FutureSupport extends AbstractWrapperHandler<Future<?>> { private final Executor threadPool; public FutureSupport(Executor threadPool) { this.threadPool = threadPool; } @Override protected Class<?> wrapperClass() { return Future.class; } @Override protected Future<?> execute(CallExecutor callExecutor, Call actualCall) { CompletableFuture<Object> future = new CompletableFuture<>(); threadPool.execute(() -> future.complete(callExecutor.execute(actualCall))); return future; } }