Initial commit

This commit is contained in:
tommyskeff
2023-11-19 20:55:02 +00:00
commit 08e97d81a4
34 changed files with 1807 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
package dev.tommyjs.futur.reactivestreams;
import dev.tommyjs.futur.promise.Promise;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Publisher;
public class ReactiveTransformer {
public static <T> @NotNull Promise<T> wrapPublisher(@NotNull Publisher<T> publisher) {
SingleAccumulatorSubscriber<T> subscriber = SingleAccumulatorSubscriber.create();
publisher.subscribe(subscriber);
return subscriber.getPromise();
}
}

View File

@@ -0,0 +1,47 @@
package dev.tommyjs.futur.reactivestreams;
import dev.tommyjs.futur.promise.Promise;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
public class SingleAccumulatorSubscriber<T> implements Subscriber<T> {
private final Promise<T> promise;
public SingleAccumulatorSubscriber(Promise<T> promise) {
this.promise = promise;
}
@Override
public void onSubscribe(Subscription s) {
s.request(1);
}
@Override
public void onNext(T t) {
promise.complete(t);
}
@Override
public void onError(Throwable t) {
promise.completeExceptionally(t);
}
@Override
public void onComplete() {
// ignore
}
public Promise<T> getPromise() {
return promise;
}
public static <T> SingleAccumulatorSubscriber<T> create(Promise<T> promise) {
return new SingleAccumulatorSubscriber<>(promise);
}
public static <T> SingleAccumulatorSubscriber<T> create() {
return create(new Promise<>());
}
}