private static Publisher<Object> makeContextAware(Publisher<Object> source, RequestContext ctx) {
        if (source instanceof Mono) {
            return new ContextAwareMono((Mono<Object>) source, ctx);
        }
        if (source instanceof ConnectableFlux) {
            return new ContextAwareConnectableFlux((ConnectableFlux<Object>) source, ctx);
        }
        if (source instanceof ParallelFlux) {
            // TODO(minwoox) Support ParallelFlux after
            //               https://github.com/reactor/reactor-core/issues/2328 is addressed.
            if (!warnedParallelFluxUnsupported) {
                warnedParallelFluxUnsupported = true;
                logger.warn("Hooks for {} are not supported yet.", ParallelFlux.class.getSimpleName());
            }
            return source;
        }
        if (source instanceof Flux) {
            return new ContextAwareFlux((Flux<Object>) source, ctx);
        }
        return source;
    }
Returns whether the specified {@link Publisher} is reproducible {@link Fuseable.ScalarCallable} such as
{@link Flux#empty()}, {@link Flux#just(Object)}, {@link Flux#error(Throwable)},
{@link Mono#empty()}, {@link Mono#just(Object)} and {@link Mono#error(Throwable)}.
reactor3/src/main/java/com/linecorp/armeria/common/reactor3/RequestContextHooks.java