Add RSocketRequester retrieveAndAwaitOrNull extension

Closes gh-23874
This commit is contained in:
Sebastien Deleuze 2019-10-27 20:11:08 +01:00
parent 0d8aa854e8
commit 9f242fac66
2 changed files with 18 additions and 0 deletions

View File

@ -112,6 +112,15 @@ suspend fun RSocketRequester.RequestSpec.sendAndAwait() {
suspend inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveAndAwait(): T =
retrieveMono(object : ParameterizedTypeReference<T>() {}).awaitSingle()
/**
* Nullable coroutines variant of [RSocketRequester.RequestSpec.retrieveMono].
*
* @author Sebastien Deleuze
* @since 5.2.1
*/
suspend inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveAndAwaitOrNull(): T? =
retrieveMono(object : ParameterizedTypeReference<T>() {}).awaitFirstOrNull()
/**
* Coroutines variant of [RSocketRequester.RequestSpec.retrieveFlux].
*

View File

@ -120,6 +120,15 @@ class RSocketRequesterExtensionsTests {
}
}
@Test
fun retrieveAndAwaitOrNull() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.empty()
runBlocking {
assertThat(requestSpec.retrieveAndAwaitOrNull<String>()).isNull()
}
}
@Test
fun retrieveFlow() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()