Authoring SDK for hm plugins.
Plugins build to cdylib and target wasm32-wasip1. The canonical
plugin entry point is the [register_plugin!] macro, which wires
every capability the plugin implements to the right Extism export.
use hm_plugin_sdk::*;
use hm_plugin_protocol::*;
struct MyExec;
impl StepExecutor for MyExec {
fn run(&self, input: ExecutorInput) -> Result<StepResult, PluginError> {
host::log(Level::Info, &format!("running {}", input.step.key));
Ok(StepResult { exit_code: 0, committed_snapshot: None, artifacts: vec![] })
}
}
register_plugin!(
manifest = PluginManifest {
api_version: HM_PLUGIN_API_VERSION,
name: "my-exec".into(),
version: semver::Version::parse("0.1.0").unwrap(),
description: "demo".into(),
capabilities: vec![Capability::StepExecutor(StepExecutorSpec {
runner: "demo".into(), default: false, step_schema: None,
})],
required_host_fns: vec!["hm_log".into()],
config_schema: None,
allowed_hosts: vec![],
},
executor = MyExec,
);