use crate::callbacks::HostCallbacks;
use crate::metadata::{PluginInstanceContext, PluginMetadata};
use crate::pluginui::{Context, Ui};
pub trait PluginHandler: Send + Sync {
fn initialize(
&mut self,
callbacks: HostCallbacks,
metadata: PluginMetadata,
) -> Result<PluginInstanceContext, Box<dyn std::error::Error>> {
let instance_id = metadata
.instance_id
.as_ref()
.ok_or("Instance ID is required for plugin initialization")?
.clone();
let mut context = PluginInstanceContext::new(instance_id, metadata);
context.set_callbacks(callbacks);
Ok(context)
}
fn update_ui(&mut self, ctx: &Context, ui: &mut Ui, plugin_ctx: &PluginInstanceContext);
fn on_mount(
&mut self,
plugin_ctx: &PluginInstanceContext,
) -> Result<(), Box<dyn std::error::Error>>;
fn on_dispose(
&mut self,
plugin_ctx: &PluginInstanceContext,
) -> Result<(), Box<dyn std::error::Error>>;
fn on_connect(
&mut self,
plugin_ctx: &PluginInstanceContext,
) -> Result<(), Box<dyn std::error::Error>>;
fn on_disconnect(
&mut self,
plugin_ctx: &PluginInstanceContext,
) -> Result<(), Box<dyn std::error::Error>>;
fn handle_message(
&mut self,
message: &str,
plugin_ctx: &PluginInstanceContext,
) -> Result<String, Box<dyn std::error::Error>>;
fn get_metadata<'a>(&self, plugin_ctx: &'a PluginInstanceContext) -> &'a PluginMetadata {
plugin_ctx.get_metadata()
}
}