feat: commit plugin interface

This commit is contained in:
mrxiaozhuox committed 2022-07-27 23:51:35 +08:00
1 parent a21433016a
commit da53c67841
8 files changed
+222 -140

No files matched your search

Generated
+70 -66
View File
@@ -86,9 +86,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "axum"
version = "0.5.11"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2cc6e8e8c993cb61a005fab8c1e5093a29199b7253b05a6883999312935c1ff"
checksum = "c943a505c17b494638a38a9af129067f760c9c06794b9f57d499266909be8e72"
dependencies = [
"async-trait",
"axum-core",
@@ -121,9 +121,9 @@ dependencies = [
[[package]]
name = "axum-core"
version = "0.2.6"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4d047478b986f14a13edad31a009e2e05cb241f9805d0d75e4cba4e129ad4d"
checksum = "e4f44a0e6200e9d11a1cdc989e4b358f6e3d354fbf48478f345a17f4e43f8635"
dependencies = [
"async-trait",
"bytes",
@@ -263,9 +263,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e"
[[package]]
name = "bzip2"
@@ -369,9 +369,9 @@ dependencies = [
[[package]]
name = "clap"
version = "3.2.8"
version = "3.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "190814073e85d238f31ff738fcb0bf6910cedeb73376c87cd69291028966fd83"
checksum = "44bbe24bbd31a185bc2c4f7c2abe80bea13a20d57ee4e55be70ac512bdc76417"
dependencies = [
"atty",
"bitflags",
@@ -386,9 +386,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "3.2.7"
version = "3.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "759bf187376e1afa7b85b959e6a664a3e7a95203415dba952ad19139e798f902"
checksum = "9ba52acd3b0a5c33aeada5cdaa3267cdc7c594a98731d4268cdc1532f4264cb4"
dependencies = [
"heck 0.4.0",
"proc-macro-error",
@@ -491,9 +491,9 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
version = "0.5.5"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -501,9 +501,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
version = "0.8.10"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83"
checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc"
dependencies = [
"cfg-if",
"once_cell",
@@ -511,9 +511,9 @@ dependencies = [
[[package]]
name = "crypto-common"
version = "0.1.5"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ccfd8c0ee4cce11e45b3fd6f9d5e69e0cc62912aa6a0cb1bf4617b0eba5a12f"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array 0.14.5",
"typenum",
@@ -521,9 +521,9 @@ dependencies = [
[[package]]
name = "curl"
version = "0.4.43"
version = "0.4.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
dependencies = [
"curl-sys",
"libc",
@@ -536,9 +536,9 @@ dependencies = [
[[package]]
name = "curl-sys"
version = "0.4.55+curl-7.83.1"
version = "0.4.56+curl-7.83.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
checksum = "6093e169dd4de29e468fa649fbae11cdcd5551c81fe5bf1b0677adad7ef3d26f"
dependencies = [
"cc",
"libc",
@@ -612,7 +612,7 @@ dependencies = [
[[package]]
name = "dioxus"
version = "0.2.4"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-core",
"dioxus-core-macro",
@@ -670,7 +670,7 @@ dependencies = [
[[package]]
name = "dioxus-core"
version = "0.2.1"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"backtrace",
"bumpalo",
@@ -689,7 +689,7 @@ dependencies = [
[[package]]
name = "dioxus-core-macro"
version = "0.2.1"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-rsx",
"dioxus-rsx-interpreter",
@@ -701,7 +701,7 @@ dependencies = [
[[package]]
name = "dioxus-hooks"
version = "0.2.1"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-core",
"futures-channel",
@@ -711,7 +711,7 @@ dependencies = [
[[package]]
name = "dioxus-html"
version = "0.2.1"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-core",
"enumset",
@@ -722,7 +722,7 @@ dependencies = [
[[package]]
name = "dioxus-rsx"
version = "0.0.0"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"proc-macro2",
"quote",
@@ -732,7 +732,7 @@ dependencies = [
[[package]]
name = "dioxus-rsx-interpreter"
version = "0.1.0"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-core",
"dioxus-hooks",
@@ -750,7 +750,7 @@ dependencies = [
[[package]]
name = "dioxus-ssr"
version = "0.2.1"
source = "git+https://github.com/dioxuslabs/dioxus/#2369b0cc7f54cf9a99db2114f9fc6481f14ffd30"
source = "git+https://github.com/dioxuslabs/dioxus/#15e9aa1958d45438a537a4bb01da0b79c5a3d54d"
dependencies = [
"dioxus-core",
]
@@ -873,9 +873,9 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
[[package]]
name = "fastrand"
version = "1.7.0"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
dependencies = [
"instant",
]
@@ -898,7 +898,7 @@ checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.13",
"redox_syscall 0.2.16",
"windows-sys",
]
@@ -1099,9 +1099,9 @@ dependencies = [
[[package]]
name = "gimli"
version = "0.26.1"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
[[package]]
name = "h2"
@@ -1124,9 +1124,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.12.2"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "607c8a29735385251a339424dd462993c0fed8fa09d378f259377df08c126022"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "headers"
@@ -1424,9 +1424,9 @@ dependencies = [
[[package]]
name = "js-sys"
version = "0.3.58"
version = "0.3.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
dependencies = [
"wasm-bindgen",
]
@@ -1619,9 +1619,9 @@ dependencies = [
[[package]]
name = "mlua"
version = "0.8.1"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a82d0b12c7c8d3bdda5933d2aa322c76e4833d822796495f299990ca652bd1bf"
checksum = "8afb4815a6d6a3bd1c23e6c647f7df18c9800c12e80526a98e18d7decd7cedcd"
dependencies = [
"bstr",
"cc",
@@ -1788,9 +1788,9 @@ dependencies = [
[[package]]
name = "os_str_bytes"
version = "6.1.0"
version = "6.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
[[package]]
name = "parking_lot"
@@ -1810,7 +1810,7 @@ checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.2.13",
"redox_syscall 0.2.16",
"smallvec",
"windows-sys",
]
@@ -1957,9 +1957,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.40"
version = "1.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b"
dependencies = [
"unicode-ident",
]
@@ -2017,9 +2017,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "redox_syscall"
version = "0.2.13"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
dependencies = [
"bitflags",
]
@@ -2042,7 +2042,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom 0.2.7",
"redox_syscall 0.2.13",
"redox_syscall 0.2.16",
"thiserror",
]
@@ -2267,18 +2267,18 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.138"
version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47"
checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.138"
version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c"
checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da"
dependencies = [
"proc-macro2",
"quote",
@@ -2370,9 +2370,12 @@ checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
[[package]]
name = "slab"
version = "0.4.6"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
@@ -2457,7 +2460,7 @@ dependencies = [
"cfg-if",
"fastrand",
"libc",
"redox_syscall 0.2.13",
"redox_syscall 0.2.16",
"remove_dir_all",
"winapi",
]
@@ -2553,10 +2556,11 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
version = "1.19.2"
version = "1.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439"
checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581"
dependencies = [
"autocfg",
"bytes",
"libc",
"memchr",
@@ -2605,9 +2609,9 @@ dependencies = [
[[package]]
name = "tokio-tungstenite"
version = "0.17.1"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06cda1232a49558c46f8a504d5b93101d42c0bf7f911f12a105ba48168f821ae"
checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181"
dependencies = [
"futures-util",
"log",
@@ -2784,9 +2788,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
[[package]]
name = "tungstenite"
version = "0.17.2"
version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d96a2dea40e7570482f28eb57afbe42d97551905da6a9400acc5c328d24004f5"
checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
dependencies = [
"base64 0.13.0",
"byteorder",
@@ -2830,9 +2834,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
[[package]]
name = "unicode-normalization"
@@ -3023,9 +3027,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.31"
version = "0.4.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
dependencies = [
"cfg-if",
"js-sys",
@@ -3128,9 +3132,9 @@ dependencies = [
[[package]]
name = "web-sys"
version = "0.3.58"
version = "0.3.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
dependencies = [
"js-sys",
"wasm-bindgen",
+1 -1
View File
@@ -13,7 +13,7 @@ license = "MIT/Apache-2.0"
# cli core
clap = { version = "3.0.14", features = ["derive"] }
thiserror = "1.0.30"
wasm-bindgen-cli-support = "0.2.82"
wasm-bindgen-cli-support = "0.2.79"
colored = "2.0.0"
# features
+1 -1
View File
@@ -124,7 +124,7 @@ pub fn build(config: &CrateConfig, quiet: bool) -> Result<BuildResult> {
.unwrap();
});
if bindgen_result.is_err() {
return Err(Error::BuildFailed("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.82` Bindgen crate.".to_string()));
return Err(Error::BuildFailed("Bindgen build failed! \nThis is probably due to the Bindgen version, dioxus-cli using `0.2.81` Bindgen crate.".to_string()));
}
// check binaryen:wasm-opt tool
-54
View File
@@ -1,54 +0,0 @@
use mlua::{FromLua, Function};
pub struct PluginInfo<'lua> {
pub name: String,
repository: String,
author: String,
on_init: Option<Function<'lua>>,
on_load: Option<Function<'lua>>,
on_build_start: Option<Function<'lua>>,
on_build_end: Option<Function<'lua>>,
}
impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
fn from_lua(lua_value: mlua::Value<'lua>, lua: &'lua mlua::Lua) -> mlua::Result<Self> {
let mut res = Self {
name: String::default(),
repository: String::default(),
author: String::default(),
on_init: None,
on_load: None,
on_build_start: None,
on_build_end: None,
};
if let mlua::Value::Table(tab) = lua_value {
if let Ok(v) = tab.get::<_, String>("name") {
res.name = v;
}
if let Ok(v) = tab.get::<_, String>("repository") {
res.repository = v;
}
if let Ok(v) = tab.get::<_, String>("author") {
res.author = v;
}
if let Ok(v) = tab.get::<_, Function>("onInit") {
res.on_init = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onLoad") {
res.on_load = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onBuildStart") {
res.on_build_start = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onBuildEnd") {
res.on_build_end = Some(v);
}
}
Ok(res)
}
}
+51
View File
@@ -0,0 +1,51 @@
use std::process::{Command, Stdio};
use mlua::UserData;
pub struct PluginCommander;
impl UserData for PluginCommander {
fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) {
methods.add_function("exec", |_, cmd: Vec<String>| {
if cmd.len() == 0 {
return Ok(());
}
let cmd_name = cmd.get(0).unwrap();
let mut command = Command::new(cmd_name);
let t = cmd
.iter()
.enumerate()
.filter(|(i, _)| *i > 0)
.map(|v| v.1.clone())
.collect::<Vec<String>>();
command.args(t);
command.stdout(Stdio::inherit());
command.output()?;
Ok(())
});
methods.add_function("execQuiet", |_, cmd: Vec<String>| {
if cmd.len() == 0 {
return Ok(());
}
let cmd_name = cmd.get(0).unwrap();
let mut command = Command::new(cmd_name);
let t = cmd
.iter()
.enumerate()
.filter(|(i, _)| *i > 0)
.map(|v| v.1.clone())
.collect::<Vec<String>>();
command.args(t);
command.stdout(Stdio::null());
command.output()?;
Ok(())
});
methods.add_function("execSimple", |_, cmd: String| {
let _ = Command::new(cmd).stdout(Stdio::inherit()).output()?;
Ok(())
});
}
fn add_fields<'lua, F: mlua::UserDataFields<'lua, Self>>(_fields: &mut F) {
}
}
File renamed without changes.
+84
View File
@@ -0,0 +1,84 @@
use mlua::{FromLua, Function, ToLua};
pub mod logger;
pub mod command;
#[derive(Debug)]
pub struct PluginInfo<'lua> {
pub name: String,
pub repository: String,
pub author: String,
pub on_init: Option<Function<'lua>>,
pub on_load: Option<Function<'lua>>,
pub on_build_start: Option<Function<'lua>>,
pub on_build_finish: Option<Function<'lua>>,
}
impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
fn from_lua(lua_value: mlua::Value<'lua>, _lua: &'lua mlua::Lua) -> mlua::Result<Self> {
let mut res = Self {
name: String::default(),
repository: String::default(),
author: String::default(),
on_init: None,
on_load: None,
on_build_start: None,
on_build_finish: None,
};
if let mlua::Value::Table(tab) = lua_value {
if let Ok(v) = tab.get::<_, String>("name") {
res.name = v;
}
if let Ok(v) = tab.get::<_, String>("repository") {
res.repository = v;
}
if let Ok(v) = tab.get::<_, String>("author") {
res.author = v;
}
if let Ok(v) = tab.get::<_, Function>("onInit") {
res.on_init = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onLoad") {
res.on_load = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onBuildStart") {
res.on_build_start = Some(v);
}
if let Ok(v) = tab.get::<_, Function>("onBuildFinish") {
res.on_build_finish = Some(v);
}
}
Ok(res)
}
}
impl<'lua> ToLua<'lua> for PluginInfo<'lua> {
fn to_lua(self, lua: &'lua mlua::Lua) -> mlua::Result<mlua::Value<'lua>> {
let res = lua.create_table()?;
res.set("name", self.name.to_string())?;
res.set("repository", self.repository.to_string())?;
res.set("author", self.author.to_string())?;
if let Some(e) = self.on_init {
res.set("onInit", e)?;
}
if let Some(e) = self.on_load {
res.set("onLoad", e)?;
}
if let Some(e) = self.on_build_start {
res.set("onBuildStart", e)?;
}
if let Some(e) = self.on_build_finish {
res.set("onBuildFinish", e)?;
}
Ok(mlua::Value::Table(res))
}
}
+15 -18
View File
@@ -1,16 +1,13 @@
use std::{fs::create_dir_all, io::Read, path::PathBuf};
use std::{io::Read, path::PathBuf};
use mlua::{Lua, Table};
use serde::{Deserialize, Serialize};
use walkdir::WalkDir;
use crate::tools::{app_path, clone_repo};
use self::{interface::PluginInfo, logger::PluginLogger};
use self::{interface::{logger::PluginLogger, command::PluginCommander}, interface::PluginInfo};
pub mod logger;
mod interface;
pub mod interface;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PluginConfig {
@@ -33,10 +30,15 @@ impl PluginManager {
let manager = lua.create_table().unwrap();
lua.globals().set("plugin_logger", PluginLogger).unwrap();
lua.globals().set("plugin_commander", PluginCommander).unwrap();
let plugin_dir = Self::init_plugin_dir();
let mut index = 0;
for entry in WalkDir::new(&plugin_dir).into_iter().filter_map(|e| e.ok()) {
let mut index = 1;
for entry in std::fs::read_dir(&plugin_dir).ok()? {
if entry.is_err() {
continue;
}
let entry = entry.unwrap();
let plugin_dir = entry.path().to_path_buf();
if plugin_dir.is_dir() {
let init_file = plugin_dir.join("init.lua");
@@ -44,16 +46,13 @@ impl PluginManager {
let mut file = std::fs::File::open(init_file).unwrap();
let mut buffer = String::new();
file.read_to_string(&mut buffer).unwrap();
let info = lua.load(&buffer).eval::<mlua::Value>().unwrap();
let info = lua.load(&buffer).eval::<PluginInfo>().unwrap();
let _ = manager.set(index, info);
index += 1;
}
index += 1;
}
}
lua.globals()
.set("package.path", format!("{}", plugin_dir.display())).unwrap();
lua.globals().set("manager", manager).unwrap();
Some(Self { lua })
@@ -62,10 +61,9 @@ impl PluginManager {
pub fn load_all_plugins(&self) -> anyhow::Result<()> {
let lua = &self.lua;
let manager = lua.globals().get::<_, Table>("manager")?;
println!("{:?}", manager.len());
for i in 0..(manager.len()? as i32) {
for i in 1..(manager.len()? as i32 + 1) {
let v = manager.get::<i32, PluginInfo>(i)?;
println!("{:?}", v.name);
println!("{v:?}");
let code = format!("manager[{i}].onLoad()");
lua.load(&code).exec()?;
}
@@ -73,11 +71,10 @@ impl PluginManager {
}
fn init_plugin_dir() -> PathBuf {
log::info!("📖 Start to init plugin library ...");
let app_path = app_path();
let plugin_path = app_path.join("plugins");
if !plugin_path.is_dir() {
log::info!("📖 Start to init plugin library ...");
let url = "https://github.com/DioxusLabs/cli-plugin-library";
clone_repo(&plugin_path, url).unwrap();
}