package it.tdlight.reactiveapi; import java.util.concurrent.atomic.AtomicBoolean; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; public class ReactorUtils { public static Flux subscribeOnce(Flux f) { AtomicBoolean subscribed = new AtomicBoolean(); return f.doOnSubscribe(s -> { if (!subscribed.compareAndSet(false, true)) { throw new UnsupportedOperationException("Can't subscribe more than once!"); } }); } public static Mono subscribeOnce(Mono f) { AtomicBoolean subscribed = new AtomicBoolean(); return f.doOnSubscribe(s -> { if (!subscribed.compareAndSet(false, true)) { throw new UnsupportedOperationException("Can't subscribe more than once!"); } }); } }