better Mono wrapper and get groovy with Gradle

This commit is contained in:
WhatCats
2024-03-29 18:53:43 +01:00
parent 8d1ed04b1d
commit 7763f1e40b
15 changed files with 78 additions and 248 deletions

View File

@@ -3,29 +3,13 @@ package dev.tommyjs.futur.reactor;
import dev.tommyjs.futur.promise.Promise;
import dev.tommyjs.futur.promise.PromiseFactory;
import org.jetbrains.annotations.NotNull;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
public class ReactorTransformer {
public static <T> @NotNull Promise<T> wrapMono(@NotNull Mono<T> mono, PromiseFactory factory) {
Promise<T> promise = factory.unresolved();
mono.doOnSuccess(promise::complete).doOnError(promise::completeExceptionally).subscribe();
return promise;
}
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<>());
flux.doOnNext(out.get()::add).subscribe();
flux.doOnComplete(() -> promise.complete(out.get())).subscribe();
flux.doOnError(promise::completeExceptionally).subscribe();
mono.subscribe(promise::complete, promise::completeExceptionally);
return promise;
}

View File

@@ -0,0 +1,21 @@
package dev.tommyjs.futur.reactor;
import dev.tommyjs.futur.executor.SinglePoolExecutor;
import dev.tommyjs.futur.impl.SimplePromiseFactory;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
public class ReactorTest {
@Test
void test() {
Logger logger = LoggerFactory.getLogger(ReactorTest.class);
var pfac = new SimplePromiseFactory(SinglePoolExecutor.create(1), logger);
ReactorTransformer.wrapMono(Mono.error(new Exception("Test Error")), pfac)
.logExceptions("test");
}
}