1use std::collections::HashMap;
6use std::path::Path;
7use std::sync::Arc;
8use async_trait::async_trait;
9use serde::{Deserialize, Serialize};
10use oxidite_core::{Router, Result, Error};
11use oxidite_config::Config;
12
13pub mod plugin;
14pub mod loader;
15pub mod manager;
16
17pub use plugin::{Plugin, PluginInfo, PluginHook, HookResult};
19pub use loader::PluginLoader;
20pub use manager::PluginManager;
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct PluginConfig {
25 pub enabled_plugins: Vec<String>,
26 pub plugin_directory: String,
27 pub auto_reload: bool,
28}
29
30impl Default for PluginConfig {
31 fn default() -> Self {
32 Self {
33 enabled_plugins: Vec::new(),
34 plugin_directory: "./plugins".to_string(),
35 auto_reload: false,
36 }
37 }
38}
39
40pub fn create_manager(config: PluginConfig) -> PluginManager {
42 PluginManager::new(config)
43}