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

49 lines
1.3 KiB
Java
Raw Normal View History

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