kanzi

Attribute Macro plugin

#[plugin]
Expand description

Registers a native Kanzi plugin.

§Attributes

  • plugin(name = PLUGIN_NAME) - Specifies the name used to import the plugin into Kanzi Studio project.

§Requirements

A struct implementing a plugin interface must have a default constructor through Default trait. When the default constructor is called, Kanzi runtime is still not initialized. It will be once IPlugin::register_metadata_override is called.

§Usage

#[kanzi::plugin]
#[derive(Default)]
struct XmlDataSourcePlugin {}

impl kanzi::IPlugin for XmlDataSourcePlugin {
    fn register_metadata_override(&self, domain: &kanzi::Domain) -> kanzi::Result<()> {
        data_source::XmlDataSource::register(domain)
    }
}

Created plugin can be linked statically, by manually calling register_metadata_override on its struct:

fn with_kanzi(domain: &kanzi::Domain) -> kanzi::Result<()> {
    use kanzi::IPlugin;
    XmlDataSourcePlugin::default().register_metadata_override(domain)?;
    Ok(())
}

Created plugin can be linked dynamically. For that the crate where a plugin is defined needs to have crate-type specified in Cargo.toml:

[lib]
crate-type = ["cdylib"]

This macro will generate an extern "C" function expected by Kanzi Studio, which will let Kanzi Studio load compiled plugin.