feat: commit code

This commit is contained in:
mrxiaozhuox 2022-08-26 10:27:06 -07:00
parent 062d0eab47
commit 6cce4b9f4d
5 changed files with 82 additions and 8 deletions

View file

@ -4,7 +4,7 @@ pub mod clean;
pub mod config; pub mod config;
pub mod create; pub mod create;
pub mod serve; pub mod serve;
pub mod tool; pub mod plugin;
pub mod translate; pub mod translate;
use crate::{ use crate::{
@ -52,9 +52,9 @@ pub enum Commands {
/// Dioxus config file controls. /// Dioxus config file controls.
#[clap(subcommand)] #[clap(subcommand)]
Config(config::Config), Config(config::Config),
/// Install & Manage tools for Dioxus-cli.
#[clap(subcommand)] #[clap(subcommand)]
Tool(tool::Tool), /// Manage plugins for dioxus cli
Plugin(plugin::Plugin),
} }
impl Commands { impl Commands {
@ -66,7 +66,7 @@ impl Commands {
Commands::Create(_) => "create", Commands::Create(_) => "create",
Commands::Clean(_) => "clean", Commands::Clean(_) => "clean",
Commands::Config(_) => "config", Commands::Config(_) => "config",
Commands::Tool(_) => "tool", Commands::Plugin(_) => "plugin",
}.to_string() }.to_string()
} }
} }

67
src/cli/plugin/mod.rs Normal file
View file

@ -0,0 +1,67 @@
use crate::tools;
use super::*;
/// Build the Rust WASM app and all of its assets.
#[derive(Clone, Debug, Deserialize, Subcommand)]
#[clap(name = "plugin")]
pub enum Plugin {
/// Return all dioxus-cli support tools.
List {},
/// Get default app install path.
AppPath {},
/// Install a new tool.
Add { name: String },
}
impl Plugin {
pub async fn plugin(self) -> Result<()> {
match self {
Plugin::List {} => {
for item in tools::tool_list() {
if tools::Tool::from_str(item).unwrap().is_installed() {
println!("- {item} [installed]");
} else {
println!("- {item}");
}
}
}
Plugin::AppPath {} => {
if let Some(v) = tools::tools_path().to_str() {
println!("{}", v);
} else {
log::error!("Tools path get failed.");
}
}
Plugin::Add { name } => {
let tool_list = tools::tool_list();
if !tool_list.contains(&name.as_str()) {
log::error!("Tool {name} not found.");
return Ok(());
}
let target_tool = tools::Tool::from_str(&name).unwrap();
if target_tool.is_installed() {
log::warn!("Tool {name} is installed.");
return Ok(());
}
log::info!("Start to download tool package...");
if let Err(e) = target_tool.download_package().await {
log::error!("Tool download failed: {e}");
return Ok(());
}
log::info!("Start to install tool package...");
if let Err(e) = target_tool.install_package().await {
log::error!("Tool install failed: {e}");
return Ok(());
}
log::info!("Tool {name} install successfully!");
}
}
Ok(())
}
}

View file

@ -48,9 +48,9 @@ async fn main() -> Result<()> {
} }
} }
Commands::Tool(opts) => { Commands::Plugin(opts) => {
if let Err(e) = opts.tool().await { if let Err(e) = opts.plugin().await {
log::error!("tool error: {}", e); log::error!("plugin error: {}", e);
} }
} }
} }

View file

@ -17,6 +17,7 @@ pub struct PluginInfo<'lua> {
pub on_init: Option<Function<'lua>>, pub on_init: Option<Function<'lua>>,
pub build: PluginBuildInfo<'lua>, pub build: PluginBuildInfo<'lua>,
pub serve: PluginServeInfo<'lua>,
} }
impl<'lua> FromLua<'lua> for PluginInfo<'lua> { impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
@ -29,6 +30,7 @@ impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
on_init: None, on_init: None,
build: Default::default(), build: Default::default(),
serve: Default::default(),
}; };
if let mlua::Value::Table(tab) = lua_value { if let mlua::Value::Table(tab) = lua_value {
if let Ok(v) = tab.get::<_, String>("name") { if let Ok(v) = tab.get::<_, String>("name") {
@ -51,6 +53,10 @@ impl<'lua> FromLua<'lua> for PluginInfo<'lua> {
if let Ok(v) = tab.get::<_, PluginBuildInfo>("build") { if let Ok(v) = tab.get::<_, PluginBuildInfo>("build") {
res.build = v; res.build = v;
} }
if let Ok(v) = tab.get::<_, PluginServeInfo>("serve") {
res.serve = v;
}
} }
Ok(res) Ok(res)
@ -70,6 +76,7 @@ impl<'lua> ToLua<'lua> for PluginInfo<'lua> {
res.set("on_init", e)?; res.set("on_init", e)?;
} }
res.set("build", self.build)?; res.set("build", self.build)?;
res.set("serve", self.serve)?;
Ok(mlua::Value::Table(res)) Ok(mlua::Value::Table(res))
} }

View file

@ -3,7 +3,7 @@ use std::{
path::PathBuf, path::PathBuf,
}; };
use mlua::{AsChunk, Lua, Table, ToLuaMulti}; use mlua::{AsChunk, Lua, Table};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::json; use serde_json::json;