pub struct LoadedPlugin { /* private fields */ }Expand description
A loaded routine dynamic library with resolved C symbols.
Keeps the underlying Library alive for the lifetime of this value.
Implementations§
Source§impl LoadedPlugin
impl LoadedPlugin
Sourcepub unsafe fn load(path: &Path) -> Result<Self, String>
pub unsafe fn load(path: &Path) -> Result<Self, String>
Load a routine plugin from a dynamic library path.
Resolves required symbols: cotis_plugin_api_version, cotis_plugin_run,
cotis_plugin_help, cotis_plugin_descriptor_json, cotis_plugin_free_string.
Optionally resolves cotis_plugin_finish_installation.
§Safety
Loading and executing arbitrary dynamic libraries is inherently unsafe. The caller must
ensure path points to a trusted plugin built for the host ABI. Symbol function pointers
are transmuted to 'static lifetimes because this struct owns the Library; this is a
standard libloading pattern.
§Errors
Returns an error string if the file cannot be loaded or a required symbol is missing.
§Examples
let plugin = unsafe { LoadedPlugin::load(path)? };
plugin.ensure_compatible()?;Sourcepub fn ensure_compatible(&self) -> Result<(), String>
pub fn ensure_compatible(&self) -> Result<(), String>
Verify the plugin’s cotis_plugin_api_version matches COTIS_PLUGIN_API_VERSION.
§Errors
Returns an error if the plugin reports a different API version.
Sourcepub fn help(&self) -> Result<String, String>
pub fn help(&self) -> Result<String, String>
Return help text from cotis_plugin_help.
§Errors
Returns an error if the plugin returns null, non-UTF-8 data, or allocation fails.
Sourcepub fn descriptor_json(&self) -> Result<String, String>
pub fn descriptor_json(&self) -> Result<String, String>
Return raw descriptor JSON from cotis_plugin_descriptor_json.
§Errors
Returns an error if the plugin returns null, non-UTF-8 data, or allocation fails.
Sourcepub fn descriptor(&self) -> Result<PluginDescriptor, String>
pub fn descriptor(&self) -> Result<PluginDescriptor, String>
Parse and return the plugin descriptor.
§Errors
Returns an error if Self::descriptor_json fails or JSON does not match PluginDescriptor.
Sourcepub fn run_with_args(&self, args: &[String]) -> Result<i32, String>
pub fn run_with_args(&self, args: &[String]) -> Result<i32, String>
Invoke cotis_plugin_run with the given argument vector.
On cotis-cli run, args[0] is the routine name; remaining entries are passthrough args.
§Errors
Returns an error if any argument contains a NUL byte.
Returns Ok(rc) with the plugin’s exit code (0 = success).
Sourcepub fn finish_installation_if_requested(
&self,
desc: &PluginDescriptor,
) -> Result<(), String>
pub fn finish_installation_if_requested( &self, desc: &PluginDescriptor, ) -> Result<(), String>
If the descriptor opts in (finish_installation: true), runs cotis_plugin_finish_installation.
The host sets COTIS_CLI_CACHE_DIR (and COTIS_CLI_INSTALL_PROJECT_DIR for path: installs)
before calling this. See crate::install.
§Errors
Returns an error if finish_installation is true but the symbol is missing, or if the
hook returns a non-zero exit code.