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

commonMain.io.polywrap.configBuilder.ConfigBuilder.kt Maven / Gradle / Ivy

package io.polywrap.configBuilder

import io.polywrap.client.PolywrapClient

/**
 * A concrete implementation of the [BaseConfigBuilder] class.
 * This class builds [PolywrapClient] instances using provided configurations.
 */
class ConfigBuilder : BaseConfigBuilder() {

    override fun addDefaults(): BaseConfigBuilder = this.apply {
        addBundle(NativeBundle.System)
        addBundle(NativeBundle.Web3)
    }

    override fun build(): PolywrapClient = FfiConfigBuilder().use {
        buildFfiBundles(it)
        buildEnvs(it)
        buildInterfaces(it)
        buildRedirects(it)
        buildWrappers(it)
        buildPackages(it)
        PolywrapClient(it.build())
    }

    private fun buildFfiBundles(ffiConfigBuilder: FfiConfigBuilder) {
        config.ffiBundles.forEach { ffiConfigBuilder.addBundle(it) }
    }

    private fun buildEnvs(ffiConfigBuilder: FfiConfigBuilder) {
        config.envs.forEach { (key, value) ->
            ffiConfigBuilder.addEnv(key, value)
        }
    }

    private fun buildInterfaces(ffiConfigBuilder: FfiConfigBuilder) {
        config.interfaces.forEach { (key, value) ->
            value.forEach {
                ffiConfigBuilder.addInterfaceImplementation(key, it)
            }
        }
    }

    private fun buildRedirects(ffiConfigBuilder: FfiConfigBuilder) {
        config.redirects.forEach { (key, value) ->
            ffiConfigBuilder.addRedirect(key, value)
        }
    }

    private fun buildWrappers(ffiConfigBuilder: FfiConfigBuilder) {
        config.wrappers.forEach { (key, value) ->
            ffiConfigBuilder.addWrapper(key, value)
        }
    }

    private fun buildPackages(ffiConfigBuilder: FfiConfigBuilder) {
        config.packages.forEach { (key, value) ->
            ffiConfigBuilder.addPackage(key, value)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy