use std::{any::Any, sync::Arc};
use crate::{Handlers, PluginGcConfig, PluginIdentity, PluginMetadata, ShellError};
pub trait RegisteredPlugin: Send + Sync {
fn identity(&self) -> &PluginIdentity;
fn is_running(&self) -> bool;
fn pid(&self) -> Option<u32>;
fn metadata(&self) -> Option<PluginMetadata>;
fn set_metadata(&self, metadata: Option<PluginMetadata>);
fn set_gc_config(&self, gc_config: &PluginGcConfig);
fn stop(&self) -> Result<(), ShellError>;
fn reset(&self) -> Result<(), ShellError>;
fn as_any(self: Arc<Self>) -> Arc<dyn Any + Send + Sync>;
fn configure_signal_handler(self: Arc<Self>, _handler: &Handlers) -> Result<(), ShellError> {
Ok(())
}
}