reactor-core/src/main/java/reactor/core/publisher/Operators.java
@SuppressWarnings("unchecked")
	public static <T> CoreSubscriber<? super T> toCoreSubscriber(Subscriber<? super T> actual) {

		Objects.requireNonNull(actual, "actual");

		CoreSubscriber<? super T> _actual;

		if (actual instanceof CoreSubscriber){
			_actual = (CoreSubscriber<? super T>) actual;
		}
		else {
			_actual = new StrictSubscriber<>(actual);
		}

		return _actual;
	}
@SuppressWarnings("unchecked")
	public static <T> CoreSubscriber<? super T> toCoreSubscriber(Subscriber<? super T> actual) {

		Objects.requireNonNull(actual, "actual");

		CoreSubscriber<? super T> _actual;

		if (actual instanceof CoreSubscriber){
			_actual = (CoreSubscriber<? super T>) actual;
		}
		else {
			_actual = new StrictSubscriber<>(actual);
		}

		return _actual;
	}
If the actual {@link Subscriber} is not a {@link CoreSubscriber}, it will apply
safe strict wrapping to apply all reactive streams rules including the ones
relaxed by internal operators based on {@link CoreSubscriber}.

@param <T> passed subscriber type

@param actual the {@link Subscriber} to apply hook on
@return an eventually transformed {@link Subscriber}