aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/plugin')
-rw-r--r--crates/shirabe/src/plugin/plugin_interface.rs4
-rw-r--r--crates/shirabe/src/plugin/plugin_manager.rs9
2 files changed, 6 insertions, 7 deletions
diff --git a/crates/shirabe/src/plugin/plugin_interface.rs b/crates/shirabe/src/plugin/plugin_interface.rs
index d335bf0..486dbea 100644
--- a/crates/shirabe/src/plugin/plugin_interface.rs
+++ b/crates/shirabe/src/plugin/plugin_interface.rs
@@ -15,10 +15,6 @@ pub trait PluginInterface: std::fmt::Debug {
fn uninstall(&mut self, composer: &ComposerHandle, io: Rc<RefCell<dyn IOInterface>>);
- fn clone_box(&self) -> Box<dyn PluginInterface> {
- todo!()
- }
-
// TODO(plugin): PHP-side `instanceof` checks for EventSubscriberInterface / Capable.
// EventSubscriberInterface is not dyn-compatible (its only method is associated, not
// a `&self` method), so we expose a boolean predicate instead.
diff --git a/crates/shirabe/src/plugin/plugin_manager.rs b/crates/shirabe/src/plugin/plugin_manager.rs
index e8377f3..da64cee 100644
--- a/crates/shirabe/src/plugin/plugin_manager.rs
+++ b/crates/shirabe/src/plugin/plugin_manager.rs
@@ -182,8 +182,11 @@ impl PluginManager {
}
/// Gets all currently active plugin instances
- pub fn get_plugins(&self) -> Vec<Box<dyn PluginInterface>> {
- self.plugins.iter().map(|p| p.clone_box()).collect()
+ ///
+ /// PHP returns `$this->plugins` directly; the plugin objects are shared by reference, so this
+ /// borrows the stored instances rather than cloning them.
+ pub fn get_plugins(&self) -> &[Box<dyn PluginInterface>] {
+ &self.plugins
}
/// Gets all currently active plugin instances
@@ -723,7 +726,7 @@ impl PluginManager {
) -> Vec<Box<dyn Capability>> {
// TODO(plugin): aggregate capabilities across all loaded plugins
let mut capabilities: Vec<Box<dyn Capability>> = vec![];
- for plugin in &self.get_plugins() {
+ for plugin in self.get_plugins() {
if let Ok(Some(capability)) =
self.get_plugin_capability(&**plugin, capability_class_name, ctor_args.clone())
{