All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.org.brightify.hyperdrive.krpc.protocol.ProtocolUpgradeService.kt Maven / Gradle / Ivy

package org.brightify.hyperdrive.krpc.protocol

import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.builtins.serializer
import org.brightify.hyperdrive.krpc.description.SingleCallDescription
import org.brightify.hyperdrive.krpc.RPCTransport
import org.brightify.hyperdrive.krpc.description.ServiceCallIdentifier
import org.brightify.hyperdrive.krpc.description.ServiceDescription
import org.brightify.hyperdrive.krpc.description.ServiceDescriptor
import org.brightify.hyperdrive.krpc.error.RPCErrorSerializer

interface ProtocolUpgradeService {
    suspend fun upgradeIfPossible(supportedProtocols: List): RPCProtocol.Version

    suspend fun confirmProtocolSelected()

    class Client(private val transport: RPCTransport): ProtocolUpgradeService {
        override suspend fun upgradeIfPossible(supportedProtocols: List): RPCProtocol.Version {
            return transport.singleCall(Descriptor.upgradeIfPossible, supportedProtocols)
        }

        override suspend fun confirmProtocolSelected() {
            return transport.singleCall(Descriptor.confirmProtocolSelected, Unit)
        }
    }

    object Descriptor: ServiceDescriptor {
        val serviceId = "hyperdrive.ProtocolUpgradeService"

        val upgradeIfPossible = SingleCallDescription(
            ServiceCallIdentifier(serviceId, ProtocolUpgradeService::upgradeIfPossible.name),
            ListSerializer(RPCProtocol.Version.serializer()),
            RPCProtocol.Version.serializer(),
            RPCErrorSerializer(),
        )

        val confirmProtocolSelected = SingleCallDescription(
            ServiceCallIdentifier(serviceId, ProtocolUpgradeService::confirmProtocolSelected.name),
            Unit.serializer(),
            Unit.serializer(),
            RPCErrorSerializer(),
        )

        override fun describe(service: ProtocolUpgradeService): ServiceDescription {
            return ServiceDescription(serviceId, listOf(
                upgradeIfPossible.calling { service.upgradeIfPossible(it) },
                confirmProtocolSelected.calling { service.confirmProtocolSelected() },
            ))
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy