capnproto-java-rpc/runtime/src/main/java/org/capnproto/Request.java

71 lines
2.1 KiB
Java
Raw Normal View History

package org.capnproto;
import java.util.concurrent.CompletableFuture;
public interface Request<Params> {
FromPointerBuilder<Params> getParamsFactory();
2020-11-24 15:37:28 +00:00
Request<AnyPointer.Builder> getTypelessRequest();
default Params getParams() {
return this.getTypelessRequest().getParams().getAs(this.getParamsFactory());
}
default RequestHook getHook() {
return this.getTypelessRequest().getHook();
}
default RemotePromise<AnyPointer.Reader> sendInternal() {
return this.getTypelessRequest().sendInternal();
}
static <Params> Request<Params> newBrokenRequest(FromPointerBuilder<Params> paramsFactory,
Throwable exc) {
2020-10-23 18:25:50 +00:00
2020-11-24 15:37:28 +00:00
var message = new MessageBuilder();
var hook = new RequestHook() {
@Override
public RemotePromise<AnyPointer.Reader> send() {
2020-11-02 21:39:58 +00:00
return new RemotePromise<>(CompletableFuture.failedFuture(exc),
new AnyPointer.Pipeline(PipelineHook.newBrokenPipeline(exc)));
}
@Override
public CompletableFuture<?> sendStreaming() {
return CompletableFuture.failedFuture(exc);
}
};
return new Request<>() {
@Override
public FromPointerBuilder<Params> getParamsFactory() {
return paramsFactory;
}
@Override
public Request<AnyPointer.Builder> getTypelessRequest() {
2020-11-02 21:39:58 +00:00
return new AnyPointer.Request(message.getRoot(AnyPointer.factory), hook);
}
};
2020-09-29 13:08:23 +00:00
}
static <Params> Request<Params> fromTypeless(
FromPointerBuilder<Params> paramsFactory,
Request<AnyPointer.Builder> typeless) {
return new Request<>() {
@Override
public FromPointerBuilder<Params> getParamsFactory() {
return paramsFactory;
}
@Override
public Request<AnyPointer.Builder> getTypelessRequest() {
return typeless;
}
};
}
}