Skip to main content

LoadedPlugin

Struct LoadedPlugin 

Source
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

Source

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()?;
Source

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.

Source

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.

Source

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.

Source

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.

Source

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).

Source

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.

Trait Implementations§

Source§

impl Debug for LoadedPlugin

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more