diff --git a/krpc/krpc-server/src/commonMain/kotlin/kotlinx/rpc/krpc/server/internal/KrpcServerService.kt b/krpc/krpc-server/src/commonMain/kotlin/kotlinx/rpc/krpc/server/internal/KrpcServerService.kt index 2b7785a01..bb4070808 100644 --- a/krpc/krpc-server/src/commonMain/kotlin/kotlinx/rpc/krpc/server/internal/KrpcServerService.kt +++ b/krpc/krpc-server/src/commonMain/kotlin/kotlinx/rpc/krpc/server/internal/KrpcServerService.kt @@ -21,6 +21,7 @@ import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialFormat import kotlinx.serialization.StringFormat import kotlin.coroutines.CoroutineContext +import kotlin.reflect.typeOf internal class KrpcServerService<@Rpc T : Any>( private val service: T, @@ -178,6 +179,13 @@ internal class KrpcServerService<@Rpc T : Any>( is RpcInvokator.Field -> { invokator.call(service) } + }.let { interceptedValue -> + // KRPC-173 + if (callable.returnType.kType == typeOf()) { + Unit + } else { + interceptedValue + } } val returnType = callable.returnType diff --git a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestService.kt b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestService.kt index 6a031a73d..d73742059 100644 --- a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestService.kt +++ b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestService.kt @@ -108,6 +108,8 @@ interface KrpcTestService : RemoteService { suspend fun answerToAnything(arg: String): Int + suspend fun krpc173() + val plainFlowOfInts : Flow val plainFlowOfFlowsOfInts : Flow> diff --git a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestServiceBackend.kt b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestServiceBackend.kt index f47ac6bba..1ab271958 100644 --- a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestServiceBackend.kt +++ b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTestServiceBackend.kt @@ -265,6 +265,15 @@ class KrpcTestServiceBackend(override val coroutineContext: CoroutineContext) : return 42 } + private suspend fun doWork(): String { + delay(1) + return "qwerty" + } + + override suspend fun krpc173() { + doWork() + } + override val plainFlowOfInts: Flow = plainFlow { it } override val plainFlowOfFlowsOfInts: Flow> = plainFlow { plainFlow { i -> i } } diff --git a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTransportTestBase.kt b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTransportTestBase.kt index b1456e09f..adafdd08d 100644 --- a/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTransportTestBase.kt +++ b/krpc/krpc-test/src/commonMain/kotlin/kotlinx/rpc/krpc/test/KrpcTransportTestBase.kt @@ -548,6 +548,11 @@ abstract class KrpcTransportTestBase { awaitAll(c1, c2) } + @Test + fun testKrpc173() = runTest { + assertEquals(Unit, client.krpc173()) + } + @Test fun testPlainFlowOfInts() = runTest { val flow = client.plainFlowOfInts.toList()