package org.capnproto; import java.util.concurrent.CompletableFuture; public class Request { private final AnyPointer.Builder params; private final FromPointerReader results; private RequestHook hook; Request(AnyPointer.Builder params, FromPointerReader results, RequestHook hook) { this.params = params; this.results = results; this.hook = hook; } AnyPointer.Builder params() { return params; } CompletableFuture send() { var typelessPromise = hook.send(); hook = null; // prevent reuse return typelessPromise.getResponse().thenApply(response -> { return response.getAs(results); }); } static Request newBrokenRequest(Throwable exc) { final MessageBuilder message = new MessageBuilder(); var hook = new RequestHook() { @Override public RemotePromise send() { return new RemotePromise<>(CompletableFuture.failedFuture(exc), null); } @Override public Object getBrand() { return null; } }; var root = message.getRoot(AnyPointer.factory); return new Request(root, null, hook); } }