reactor-core/src/main/java/reactor/core/publisher/Operators.java
public static <I, O> Function<? super Publisher<I>, ? extends Publisher<O>> liftPublisher(
			BiFunction<Publisher, ? super CoreSubscriber<? super O>, ? extends CoreSubscriber<? super I>> lifter) {
		return LiftFunction.liftPublisher(null, lifter);
	}
public static <I, O> Function<? super Publisher<I>, ? extends Publisher<O>> liftPublisher(
			BiFunction<Publisher, ? super CoreSubscriber<? super O>, ? extends CoreSubscriber<? super I>> lifter) {
		return LiftFunction.liftPublisher(null, lifter);
	}
Create a function that can be used to support a custom operator via
{@link CoreSubscriber} decoration. The function is compatible with
{@link Flux#transform(Function)}, {@link Mono#transform(Function)},
{@link Hooks#onEachOperator(Function)} and {@link Hooks#onLastOperator(Function)},
and works with the raw {@link Publisher} as input, which is useful if you need to
detect the precise type of the source (eg. instanceof checks to detect Mono, Flux,
true Scannable, etc...).

@param lifter the bifunction taking the raw {@link Publisher} and
{@link CoreSubscriber}. The publisher can be double-checked (including with
{@code instanceof}, and the function must return a receiving {@link CoreSubscriber}
that will immediately subscribe to the {@link Publisher}.

@param <I> the input type
@param <O> the output type

@return a new {@link Function}