plugin_interfaces/
handler.rs1use crate::callbacks::HostCallbacks;
2use crate::metadata::{PluginInstanceContext, PluginMetadata};
3use crate::pluginui::{Context, Ui};
4
5pub trait PluginHandler: Send + Sync {
8 fn initialize(
11 &mut self,
12 callbacks: HostCallbacks,
13 metadata: PluginMetadata,
14 ) -> Result<PluginInstanceContext, Box<dyn std::error::Error>> {
15 let instance_id = metadata
17 .instance_id
18 .as_ref()
19 .ok_or("Instance ID is required for plugin initialization")?
20 .clone();
21
22 let mut context = PluginInstanceContext::new(instance_id, metadata);
23 context.set_callbacks(callbacks);
24
25 Ok(context)
26 }
27
28 fn update_ui(&mut self, ctx: &Context, ui: &mut Ui, plugin_ctx: &PluginInstanceContext);
31
32 fn on_mount(
34 &mut self,
35 plugin_ctx: &PluginInstanceContext,
36 ) -> Result<(), Box<dyn std::error::Error>>;
37
38 fn on_dispose(
40 &mut self,
41 plugin_ctx: &PluginInstanceContext,
42 ) -> Result<(), Box<dyn std::error::Error>>;
43
44 fn on_connect(
46 &mut self,
47 plugin_ctx: &PluginInstanceContext,
48 ) -> Result<(), Box<dyn std::error::Error>>;
49
50 fn on_disconnect(
52 &mut self,
53 plugin_ctx: &PluginInstanceContext,
54 ) -> Result<(), Box<dyn std::error::Error>>;
55
56 fn handle_message(
58 &mut self,
59 message: &str,
60 plugin_ctx: &PluginInstanceContext,
61 ) -> Result<String, Box<dyn std::error::Error>>;
62
63 fn get_metadata<'a>(&self, plugin_ctx: &'a PluginInstanceContext) -> &'a PluginMetadata {
65 plugin_ctx.get_metadata()
66 }
67}