code: @CheckReturnValue
      @SchedulerSupport(SchedulerSupport.NONE)
      public static <R> Completable using(
              final Callable<R> resourceSupplier,
              final Function<? super R, ? extends CompletableSource> completableFunction,
              final Consumer<? super R> disposer,
              final boolean eager) {
          ObjectHelper.requireNonNull(resourceSupplier, "resourceSupplier is null");
          ObjectHelper.requireNonNull(completableFunction, "completableFunction is null");
          ObjectHelper.requireNonNull(disposer, "disposer is null");
  
          return RxJavaPlugins.onAssembly(new CompletableUsing<R>(resourceSupplier, completableFunction, disposer, eager));
      }
docs: Returns a Completable instance which manages a resource along
  with a custom Completable instance while the subscription is active and performs eager or lazy
  resource disposition.
  <p>
  <img width="640" height="332" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Completable.using.b.png" alt="">
  <p>
  If this overload performs a lazy disposal after the terminal event is emitted.
  Exceptions thrown at this time will be delivered to RxJavaPlugins only.
  <dl>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code using} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  @param <R> the resource type
  @param resourceSupplier the supplier that returns a resource to be managed
  @param completableFunction the function that given a resource returns a non-null
  Completable instance that will be subscribed to
  @param disposer the consumer that disposes the resource created by the resource supplier
  @param eager if true, the resource is disposed before the terminal event is emitted, if false, the
  resource is disposed after the terminal event has been emitted
  @return the new Completable instance