![JAR search and dependency download from the Maven repository](/logo.png)
commonMain.io.polywrap.client.PolywrapClient.kt Maven / Gradle / Ivy
package io.polywrap.client
import io.polywrap.core.Client
import io.polywrap.core.Invoker
import io.polywrap.core.Wrapper
import io.polywrap.core.resolution.Uri
import uniffi.polywrap_native.FfiClient
import uniffi.polywrap_native.FfiUriPackageOrWrapper
import uniffi.polywrap_native.FfiUriResolutionContext
import uniffi.polywrap_native.FfiWrapper
@OptIn(ExperimentalUnsignedTypes::class)
class PolywrapClient(private val ffiClient: FfiClient) : Invoker(ffiClient.asInvoker()), Client, AutoCloseable {
override fun invokeWrapperRaw(
wrapper: Wrapper,
uri: Uri,
method: String,
args: ByteArray?,
env: ByteArray?,
resolutionContext: FfiUriResolutionContext?
): Result = runCatching {
uri.toFfi().use { ffiUri ->
FfiWrapper(wrapper).use { ffiWrapper ->
ffiClient.invokeWrapperRaw(
wrapper = ffiWrapper,
uri = ffiUri,
method = method,
args = args?.asUByteArray()?.toList(),
env = env?.asUByteArray()?.toList(),
resolutionContext = resolutionContext
)
}
}
}.map {
it.toUByteArray().asByteArray()
}
override fun loadWrapper(
uri: Uri,
resolutionContext: FfiUriResolutionContext?
): Result = runCatching {
val ffiWrapper = uri.toFfi().use { ffiClient.loadWrapper(it, resolutionContext) }
Wrapper.fromFfi(ffiWrapper)
}
override fun tryResolveUri(
uri: Uri,
resolutionContext: FfiUriResolutionContext?
): Result = runCatching {
uri.toFfi().use { ffiClient.tryResolveUri(it, resolutionContext) }
}
override fun close() {
ffiInvoker.close()
ffiClient.close()
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy