code: public static <T> VertxCompletableFuture<T> supplyAsync(Context context, Supplier<T> supplier) {
      Objects.requireNonNull(supplier);
      VertxCompletableFuture<T> future = new VertxCompletableFuture<>(Objects.requireNonNull(context));
      context.runOnContext(v -> {
        try {
          future.complete(supplier.get());
        } catch (Throwable e) {
          future.completeExceptionally(e);
        }
      });
      return future;
    }
docs: Returns a new CompletableFuture that is asynchronously completed by a task running in the current Vert.x
  {@link Context} with the value obtained by calling the given Supplier.
  <p>
  This method is different from {@link CompletableFuture#supplyAsync(Supplier)} as it does not use a fork join
  executor, but use the Vert.x context.
  
  @param context  the context in which the supplier is executed.
  @param supplier a function returning the value to be used to complete the returned CompletableFuture
  @param <T>      the function's return type
  @return the new CompletableFuture