forked from 1b-agent/opencadstudio-upstream
Plugins targeted the host's concrete HostSession type. Add a HostApi trait in ocs_plugin_api behind an optional `host` feature (the only thing that pulls acadrust, so the core crate stays dependency-free). HostSession implements it and BuiltinPlugin::dispatch now takes `&mut dyn HostApi`, so an out-of-tree add-on compiles against the contract crate alone. Per-tab plugin state is reached through object-safe plugin_state* helpers. Completes the phase-1 host-surface extraction in the #100 epic. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
//! # Open CAD Studio plugin API
|
|
//!
|
|
//! The stable, semver-versioned contract an add-on package targets instead of
|
|
//! the `OpenCADStudio` binary internals. It is intentionally **dependency
|
|
//! free** (no `iced`, no `acadrust`) so engine crates and external tooling can
|
|
//! depend on it cheaply.
|
|
//!
|
|
//! Two pieces live here:
|
|
//!
|
|
//! - [`manifest`] — plugin identity ([`PluginManifest`]) and the host ABI
|
|
//! version handshake ([`ApiVersion`]).
|
|
//! - [`ribbon`] — the [`CadModule`] trait and the plain-data ribbon types
|
|
//! ([`RibbonGroup`], [`ToolDef`], …) a plugin uses to describe its tab.
|
|
//!
|
|
//! The runtime host surface a plugin uses at *dispatch* time (document access,
|
|
//! command line, undo) is `acadrust`-typed and therefore lives in the host
|
|
//! binary for now; see `docs/plugin-architecture.md` (phase 1b).
|
|
|
|
pub mod manifest;
|
|
pub mod ribbon;
|
|
|
|
/// Runtime host surface — only built with the `host` feature (pulls `acadrust`).
|
|
#[cfg(feature = "host")]
|
|
pub mod host;
|
|
|
|
pub use manifest::{ApiVersion, PluginManifest, API_VERSION};
|
|
pub use ribbon::{
|
|
CadModule, IconKind, ModuleEvent, RibbonGroup, RibbonItem, StyleKey, ToolDef,
|
|
};
|