Kotlin integration#
The module mutiny-kotlin
provides an integration with Kotlin for use with coroutines and convenient language features.
There are extension methods available for converting between Mutiny and Kotlin (coroutine) types. For implementation details please have also a look to these methods’ documentation.
Dependency coordinates#
The coroutine extension functions are shipped in the package io.smallrye.mutiny.coroutines
.
You need to add the following dependency to your project:
Awaiting a Uni in coroutines#
Within a coroutine or suspend function you can easily await Uni events in a suspended way:
Processing a Multi as Flow#
The coroutine Flow
type matches Multi
semantically, even though it isn’t a feature complete reactive streams implementation.
You can process a Multi
as Flow
as follows:
Note
There’s no flow control availabe for Kotlin’s Flow
. Published items are buffered for consumption using a coroutine Channel
.
The buffer size and overflow strategy of that Channel
can be configured using optional arguments:
Multi.asFlow(bufferCapacity = Channel.UNLIMITED, bufferOverflowStrategy = BufferOverflow.SUSPEND)
,
for more details please consult the method documentation.
Providing a Deferred value as Uni#
The other way around is also possible, let a Deferred become a Uni:
Creating a Multi from a Flow#
Finally, creating a Multi from a Flow is also possible:
Language convenience#
Unit instead of Void (null) value#
Kotlin has a special value type Unit
similar to Java’s Void
.
While regular Uni<Void>
holds a null
item, you can get a Unit
by using the extension function replaceWithUnit()
:
Uni builder#
Building a Uni
from Kotlin code can easily be achieved using the following builders available as regular or coroutine variant: