reactor-core/src/main/java/reactor/core/publisher/Mono.java
public static <T> Mono<T> fromFuture(Supplier<? extends CompletableFuture<? extends T>> futureSupplier) {
		return defer(() -> onAssembly(new MonoCompletionStage<>(futureSupplier.get())));
	}
public static <T> Mono<T> fromFuture(Supplier<? extends CompletableFuture<? extends T>> futureSupplier) {
		return defer(() -> onAssembly(new MonoCompletionStage<>(futureSupplier.get())));
	}
Create a {@link Mono} that wraps a {@link CompletableFuture} on subscription,
emitting the value produced by the Future.

<p>
<img class="marble" src="doc-files/marbles/fromFutureSupplier.svg" alt="">
<p>
Note that the future is not cancelled when that Mono is cancelled, but that behavior
can be obtained by using a {@link #doFinally(Consumer)} that checks
for a {@link SignalType#CANCEL} and calls {@link CompletableFuture#cancel(boolean)}.

@param futureSupplier The {@link Supplier} of a {@link CompletableFuture} that will produce a value (or a null to
complete immediately). This allows lazy triggering of future-based APIs.
@param <T> type of the expected value
@return A {@link Mono}.
@see #fromCompletionStage(Supplier) fromCompletionStage for a generalization