package io.muoncore.protocol.reactivestream.server; import io.muoncore.protocol.reactivestream.messages.ReactiveStreamSubscriptionRequest; import org.reactivestreams.Publisher; public interface ReactiveStreamServerHandlerApi { default <T> void publishSource(String name, PublisherLookup.PublisherType type, Publisher<T> publisher) { getPublisherLookup().addPublisher(new PublisherLookup.PublisherRecord(name, type, new ImmediatePublisherGenerator<>(publisher))); } default <T> void publishGeneratedSource(String name, PublisherLookup.PublisherType type, PublisherGenerator<T> generator) { getPublisherLookup().addPublisher(new PublisherLookup.PublisherRecord(name, type, generator)); } PublisherLookup getPublisherLookup(); interface PublisherGenerator<T> { Publisher<T> generatePublisher(ReactiveStreamSubscriptionRequest subscriptionRequest); } }