in cloud-spanner-r2dbc/src/main/java/com/google/cloud/spanner/r2dbc/v2/DatabaseClientReactiveAdapter.java [305:325]
private <T> Mono<T> convertFutureToMono(Supplier<ApiFuture<T>> futureSupplier) {
return Mono.create(
sink -> {
ApiFuture future = futureSupplier.get();
sink.onCancel(() -> future.cancel(true));
ApiFutures.addCallback(future,
new ApiFutureCallback<T>() {
@Override
public void onFailure(Throwable t) {
sink.error(t);
}
@Override
public void onSuccess(T result) {
sink.success(result);
}
},
REACTOR_EXECUTOR);
});
}