package org.capnproto; import java.util.concurrent.CompletableFuture; public interface Request { FromPointerBuilder getParamsFactory(); default Params getParams() { return this.getTypelessRequest().getParams().getAs(this.getParamsFactory()); } default RequestHook getHook() { return this.getTypelessRequest().getHook(); } Request getTypelessRequest(); default RemotePromise sendInternal() { return this.getTypelessRequest().sendInternal(); } static Request newBrokenRequest(FromPointerBuilder paramsFactory, Throwable exc) { final MessageBuilder message = new MessageBuilder(); var hook = new RequestHook() { @Override public RemotePromise send() { return new RemotePromise<>(CompletableFuture.failedFuture(exc), new AnyPointer.Pipeline(PipelineHook.newBrokenPipeline(exc))); } @Override public CompletableFuture sendStreaming() { return CompletableFuture.failedFuture(exc); } @Override public Object getBrand() { return null; } }; var root = message.getRoot(AnyPointer.factory); return new Request<>() { @Override public FromPointerBuilder getParamsFactory() { return paramsFactory; } @Override public Request getTypelessRequest() { return new AnyPointer.Request(message.getRoot(AnyPointer.factory), hook); } }; } static Request fromTypeless( FromPointerBuilder paramsFactory, Request typeless) { return new Request<>() { @Override public FromPointerBuilder getParamsFactory() { return paramsFactory; } @Override public Request getTypelessRequest() { return typeless; } }; } }