toStub

inline fun <T : RpcService, S> SerializedService<S>.toStub(): T

Convert a SerializedService to a T for use as a client.

Samples

import com.monkopedia.ksrpc.RpcService
import com.monkopedia.ksrpc.annotation.KsMethod
import com.monkopedia.ksrpc.annotation.KsService
import com.monkopedia.ksrpc.ksrpcEnvironment
import com.monkopedia.ksrpc.rpcObject
import com.monkopedia.ksrpc.serialized
import com.monkopedia.ksrpc.toStub
import kotlinx.serialization.Serializable

fun main() { 
   //sampleStart 
   // Implement the service interface
val service = object : GreetingService {
    override suspend fun greet(name: String): String = "Hello, $name!"
}

// Serialize for hosting on any transport
val env = ksrpcEnvironment { }
val serialized = service.serialized(env) 
   //sampleEnd
}
import com.monkopedia.ksrpc.RpcBidiService
import com.monkopedia.ksrpc.RpcHostService
import com.monkopedia.ksrpc.RpcService
import com.monkopedia.ksrpc.annotation.KsMethod
import com.monkopedia.ksrpc.annotation.KsService
import com.monkopedia.ksrpc.ksrpcEnvironment
import com.monkopedia.ksrpc.rpcObject
import com.monkopedia.ksrpc.serialized
import com.monkopedia.ksrpc.toStub

fun main() { 
   //sampleStart 
   // A @KsMethod can return another @KsService type. The returned service
// is hosted as a sub-service on the same connection, with its own
// channel id managed by the framework.
val factory = object : WorkerFactory {
    override suspend fun createWorker(name: String): ScopedWorker = object : ScopedWorker {
        override suspend fun execute(command: String): String = "[$name] executed: $command"
    }
}

// Serialize and use through a stub -- sub-services work transparently.
val env = ksrpcEnvironment { }
val serialized = factory.serialized(env)
val stub = serialized.toStub<WorkerFactory, String>()
val worker = stub.createWorker("build")
val result = worker.execute("compile") 
   //sampleEnd
}