Make RSocketRequester extensions reified
Extension functions need to use reified types to create ParameterizedTypeReference. Closes gh-23185
This commit is contained in:
parent
2b4d6ce354
commit
4bced4682a
|
|
@ -64,7 +64,7 @@ suspend fun RSocketRequester.Builder.connectWebSocketAndAwait(uri: URI): RSocket
|
|||
*/
|
||||
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
|
||||
@FlowPreview
|
||||
fun <T : Any> RSocketRequester.RequestSpec.data(producer: Any): RSocketRequester.ResponseSpec =
|
||||
inline fun <reified T : Any> RSocketRequester.RequestSpec.data(producer: Any): RSocketRequester.ResponseSpec =
|
||||
data(producer, object : ParameterizedTypeReference<T>() {})
|
||||
|
||||
/**
|
||||
|
|
@ -83,7 +83,7 @@ suspend fun RSocketRequester.ResponseSpec.sendAndAwait() {
|
|||
* @author Sebastien Deleuze
|
||||
* @since 5.2
|
||||
*/
|
||||
suspend fun <T : Any> RSocketRequester.ResponseSpec.retrieveAndAwait(): T =
|
||||
suspend inline fun <reified T : Any> RSocketRequester.ResponseSpec.retrieveAndAwait(): T =
|
||||
retrieveMono(object : ParameterizedTypeReference<T>() {}).awaitSingle()
|
||||
|
||||
/**
|
||||
|
|
@ -93,7 +93,7 @@ suspend fun <T : Any> RSocketRequester.ResponseSpec.retrieveAndAwait(): T =
|
|||
* @since 5.2
|
||||
*/
|
||||
@FlowPreview
|
||||
fun <T : Any> RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Flow<T> =
|
||||
inline fun <reified T : Any> RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Flow<T> =
|
||||
retrieveFlux(object : ParameterizedTypeReference<T>() {}).asFlow(batchSize)
|
||||
|
||||
/**
|
||||
|
|
@ -104,7 +104,7 @@ fun <T : Any> RSocketRequester.ResponseSpec.retrieveFlow(batchSize: Int = 1): Fl
|
|||
* @author Sebastien Deleuze
|
||||
* @since 5.2
|
||||
*/
|
||||
fun <T : Any> RSocketRequester.ResponseSpec.retrieveMono(): Mono<T> =
|
||||
inline fun <reified T : Any> RSocketRequester.ResponseSpec.retrieveMono(): Mono<T> =
|
||||
retrieveMono(object : ParameterizedTypeReference<T>() {})
|
||||
|
||||
|
||||
|
|
@ -116,5 +116,5 @@ fun <T : Any> RSocketRequester.ResponseSpec.retrieveMono(): Mono<T> =
|
|||
* @author Sebastien Deleuze
|
||||
* @since 5.2
|
||||
*/
|
||||
fun <T : Any> RSocketRequester.ResponseSpec.retrieveFlux(): Flux<T> =
|
||||
inline fun <reified T : Any> RSocketRequester.ResponseSpec.retrieveFlux(): Flux<T> =
|
||||
retrieveFlux(object : ParameterizedTypeReference<T>() {})
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ import reactor.core.publisher.Mono
|
|||
@FlowPreview
|
||||
class RSocketRequesterExtensionsTests {
|
||||
|
||||
private val stringTypeRefMatcher: (ParameterizedTypeReference<*>) -> Boolean = { it.type == String::class.java }
|
||||
|
||||
@Test
|
||||
fun connectAndAwait() {
|
||||
val requester = mockk<RSocketRequester>()
|
||||
|
|
@ -56,7 +58,7 @@ class RSocketRequesterExtensionsTests {
|
|||
fun dataFlowWithType() {
|
||||
val requestSpec = mockk<RSocketRequester.RequestSpec>()
|
||||
val responseSpec = mockk<RSocketRequester.ResponseSpec>()
|
||||
every { requestSpec.data(any<Publisher<String>>(), any<ParameterizedTypeReference<String>>()) } returns responseSpec
|
||||
every { requestSpec.data(any<Publisher<String>>(), match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns responseSpec
|
||||
assertEquals(responseSpec, requestSpec.data<String>(mockk()))
|
||||
}
|
||||
|
||||
|
|
@ -81,16 +83,16 @@ class RSocketRequesterExtensionsTests {
|
|||
fun retrieveAndAwait() {
|
||||
val response = "foo"
|
||||
val responseSpec = mockk<RSocketRequester.ResponseSpec>()
|
||||
every { responseSpec.retrieveMono(any<ParameterizedTypeReference<String>>()) } returns Mono.just("foo")
|
||||
every { responseSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
runBlocking {
|
||||
assertEquals(response, responseSpec.retrieveAndAwait())
|
||||
assertEquals(response, responseSpec.retrieveAndAwait<String>())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun retrieveFlow() {
|
||||
val responseSpec = mockk<RSocketRequester.ResponseSpec>()
|
||||
every { responseSpec.retrieveFlux(any<ParameterizedTypeReference<String>>()) } returns Flux.just("foo", "bar")
|
||||
every { responseSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
runBlocking {
|
||||
assertEquals(listOf("foo", "bar"), responseSpec.retrieveFlow<String>().toList())
|
||||
}
|
||||
|
|
@ -99,7 +101,7 @@ class RSocketRequesterExtensionsTests {
|
|||
@Test
|
||||
fun retrieveMono() {
|
||||
val responseSpec = mockk<RSocketRequester.ResponseSpec>()
|
||||
every { responseSpec.retrieveMono(any<ParameterizedTypeReference<String>>()) } returns Mono.just("foo")
|
||||
every { responseSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
|
||||
runBlocking {
|
||||
assertEquals("foo", responseSpec.retrieveMono<String>().block())
|
||||
}
|
||||
|
|
@ -108,7 +110,7 @@ class RSocketRequesterExtensionsTests {
|
|||
@Test
|
||||
fun retrieveFlux() {
|
||||
val responseSpec = mockk<RSocketRequester.ResponseSpec>()
|
||||
every { responseSpec.retrieveFlux(any<ParameterizedTypeReference<String>>()) } returns Flux.just("foo", "bar")
|
||||
every { responseSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
|
||||
runBlocking {
|
||||
assertEquals(listOf("foo", "bar"), responseSpec.retrieveFlux<String>().collectList().block())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue