Skip to main content

dpp_plugin_traits/
lib.rs

1//! Host/guest ABI contract for Odal Node sector plugins.
2//!
3//! Plugins implement [`DppSectorPlugin`] and export the three entry points
4//! as `extern "C"` symbols. The host invokes them through the wasmtime
5//! component model or directly via the low-level ABI defined below.
6//!
7//! The interface is intentionally `no_std`-friendly: no heap allocations
8//! are required from the host's perspective. Data is passed as JSON strings
9//! over a shared-memory slice.
10//!
11//! ## Versioning
12//!
13//! Every plugin declares which ABI version and schema versions it supports
14//! via [`PluginCapabilities`]. The host uses this for compatibility checks
15//! before dispatching any calls.
16//!
17//! ## Module layout
18//!
19//! - `version` — [`AbiVersion`], [`SchemaVersionRange`], [`CompatibilityStatus`],
20//!   and [`check_compatibility`] (ABI/schema/capability negotiation).
21//! - `meta` — [`PluginMeta`], [`PluginCapability`], [`PluginCapabilities`].
22//! - `result` — [`PluginComplianceStatus`], [`PluginFinding`], [`PluginResult`],
23//!   [`AbiResult`] (the call-outcome envelope).
24//! - `error` — [`PluginError`], [`PluginFieldError`].
25//! - `plugin` — [`DppSectorPlugin`], the trait a plugin author implements.
26
27mod error;
28mod meta;
29mod plugin;
30mod result;
31#[cfg(test)]
32mod tests;
33mod version;
34
35pub use error::{PluginError, PluginFieldError};
36pub use meta::{PluginCapabilities, PluginCapability, PluginMeta};
37pub use plugin::{DppSectorPlugin, PluginInput};
38pub use result::{
39    AbiResult, METRIC_CO2E_SCORE, METRIC_RECYCLED_CONTENT_PCT, METRIC_REPAIRABILITY_INDEX,
40    PluginComplianceStatus, PluginFinding, PluginResult,
41};
42pub use version::{
43    ABI_VERSION_MAJOR, ABI_VERSION_MINOR, AbiVersion, CompatibilityStatus, SchemaVersionRange,
44    check_compatibility,
45};