pub mod loader;
pub mod manager;
pub use loader::{PluginApiError, PluginLoader, PluginRegistrarApi, PLUGIN_ABI_VERSION};
pub use manager::PluginManager;
use crate::network::message::Message;
use crate::events::dispatcher::EventHandle;
use crate::network::peer_manager::PeerManager;
use crate::network::PeerStore;
use std::sync::Arc;
pub struct PluginContext {
pub peer_manager: Arc<PeerManager>,
pub peer_store: PeerStore,
pub events: EventHandle,
}
#[async_trait::async_trait]
pub trait Plugin: Send + Sync {
fn on_message(&self, message: &Message, ctx: &PluginContext);
async fn on_prompt(&self, _input: &str, _ctx: &PluginContext) -> Option<String> {
None
}
fn prompt_prefix(&self) -> Option<&str> {
None
}
fn early_config_defaults(&self) -> Option<crate::config::ConfigDefaults> {
None
}
}
pub trait PluginRegistrar {
fn register_handler(&mut self, plugin: Box<dyn Plugin>);
}