make other modules compatible with 1.2.0

This commit is contained in:
tommyskeff
2023-12-22 17:59:04 +00:00
parent 173e34810c
commit 6fc6c9f236
9 changed files with 55 additions and 58 deletions

View File

@@ -1,35 +0,0 @@
package dev.tommyjs.test;
import dev.tommyjs.futur.promise.PooledPromiseFactory;
import dev.tommyjs.futur.promise.Promise;
import dev.tommyjs.futur.promise.PromiseFactory;
import dev.tommyjs.futur.scheduler.Scheduler;
import dev.tommyjs.futur.scheduler.SingleExecutorScheduler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Test {
public static void main(String[] args) throws InterruptedException {
Scheduler scheduler = new SingleExecutorScheduler(Executors.newScheduledThreadPool(4));
Logger logger = LoggerFactory.getLogger(Test.class);
PromiseFactory factory = new PooledPromiseFactory(scheduler, logger);
Thread.sleep(2000);
Promise.start(factory)
.thenRunAsync(() -> {
System.out.println("HI");
})
.thenApplyDelayedAsync(_v -> {
return "ABC";
}, 1L, TimeUnit.SECONDS)
.thenConsumeSync(t -> {
System.out.println(t);
});
}
}

View File

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

View File

@@ -1,14 +1,17 @@
package dev.tommyjs.futur.reactivestreams; package dev.tommyjs.futur.reactivestreams;
import dev.tommyjs.futur.promise.AbstractPromise; import dev.tommyjs.futur.promise.AbstractPromise;
import dev.tommyjs.futur.promise.Promise;
import dev.tommyjs.futur.promise.PromiseFactory;
import dev.tommyjs.futur.promise.UnpooledPromiseFactory;
import org.reactivestreams.Subscriber; import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription; import org.reactivestreams.Subscription;
public class SingleAccumulatorSubscriber<T> implements Subscriber<T> { public class SingleAccumulatorSubscriber<T> implements Subscriber<T> {
private final AbstractPromise<T> promise; private final Promise<T> promise;
public SingleAccumulatorSubscriber(AbstractPromise<T> promise) { public SingleAccumulatorSubscriber(Promise<T> promise) {
this.promise = promise; this.promise = promise;
} }
@@ -32,16 +35,20 @@ public class SingleAccumulatorSubscriber<T> implements Subscriber<T> {
// ignore // ignore
} }
public AbstractPromise<T> getPromise() { public Promise<T> getPromise() {
return promise; return promise;
} }
public static <T> SingleAccumulatorSubscriber<T> create(AbstractPromise<T> promise) { public static <T> SingleAccumulatorSubscriber<T> create(Promise<T> promise) {
return new SingleAccumulatorSubscriber<>(promise); return new SingleAccumulatorSubscriber<>(promise);
} }
public static <T> SingleAccumulatorSubscriber<T> create(PromiseFactory factory) {
return create(factory.unresolved());
}
public static <T> SingleAccumulatorSubscriber<T> create() { public static <T> SingleAccumulatorSubscriber<T> create() {
return create(new AbstractPromise<>()); return create(UnpooledPromiseFactory.INSTANCE);
} }
} }

View File

@@ -1,6 +1,9 @@
package dev.tommyjs.futur.reactor; package dev.tommyjs.futur.reactor;
import dev.tommyjs.futur.promise.AbstractPromise; import dev.tommyjs.futur.promise.AbstractPromise;
import dev.tommyjs.futur.promise.PromiseFactory;
import dev.tommyjs.futur.promise.Promise;
import dev.tommyjs.futur.promise.UnpooledPromiseFactory;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
@@ -11,14 +14,18 @@ import java.util.concurrent.atomic.AtomicReference;
public class ReactorTransformer { public class ReactorTransformer {
public static <T> @NotNull AbstractPromise<T> wrapMono(@NotNull Mono<T> mono) { public static <T> @NotNull Promise<T> wrapMono(@NotNull Mono<T> mono, PromiseFactory factory) {
AbstractPromise<T> promise = new AbstractPromise<>(); Promise<T> promise = factory.unresolved();
mono.doOnSuccess(promise::complete).doOnError(promise::completeExceptionally).subscribe(); mono.doOnSuccess(promise::complete).doOnError(promise::completeExceptionally).subscribe();
return promise; return promise;
} }
public static <T> @NotNull AbstractPromise<@NotNull List<T>> wrapFlux(@NotNull Flux<T> flux) { public static <T> @NotNull Promise<T> wrapMono(@NotNull Mono<T> mono) {
AbstractPromise<List<T>> promise = new AbstractPromise<>(); return wrapMono(mono, UnpooledPromiseFactory.INSTANCE);
}
public static <T> @NotNull Promise<@NotNull List<T>> wrapFlux(@NotNull Flux<T> flux, PromiseFactory factory) {
Promise<List<T>> promise = factory.unresolved();
AtomicReference<List<T>> out = new AtomicReference<>(new ArrayList<>()); AtomicReference<List<T>> out = new AtomicReference<>(new ArrayList<>());
flux.doOnNext(out.get()::add).subscribe(); flux.doOnNext(out.get()::add).subscribe();
@@ -28,4 +35,8 @@ public class ReactorTransformer {
return promise; return promise;
} }
public static <T> @NotNull Promise<@NotNull List<T>> wrapFlux(@NotNull Flux<T> flux) {
return wrapFlux(flux, UnpooledPromiseFactory.INSTANCE);
}
} }

View File

@@ -14,6 +14,7 @@ repositories {
dependencies { dependencies {
implementation("org.jetbrains:annotations:24.1.0") implementation("org.jetbrains:annotations:24.1.0")
implementation("org.slf4j:slf4j-api:2.0.9")
compileOnly(project(mapOf("path" to ":futur-api"))) compileOnly(project(mapOf("path" to ":futur-api")))
testImplementation(platform("org.junit:junit-bom:5.9.1")) testImplementation(platform("org.junit:junit-bom:5.9.1"))
testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.junit.jupiter:junit-jupiter")

View File

@@ -33,17 +33,17 @@ public class ExclusiveThreadPoolScheduler implements Scheduler {
@Override @Override
public void runAsync(@NotNull Runnable task, @NotNull ExecutorTrace trace) { public void runAsync(@NotNull Runnable task, @NotNull ExecutorTrace trace) {
executor.submit(wrapExceptions(task, trace)); executor.submit(Scheduler.wrapExceptions(task, trace));
} }
@Override @Override
public void runDelayedAsync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runDelayedAsync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
executor.schedule(wrapExceptions(task, trace), delay, unit); executor.schedule(Scheduler.wrapExceptions(task, trace), delay, unit);
} }
@Override @Override
public void runRepeatingAsync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runRepeatingAsync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
executor.scheduleAtFixedRate(wrapExceptions(task, trace), 0L, interval, unit); executor.scheduleAtFixedRate(Scheduler.wrapExceptions(task, trace), 0L, interval, unit);
} }
public @NotNull ScheduledExecutorService getExecutor() { public @NotNull ScheduledExecutorService getExecutor() {

View File

@@ -1,5 +1,7 @@
package dev.tommyjs.futur.promise; package dev.tommyjs.futur.standalone;
import dev.tommyjs.futur.promise.AbstractPromise;
import dev.tommyjs.futur.promise.PromiseFactory;
import dev.tommyjs.futur.scheduler.Scheduler; import dev.tommyjs.futur.scheduler.Scheduler;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@@ -1,5 +1,9 @@
package dev.tommyjs.futur.promise; package dev.tommyjs.futur.standalone;
import dev.tommyjs.futur.promise.AbstractPromise;
import dev.tommyjs.futur.promise.Promise;
import dev.tommyjs.futur.promise.PromiseCompletion;
import dev.tommyjs.futur.promise.PromiseFactory;
import dev.tommyjs.futur.scheduler.Scheduler; import dev.tommyjs.futur.scheduler.Scheduler;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -17,7 +21,7 @@ public class PooledPromiseFactory implements PromiseFactory {
@Override @Override
public @NotNull <T> Promise<T> resolve(T value) { public @NotNull <T> Promise<T> resolve(T value) {
AbstractPromise<T> promise = new PooledPromise<>(scheduler, logger, this); AbstractPromise<T> promise = new PooledPromise<>(scheduler, logger, this);
promise.setCompletion(new PromiseCompletion<>(value)); promise.complete(value);
return promise; return promise;
} }

View File

@@ -20,32 +20,32 @@ public class ThreadPoolScheduler implements Scheduler {
@Override @Override
public void runSync(@NotNull Runnable task, @NotNull ExecutorTrace trace) { public void runSync(@NotNull Runnable task, @NotNull ExecutorTrace trace) {
syncExecutor.submit(wrapExceptions(task, trace)); syncExecutor.submit(Scheduler.wrapExceptions(task, trace));
} }
@Override @Override
public void runDelayedSync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runDelayedSync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
syncExecutor.schedule(wrapExceptions(task, trace), delay, unit); syncExecutor.schedule(Scheduler.wrapExceptions(task, trace), delay, unit);
} }
@Override @Override
public void runRepeatingSync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runRepeatingSync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
syncExecutor.scheduleAtFixedRate(wrapExceptions(task, trace), 0L, interval, unit); syncExecutor.scheduleAtFixedRate(Scheduler.wrapExceptions(task, trace), 0L, interval, unit);
} }
@Override @Override
public void runAsync(@NotNull Runnable task, @NotNull ExecutorTrace trace) { public void runAsync(@NotNull Runnable task, @NotNull ExecutorTrace trace) {
asyncExecutor.submit(wrapExceptions(task, trace)); asyncExecutor.submit(Scheduler.wrapExceptions(task, trace));
} }
@Override @Override
public void runDelayedAsync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runDelayedAsync(@NotNull Runnable task, long delay, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
asyncExecutor.schedule(wrapExceptions(task, trace), delay, unit); asyncExecutor.schedule(Scheduler.wrapExceptions(task, trace), delay, unit);
} }
@Override @Override
public void runRepeatingAsync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) { public void runRepeatingAsync(@NotNull Runnable task, long interval, @NotNull TimeUnit unit, @NotNull ExecutorTrace trace) {
asyncExecutor.scheduleAtFixedRate(wrapExceptions(task, trace), 0L, interval, unit); asyncExecutor.scheduleAtFixedRate(Scheduler.wrapExceptions(task, trace), 0L, interval, unit);
} }
public @NotNull ScheduledExecutorService getSyncExecutor() { public @NotNull ScheduledExecutorService getSyncExecutor() {