code: public static <T> VertxCompletableFuture<T> from(Context context, Future<T> future) {
      VertxCompletableFuture<T> res = new VertxCompletableFuture<>(Objects.requireNonNull(context));
      Objects.requireNonNull(future).setHandler(ar -> {
        if (context == Vertx.currentContext()) {
          res.completeFromAsyncResult(ar);
        } else {
          res.context.runOnContext(v -> res.completeFromAsyncResult(ar));
        }
      });
      return res;
    }
docs: Creates a new {@link VertxCompletableFuture} from the given {@link Context} instance and given
  {@link Future}. The returned future uses the current Vert.x context, or creates a new one.
  <p>
  The created {@link VertxCompletableFuture} is completed successfully or not when the given future
  completes successfully or not. The created {@link VertxCompletableFuture} is completed successfully or not
  when the given future completes successfully or not. The completion is called on the given {@link Context},
  immediately if it is already executing on the right context, asynchronously if not.
  
  @param context the context
  @param future  the Vert.x future
  @param <T>     the type of the result
  @return the new {@link VertxCompletableFuture}