![JAR search and dependency download from the Maven repository](/logo.png)
mutiny.zero.internal.GeneratorPublisher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mutiny-zero Show documentation
Show all versions of mutiny-zero Show documentation
Mutiny Zero is a minimal API for creating reactive-streams compliant publishers
package mutiny.zero.internal;
import static java.util.Objects.requireNonNull;
import java.util.Iterator;
import java.util.concurrent.Flow;
import java.util.function.Function;
import java.util.function.Supplier;
public class GeneratorPublisher implements Flow.Publisher {
private final Supplier stateSupplier;
private final Function> generator;
public GeneratorPublisher(Supplier stateSupplier, Function> generator) {
this.stateSupplier = stateSupplier;
this.generator = generator;
}
@Override
public void subscribe(Flow.Subscriber super T> subscriber) {
requireNonNull(subscriber, "The subscriber cannot be null");
Iterator iterator = generator.apply(stateSupplier.get());
if (iterator == null) {
subscriber.onSubscribe(new AlreadyCompletedSubscription());
subscriber.onError(new IllegalArgumentException("The generator cannot produce a null iterator"));
} else if (!iterator.hasNext()) {
subscriber.onSubscribe(new AlreadyCompletedSubscription());
subscriber.onComplete();
} else {
subscriber.onSubscribe(new IteratorSubscription<>(iterator, subscriber));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy