|
|
|
|
@ -24,6 +24,8 @@ import java.util.concurrent.CompletableFuture;
@@ -24,6 +24,8 @@ import java.util.concurrent.CompletableFuture;
|
|
|
|
|
import java.util.concurrent.CompletionStage; |
|
|
|
|
import java.util.function.Function; |
|
|
|
|
|
|
|
|
|
import io.smallrye.mutiny.Multi; |
|
|
|
|
import io.smallrye.mutiny.Uni; |
|
|
|
|
import kotlinx.coroutines.CompletableDeferredKt; |
|
|
|
|
import kotlinx.coroutines.Deferred; |
|
|
|
|
import org.reactivestreams.Publisher; |
|
|
|
|
@ -72,6 +74,8 @@ public class ReactiveAdapterRegistry {
@@ -72,6 +74,8 @@ public class ReactiveAdapterRegistry {
|
|
|
|
|
|
|
|
|
|
private static final boolean kotlinCoroutinesPresent; |
|
|
|
|
|
|
|
|
|
private static final boolean mutinyPresent; |
|
|
|
|
|
|
|
|
|
static { |
|
|
|
|
ClassLoader classLoader = ReactiveAdapterRegistry.class.getClassLoader(); |
|
|
|
|
reactorPresent = ClassUtils.isPresent("reactor.core.publisher.Flux", classLoader); |
|
|
|
|
@ -81,6 +85,7 @@ public class ReactiveAdapterRegistry {
@@ -81,6 +85,7 @@ public class ReactiveAdapterRegistry {
|
|
|
|
|
rxjava3Present = ClassUtils.isPresent("io.reactivex.rxjava3.core.Flowable", classLoader); |
|
|
|
|
flowPublisherPresent = ClassUtils.isPresent("java.util.concurrent.Flow.Publisher", classLoader); |
|
|
|
|
kotlinCoroutinesPresent = ClassUtils.isPresent("kotlinx.coroutines.reactor.MonoKt", classLoader); |
|
|
|
|
mutinyPresent = ClassUtils.isPresent("io.smallrye.mutiny.Uni", classLoader); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private final List<ReactiveAdapter> adapters = new ArrayList<>(); |
|
|
|
|
@ -121,6 +126,11 @@ public class ReactiveAdapterRegistry {
@@ -121,6 +126,11 @@ public class ReactiveAdapterRegistry {
|
|
|
|
|
if (reactorPresent && kotlinCoroutinesPresent) { |
|
|
|
|
new CoroutinesRegistrar().registerAdapters(this); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SmallRye Mutiny
|
|
|
|
|
if (mutinyPresent) { |
|
|
|
|
new MutinyRegistrar().registerAdapters(this); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -417,6 +427,23 @@ public class ReactiveAdapterRegistry {
@@ -417,6 +427,23 @@ public class ReactiveAdapterRegistry {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static class MutinyRegistrar { |
|
|
|
|
|
|
|
|
|
void registerAdapters(ReactiveAdapterRegistry registry) { |
|
|
|
|
registry.registerReactiveType( |
|
|
|
|
ReactiveTypeDescriptor.singleOptionalValue(Uni.class, ()-> Uni.createFrom().nothing()), |
|
|
|
|
uni ->((Uni<?>)uni).convert().toPublisher(), |
|
|
|
|
publisher -> Uni.createFrom().publisher(publisher) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
registry.registerReactiveType( |
|
|
|
|
ReactiveTypeDescriptor.multiValue(Multi.class, ()-> Multi.createFrom().empty()), |
|
|
|
|
multi -> (Multi<?>) multi, |
|
|
|
|
publisher-> Multi.createFrom().publisher(publisher) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* {@code BlockHoundIntegration} for spring-core classes. |
|
|
|
|
|