From 062d0eab4758b53788856a4a86738d519997c0fe Mon Sep 17 00:00:00 2001 From: mrxiaozhuox Date: Tue, 23 Aug 2022 15:41:39 -0700 Subject: [PATCH] feat: commit `serve` info --- Cargo.lock | 11 ------- Cargo.toml | 2 +- src/plugin/interface/mod.rs | 63 ++++++++++++++++++++++++++++++++----- src/plugin/mod.rs | 21 ------------- 4 files changed, 57 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 98c751dcc..a7644663c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -808,15 +808,6 @@ dependencies = [ "syn", ] -[[package]] -name = "erased-serde" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "003000e712ad0f95857bd4d2ef8d1890069e06554101697d12050668b2f6f020" -dependencies = [ - "serde", -] - [[package]] name = "euclid" version = "0.22.7" @@ -1600,7 +1591,6 @@ checksum = "10277581090f5cb7ecf814bc611152ce4db6dc8deffcaa08e24ed4c5197d9186" dependencies = [ "bstr", "cc", - "erased-serde", "futures-core", "futures-task", "futures-util", @@ -1610,7 +1600,6 @@ dependencies = [ "once_cell", "pkg-config", "rustc-hash", - "serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1714f4f2d..2690def1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,7 +60,7 @@ dioxus-rsx-interpreter = { git = "https://github.com/dioxuslabs/dioxus/" } proc-macro2 = { version = "1.0", features = ["span-locations"] } # plugin packages -mlua = { version = "0.8.1", features = ["lua54", "vendored", "async", "serialize"] } +mlua = { version = "0.8.1", features = ["lua54", "vendored", "async"] } [[bin]] path = "src/main.rs" diff --git a/src/plugin/interface/mod.rs b/src/plugin/interface/mod.rs index 12b5a407d..0852f7211 100644 --- a/src/plugin/interface/mod.rs +++ b/src/plugin/interface/mod.rs @@ -1,5 +1,4 @@ use mlua::{FromLua, Function, ToLua}; -use serde::Serialize; pub mod command; pub mod dirs; @@ -52,7 +51,6 @@ impl<'lua> FromLua<'lua> for PluginInfo<'lua> { if let Ok(v) = tab.get::<_, PluginBuildInfo>("build") { res.build = v; } - } Ok(res) @@ -105,10 +103,8 @@ impl<'lua> FromLua<'lua> for PluginBuildInfo<'lua> { impl<'lua> ToLua<'lua> for PluginBuildInfo<'lua> { fn to_lua(self, lua: &'lua mlua::Lua) -> mlua::Result> { - let res = lua.create_table()?; - if let Some(v) = self.on_start { res.set("on_start", v)?; } @@ -121,11 +117,64 @@ impl<'lua> ToLua<'lua> for PluginBuildInfo<'lua> { } } -#[derive(Debug, Clone, Default, Serialize)] +#[derive(Debug, Clone, Default)] pub struct PluginServeInfo<'lua> { - pub interval: i32, pub on_start: Option>, pub on_interval: Option>, -} \ No newline at end of file + pub on_rebuild: Option>, + pub on_shutdown: Option>, +} + +impl<'lua> FromLua<'lua> for PluginServeInfo<'lua> { + fn from_lua(lua_value: mlua::Value<'lua>, _lua: &'lua mlua::Lua) -> mlua::Result { + let mut res = Self::default(); + + if let mlua::Value::Table(tab) = lua_value { + if let Ok(v) = tab.get::<_, i32>("interval") { + res.interval = v; + } + if let Ok(v) = tab.get::<_, Function>("on_start") { + res.on_start = Some(v); + } + if let Ok(v) = tab.get::<_, Function>("on_interval") { + res.on_interval = Some(v); + } + if let Ok(v) = tab.get::<_, Function>("on_rebuild") { + res.on_rebuild = Some(v); + } + if let Ok(v) = tab.get::<_, Function>("on_shutdown") { + res.on_shutdown = Some(v); + } + } + + Ok(res) + } +} + +impl<'lua> ToLua<'lua> for PluginServeInfo<'lua> { + fn to_lua(self, lua: &'lua mlua::Lua) -> mlua::Result> { + let res = lua.create_table()?; + + res.set("interval", self.interval)?; + + if let Some(v) = self.on_start { + res.set("on_start", v)?; + } + + if let Some(v) = self.on_interval { + res.set("on_interval", v)?; + } + + if let Some(v) = self.on_rebuild { + res.set("on_rebuild", v)?; + } + + if let Some(v) = self.on_shutdown { + res.set("on_shutdown", v)?; + } + + Ok(mlua::Value::Table(res)) + } +} diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index c1012f3f6..45b783281 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -167,27 +167,6 @@ impl PluginManager { Ok(()) } - pub fn call_event<'lua>(&self, event: &str, args: impl ToLuaMulti<'lua>) -> anyhow::Result<()> { - let lua = &self.lua; - - let manager = lua.globals().get::<_, Table>("manager")?; - - for i in 1..(manager.len()? as i32 + 1) { - let info = manager.get::<_, PluginInfo>(i)?; - let func = match event { - "on_init" => info.on_init, - "build.on_start" => info.build.on_start, - _ => None, - }; - - if let Some(func) = func { - func.call(args)?; - } - } - - Ok(()) - } - fn init_plugin_dir() -> PathBuf { let app_path = app_path(); let plugin_path = app_path.join("plugins");