From 494ecd6204fe55b7c51d8226530656c12e0c58ae Mon Sep 17 00:00:00 2001 From: Kleo Dev Date: Fri, 29 Aug 2025 16:22:53 +0200 Subject: [PATCH] Better plugin structure --- src/lib.rs | 37 +++++-------------------------------- src/plugin.rs | 29 +++++++++++++++++++++++++++++ test-plugin/src/lib.rs | 4 ++-- test-plugin/src/main.rs | 6 ++++-- 4 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 src/plugin.rs diff --git a/src/lib.rs b/src/lib.rs index e8876fa..51699a7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,41 +1,20 @@ use std::path::Path; -#[cfg(feature = "loader")] -use wasmtime::{Instance, Store}; -#[cfg(feature = "loader")] -use wasmtime_wasi::preview1::WasiP1Ctx; - #[cfg(feature = "loader")] pub mod loader; pub mod macros; +pub mod plugin; pub mod vfs; pub use anyhow::Result; -pub trait PluginApi { - fn init(&mut self); -} +use crate::plugin::{Plugin, PluginInstance}; pub struct ServerConfig {} -pub enum PluginInstance { - #[cfg(feature = "loader")] - Wasm(Instance, Store), - StatiC(Box), -} - -impl PluginApi for PluginInstance { - fn init(&mut self) { - match self { - #[cfg(feature = "loader")] - PluginInstance::Wasm(instance, store) => { - let init = instance - .get_typed_func::<(), ()>(&mut *store, "init") - .unwrap(); - init.call(store, ()).unwrap(); - } - PluginInstance::StatiC(plugin) => plugin.init(), - } +impl Default for ServerConfig { + fn default() -> Self { + Self {} } } @@ -56,9 +35,3 @@ impl ServerConfig { Ok(()) } } - -impl Default for ServerConfig { - fn default() -> Self { - Self {} - } -} diff --git a/src/plugin.rs b/src/plugin.rs new file mode 100644 index 0000000..5944f87 --- /dev/null +++ b/src/plugin.rs @@ -0,0 +1,29 @@ +#[cfg(feature = "loader")] +use wasmtime::{Instance, Store}; +#[cfg(feature = "loader")] +use wasmtime_wasi::preview1::WasiP1Ctx; + +pub trait Plugin { + fn init(&mut self); +} + +pub enum PluginInstance { + #[cfg(feature = "loader")] + Wasm(Instance, Store), + Static(Box), +} + +impl Plugin for PluginInstance { + fn init(&mut self) { + match self { + #[cfg(feature = "loader")] + PluginInstance::Wasm(instance, store) => { + let init = instance + .get_typed_func::<(), ()>(&mut *store, "init") + .unwrap(); + init.call(store, ()).unwrap(); + } + PluginInstance::Static(plugin) => plugin.init(), + } + } +} diff --git a/test-plugin/src/lib.rs b/test-plugin/src/lib.rs index 0b44d44..0933ab3 100644 --- a/test-plugin/src/lib.rs +++ b/test-plugin/src/lib.rs @@ -1,9 +1,9 @@ -use voxa_server::{PluginApi, export_plugin}; +use voxa_server::{export_plugin, plugin::Plugin}; #[derive(Default)] pub struct MyPlugin; -impl PluginApi for MyPlugin { +impl Plugin for MyPlugin { fn init(&mut self) { println!("MyPlugin initialized!"); } diff --git a/test-plugin/src/main.rs b/test-plugin/src/main.rs index 6860144..34e7f1b 100644 --- a/test-plugin/src/main.rs +++ b/test-plugin/src/main.rs @@ -1,7 +1,9 @@ -use voxa_server::PluginInstance; +use std::path::PathBuf; +use voxa_server::plugin::PluginInstance; fn main() -> voxa_server::Result<()> { + let root = PathBuf::from("../"); let config = voxa_server::ServerConfig::default(); let plugin = test_plugin::MyPlugin::default(); - config.start_with(vec![PluginInstance::StatiC(Box::new(plugin))]) + config.start_with(vec![PluginInstance::Static(Box::new(plugin))], &root) }