2020-09-27 22:09:22 +00:00
|
|
|
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-27 22:09:22 +00:00
|
|
|
|
2020-09-28 21:16:38 +00:00
|
|
|
Request(AnyPointer.Builder params, FromPointerReader<Results> results, RequestHook hook) {
|
2020-09-27 22:09:22 +00:00
|
|
|
this.params = params;
|
2020-09-28 21:16:38 +00:00
|
|
|
this.results = results;
|
2020-09-27 22:09:22 +00:00
|
|
|
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);
|
|
|
|
});
|
2020-09-27 22:09:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
2020-09-27 22:09:22 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|