use plux_rs::function::FunctionOutput;
use plux_rs::{
Api, LoadPluginContext, Manager, Plugin, RegisterPluginContext, StdInfo, utils::ManagerResult,
};
pub struct CustomManager {
}
impl<'a> Manager<'a, FunctionOutput, StdInfo> for CustomManager {
fn format(&self) -> &'static str {
"cst"
}
fn register_manager(&mut self) -> ManagerResult<()> {
println!("CustomManager::register_manager");
Ok(())
}
fn unregister_manager(&mut self) -> ManagerResult<()> {
println!("CustomManager::unregister_manager");
Ok(())
}
fn register_plugin(&mut self, context: RegisterPluginContext) -> ManagerResult<StdInfo> {
let info = StdInfo {
depends: vec![],
optional_depends: vec![],
};
println!("CustomManager::register_plugin - {}", context.bundle);
Ok(info)
}
fn unregister_plugin(
&mut self,
plugin: &Plugin<'a, FunctionOutput, StdInfo>,
) -> ManagerResult<()> {
println!(
"CustomManager::unregister_plugin - {}",
plugin.info().bundle
);
Ok(())
}
fn load_plugin(
&mut self,
context: LoadPluginContext<'a, '_, FunctionOutput, StdInfo>,
_: Api<FunctionOutput, StdInfo>,
) -> ManagerResult<()> {
println!(
"CustomManager::load_plugin - {}",
context.plugin().info().bundle
);
Ok(())
}
fn unload_plugin(&mut self, plugin: &Plugin<'a, FunctionOutput, StdInfo>) -> ManagerResult<()> {
println!("CustomManager::unload_plugin - {}", plugin.info().bundle);
Ok(())
}
}
impl CustomManager {
pub fn new() -> Self {
Self {}
}
}
use plux_rs::Loader;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut loader = Loader::<FunctionOutput, StdInfo>::new();
loader.context(|mut ctx| {
ctx.register_manager(CustomManager::new())?;
Ok::<(), Box<dyn std::error::Error>>(())
})?;
let bundle = loader.load_plugin_now("my_plugin-v1.0.0.cst")?;
println!("Plugin loaded - Bundle: {}", bundle);
Ok(())
}