Skip to content

Commit ce07d16

Browse files
authored
Allow suspend calls inside ktor rpc builder #433 (#439)
1 parent 9c8fdf4 commit ce07d16

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.api

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public final class kotlinx/rpc/krpc/ktor/server/KrpcRoute : io/ktor/server/webso
2727
}
2828

2929
public final class kotlinx/rpc/krpc/ktor/server/KtorServerDslKt {
30-
public static final fun rpc (Lio/ktor/server/routing/Route;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
31-
public static final fun rpc (Lio/ktor/server/routing/Route;Lkotlin/jvm/functions/Function1;)V
30+
public static final fun rpc (Lio/ktor/server/routing/Route;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
31+
public static final fun rpc (Lio/ktor/server/routing/Route;Lkotlin/jvm/functions/Function2;)V
3232
}
3333

krpc/krpc-ktor/krpc-ktor-server/api/krpc-ktor-server.klib.api

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ final class kotlinx.rpc.krpc.ktor.server/KrpcRoute : io.ktor.server.websocket/De
4747
final val kotlinx.rpc.krpc.ktor.server/Krpc // kotlinx.rpc.krpc.ktor.server/Krpc|{}Krpc[0]
4848
final fun <get-Krpc>(): io.ktor.server.application/ApplicationPlugin<kotlinx.rpc.krpc/KrpcConfigBuilder.Server> // kotlinx.rpc.krpc.ktor.server/Krpc.<get-Krpc>|<get-Krpc>(){}[0]
4949

50-
final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/Function1<kotlinx.rpc.krpc.ktor.server/KrpcRoute, kotlin/Unit>) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.Function1<kotlinx.rpc.krpc.ktor.server.KrpcRoute,kotlin.Unit>){}[0]
51-
final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/String, kotlin/Function1<kotlinx.rpc.krpc.ktor.server/KrpcRoute, kotlin/Unit>) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.String;kotlin.Function1<kotlinx.rpc.krpc.ktor.server.KrpcRoute,kotlin.Unit>){}[0]
50+
final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin.coroutines/SuspendFunction1<kotlinx.rpc.krpc.ktor.server/KrpcRoute, kotlin/Unit>) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.coroutines.SuspendFunction1<kotlinx.rpc.krpc.ktor.server.KrpcRoute,kotlin.Unit>){}[0]
51+
final fun (io.ktor.server.routing/Route).kotlinx.rpc.krpc.ktor.server/rpc(kotlin/String, kotlin.coroutines/SuspendFunction1<kotlinx.rpc.krpc.ktor.server/KrpcRoute, kotlin/Unit>) // kotlinx.rpc.krpc.ktor.server/rpc|rpc@io.ktor.server.routing.Route(kotlin.String;kotlin.coroutines.SuspendFunction1<kotlinx.rpc.krpc.ktor.server.KrpcRoute,kotlin.Unit>){}[0]

krpc/krpc-ktor/krpc-ktor-server/src/commonMain/kotlin/kotlinx/rpc/krpc/ktor/server/KtorServerDsl.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import kotlinx.rpc.krpc.rpcServerConfig
2020
* @param builder Builder function to configure RPC server.
2121
*/
2222
@KtorDsl
23-
public fun Route.rpc(path: String, builder: KrpcRoute.() -> Unit) {
23+
public fun Route.rpc(path: String, builder: suspend KrpcRoute.() -> Unit) {
2424
route(path) {
2525
rpc(builder)
2626
}
@@ -34,16 +34,19 @@ public fun Route.rpc(path: String, builder: KrpcRoute.() -> Unit) {
3434
* @param builder Builder function to configure RPC server.
3535
*/
3636
@KtorDsl
37-
public fun Route.rpc(builder: KrpcRoute.() -> Unit) {
37+
public fun Route.rpc(builder: suspend KrpcRoute.() -> Unit) {
3838
createRpcServer(builder)
3939
}
4040

41-
private fun Route.createRpcServer(rpcRouteBuilder: KrpcRoute.() -> Unit) {
41+
private fun Route.createRpcServer(rpcRouteBuilder: suspend KrpcRoute.() -> Unit) {
4242
application.pluginOrNull(WebSockets)
4343
?: error("RPC for server requires $WebSockets plugin to be installed firstly")
4444

4545
webSocket {
46-
val rpcRoute = KrpcRoute(this).apply(rpcRouteBuilder)
46+
val rpcRoute = KrpcRoute(this).apply {
47+
rpcRouteBuilder()
48+
}
49+
4750
val pluginConfigBuilder = application.attributes.getOrNull(KrpcServerPluginAttributesKey)
4851
val rpcConfig = pluginConfigBuilder?.apply(rpcRoute.configBuilder)?.build()
4952
?: rpcServerConfig(rpcRoute.configBuilder)

0 commit comments

Comments
 (0)