aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/plugin/capability/capability.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/plugin/capability/capability.rs')
-rw-r--r--crates/shirabe/src/plugin/capability/capability.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/crates/shirabe/src/plugin/capability/capability.rs b/crates/shirabe/src/plugin/capability/capability.rs
index 1788d9a0..aa70ffa0 100644
--- a/crates/shirabe/src/plugin/capability/capability.rs
+++ b/crates/shirabe/src/plugin/capability/capability.rs
@@ -1,4 +1,14 @@
//! ref: composer/src/Composer/Plugin/Capability/Capability.php
-// TODO(plugin): Marker interface for Plugin capabilities. Every new Capability which is added to the Plugin API must implement this interface.
-pub trait Capability {}
+use crate::plugin::capability::CommandProvider;
+
+/// Marker interface for Plugin capabilities. Every new Capability which is added to the
+/// Plugin API must implement this interface.
+///
+/// The accessor replaces PHP's `instanceof` downcast on a capability instance of unknown
+/// concrete type (the way `PluginInterface::as_capable` does for plugins).
+pub trait Capability {
+ fn as_command_provider(&self) -> Option<&dyn CommandProvider> {
+ None
+ }
+}