diff --git a/src/main/kotlin/reactor/kotlin/core/publisher/MonoExtensions.kt b/src/main/kotlin/reactor/kotlin/core/publisher/MonoExtensions.kt index 83f76fc..b82ec36 100644 --- a/src/main/kotlin/reactor/kotlin/core/publisher/MonoExtensions.kt +++ b/src/main/kotlin/reactor/kotlin/core/publisher/MonoExtensions.kt @@ -18,6 +18,7 @@ package reactor.kotlin.core.publisher import org.reactivestreams.Publisher import reactor.core.publisher.Mono +import java.util.Optional import java.util.concurrent.Callable import java.util.concurrent.CompletableFuture import java.util.function.Function @@ -68,6 +69,20 @@ fun CompletableFuture.toMono(): Mono = Mono.fromFuture(this) */ fun Callable.toMono(): Mono = Mono.fromCallable(this::call) +/** + * Extension for transforming a [Runnable] to a [Mono]. + * + * @author Cyril Delmas + */ +fun Runnable.toMono(): Mono = Mono.fromRunnable(this) + +/** + * Extension for transforming an [Optional] to a [Mono]. + * + * @author Cyril Delmas + */ +fun Optional.toMono(): Mono = Mono.justOrEmpty(this) + /** * Extension for transforming an exception to a [Mono] that completes with the specified error. * diff --git a/src/test/kotlin/reactor/kotlin/core/publisher/MonoExtensionsTests.kt b/src/test/kotlin/reactor/kotlin/core/publisher/MonoExtensionsTests.kt index 2ce3925..6b5ed08 100644 --- a/src/test/kotlin/reactor/kotlin/core/publisher/MonoExtensionsTests.kt +++ b/src/test/kotlin/reactor/kotlin/core/publisher/MonoExtensionsTests.kt @@ -28,6 +28,7 @@ import reactor.kotlin.test.verifyError import reactor.test.StepVerifier import reactor.test.publisher.TestPublisher import java.io.IOException +import java.util.* import java.util.concurrent.Callable import java.util.concurrent.CompletableFuture @@ -164,6 +165,25 @@ class MonoExtensionsTests { .verifyError(IllegalStateException::class) } + @Test + fun optionalToMono() { + StepVerifier.create(Optional.of(42).toMono()) + .expectNext(42) + .verifyComplete() + } + + @Test + fun optionalEmptyToMono() { + StepVerifier.create(Optional.empty().toMono()) + .verifyComplete() + } + + @Test + fun runnableToMono() { + StepVerifier.create(Runnable { }.toMono()) + .verifyComplete() + } + @Test fun `cast() with generic parameter`() { val monoOfAny: Mono = Mono.just("foo")