Add SmallRye Mutiny adapters
Closes gh-26222
This commit is contained in:
committed by
Rossen Stoyanchev
parent
8f33450df2
commit
1dc128361f
@@ -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 {
|
||||
|
||||
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 {
|
||||
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 {
|
||||
if (reactorPresent && kotlinCoroutinesPresent) {
|
||||
new CoroutinesRegistrar().registerAdapters(this);
|
||||
}
|
||||
|
||||
// SmallRye Mutiny
|
||||
if (mutinyPresent) {
|
||||
new MutinyRegistrar().registerAdapters(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user