8
pom.xml
8
pom.xml
@@ -148,6 +148,14 @@
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- SmallRye Mutiny, see:https://smallrye.io/smallrye-mutiny/ -->
|
||||
<dependency>
|
||||
<groupId>io.smallrye.reactive</groupId>
|
||||
<artifactId>mutiny</artifactId>
|
||||
<version>${smallrye-mutiny}</version>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<!-- Querydsl -->
|
||||
|
||||
<dependency>
|
||||
|
||||
@@ -17,6 +17,8 @@ package org.springframework.data.repository.util;
|
||||
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.Maybe;
|
||||
import io.smallrye.mutiny.Multi;
|
||||
import io.smallrye.mutiny.Uni;
|
||||
import kotlinx.coroutines.flow.Flow;
|
||||
import kotlinx.coroutines.flow.FlowKt;
|
||||
import kotlinx.coroutines.reactive.ReactiveFlowKt;
|
||||
@@ -104,6 +106,11 @@ public abstract class ReactiveWrapperConverters {
|
||||
REACTIVE_WRAPPERS.add(FlowWrapper.INSTANCE);
|
||||
}
|
||||
|
||||
if (ReactiveWrappers.isAvailable(ReactiveLibrary.MUTINY)) {
|
||||
REACTIVE_WRAPPERS.add(UniWrapper.INSTANCE);
|
||||
REACTIVE_WRAPPERS.add(MultiWrapper.INSTANCE);
|
||||
}
|
||||
|
||||
registerConvertersIn(GENERIC_CONVERSION_SERVICE);
|
||||
}
|
||||
|
||||
@@ -527,6 +534,43 @@ public abstract class ReactiveWrapperConverters {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for SmallRye Mutiny's {@link io.smallrye.mutiny.Uni}.
|
||||
*/
|
||||
private enum UniWrapper implements ReactiveTypeWrapper<io.smallrye.mutiny.Uni<?>> {
|
||||
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public Class<? super io.smallrye.mutiny.Uni<?>> getWrapperClass() {
|
||||
return io.smallrye.mutiny.Uni.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public io.smallrye.mutiny.Uni<?> map(Object wrapper, Function<Object, Object> function) {
|
||||
return ((io.smallrye.mutiny.Uni<?>) wrapper).map(function::apply);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper for SmallRye Mutiny's {@link io.smallrye.mutiny.Multi}.
|
||||
*/
|
||||
private enum MultiWrapper implements ReactiveTypeWrapper<io.smallrye.mutiny.Multi<?>> {
|
||||
|
||||
INSTANCE;
|
||||
|
||||
@Override
|
||||
public Class<? super io.smallrye.mutiny.Multi<?>> getWrapperClass() {
|
||||
return io.smallrye.mutiny.Multi.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public io.smallrye.mutiny.Multi<?> map(Object wrapper, Function<Object, Object> function) {
|
||||
return ((io.smallrye.mutiny.Multi<?>) wrapper).map(function::apply);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// ReactiveStreams converters
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@@ -83,6 +83,9 @@ public abstract class ReactiveWrappers {
|
||||
private static final boolean KOTLIN_COROUTINES_PRESENT = ClassUtils.isPresent("kotlinx.coroutines.reactor.MonoKt",
|
||||
ReactiveWrappers.class.getClassLoader());
|
||||
|
||||
private static final boolean MUTINY_PRESENT = ClassUtils.isPresent("io.smallrye.mutiny.Multi",
|
||||
ReactiveWrappers.class.getClassLoader());
|
||||
|
||||
private ReactiveWrappers() {}
|
||||
|
||||
/**
|
||||
@@ -104,7 +107,7 @@ public abstract class ReactiveWrappers {
|
||||
* @deprecated since 2.6, use RxJava 3 instead. To be removed with Spring Data 3.0.
|
||||
*/
|
||||
@Deprecated
|
||||
RXJAVA2, RXJAVA3, KOTLIN_COROUTINES;
|
||||
RXJAVA2, RXJAVA3, KOTLIN_COROUTINES, MUTINY;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,6 +141,8 @@ public abstract class ReactiveWrappers {
|
||||
return RXJAVA3_PRESENT;
|
||||
case KOTLIN_COROUTINES:
|
||||
return PROJECT_REACTOR_PRESENT && KOTLIN_COROUTINES_PRESENT;
|
||||
case MUTINY:
|
||||
return MUTINY_PRESENT;
|
||||
default:
|
||||
throw new IllegalArgumentException(String.format("Reactive library %s not supported", reactiveLibrary));
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ package org.springframework.data.repository.util;
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.*;
|
||||
|
||||
import io.reactivex.Maybe;
|
||||
import io.smallrye.mutiny.Multi;
|
||||
import io.smallrye.mutiny.Uni;
|
||||
import kotlinx.coroutines.flow.Flow;
|
||||
import kotlinx.coroutines.flow.FlowKt;
|
||||
import kotlinx.coroutines.reactive.ReactiveFlowKt;
|
||||
@@ -82,6 +84,13 @@ class ReactiveWrapperConvertersUnitTests {
|
||||
assertThat(ReactiveWrapperConverters.supports(io.reactivex.rxjava3.core.Completable.class)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldSupportMutinyTypes() {
|
||||
|
||||
assertThat(ReactiveWrapperConverters.supports(Uni.class)).isTrue();
|
||||
assertThat(ReactiveWrapperConverters.supports(Multi.class)).isTrue();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-836
|
||||
void toWrapperShouldCastMonoToMono() {
|
||||
|
||||
|
||||
@@ -55,6 +55,8 @@ class ReactiveWrappersUnitTests {
|
||||
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.rxjava3.core.Maybe.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.rxjava3.core.Flowable.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.rxjava3.core.Observable.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isNoValueType(io.smallrye.mutiny.Uni.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isNoValueType(io.smallrye.mutiny.Multi.class)).isFalse();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-836, DATACMNS-1653, DATACMNS-1753
|
||||
@@ -77,6 +79,8 @@ class ReactiveWrappersUnitTests {
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.rxjava3.core.Maybe.class)).isTrue();
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.rxjava3.core.Flowable.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.rxjava3.core.Observable.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.smallrye.mutiny.Uni.class)).isTrue();
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.smallrye.mutiny.Multi.class)).isFalse();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-836, DATACMNS-1653, DATACMNS-1753
|
||||
@@ -97,5 +101,7 @@ class ReactiveWrappersUnitTests {
|
||||
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.rxjava3.core.Completable.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isMultiValueType(io.reactivex.rxjava3.core.Flowable.class)).isTrue();
|
||||
assertThat(ReactiveWrappers.isMultiValueType(io.reactivex.rxjava3.core.Observable.class)).isTrue();
|
||||
assertThat(ReactiveWrappers.isMultiValueType(io.smallrye.mutiny.Uni.class)).isFalse();
|
||||
assertThat(ReactiveWrappers.isMultiValueType(io.smallrye.mutiny.Multi.class)).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user