use steckrs::{extension_point, simple_plugin, PluginManager};
extension_point!(
GreeterExtension:
GreeterTrait;
fn greet(&self, name: &str) -> String;
);
struct EnglishGreeter;
impl GreeterTrait for EnglishGreeter {
fn greet(&self, name: &str) -> String {
format!("Hello, {}!", name)
}
}
simple_plugin!(
HelloPlugin,
"hello_plugin",
"A simple greeting plugin",
hooks: [(GreeterExtension, EnglishGreeter)]
);
fn main() {
let mut plugin_manager = PluginManager::new();
plugin_manager
.load_plugin(Box::new(HelloPlugin::new()))
.unwrap();
plugin_manager.enable_plugin(HelloPlugin::ID).unwrap();
let hooks = plugin_manager.get_enabled_hooks_by_ep::<GreeterExtension>();
for (_id, hook) in hooks {
println!("{}", hook.inner().greet("World"));
}
}