coil-wasm 0.1.0

WASM extension runtime and host APIs for the Coil framework.
Documentation
use super::*;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExtensionPackage {
    pub publisher: String,
    pub manifest: ExtensionManifest,
    pub artifact_source: ExtensionArtifactSource,
    pub artifact_sha256: String,
    pub config_schema: ExtensionConfigSchema,
}

impl ExtensionPackage {
    pub fn new(
        publisher: impl Into<String>,
        manifest: ExtensionManifest,
        artifact_source: ExtensionArtifactSource,
        artifact_sha256: impl Into<String>,
        config_schema: ExtensionConfigSchema,
    ) -> Result<Self, WasmModelError> {
        Ok(Self {
            publisher: require_non_empty("extension_publisher", publisher.into())?,
            manifest,
            artifact_source,
            artifact_sha256: validate_sha256("extension_artifact_sha256", artifact_sha256.into())?,
            config_schema,
        })
    }

    pub fn install(
        &self,
        installation: ExtensionInstallation,
        configured_values: &std::collections::BTreeMap<String, ExtensionConfigValue>,
    ) -> Result<InstalledExtension, WasmModelError> {
        let mut installed = InstalledExtension::install(self.manifest.clone(), installation)?;
        installed.config = self.config_schema.effective_values(configured_values)?;
        installed.artifact = Some(InstalledArtifact::new(
            self.publisher.clone(),
            self.artifact_source.clone(),
            self.artifact_sha256.clone(),
        )?);
        Ok(installed)
    }

    pub fn id(&self) -> &ExtensionId {
        &self.manifest.id
    }

    pub fn version(&self) -> ContractVersion {
        self.manifest.version
    }
}