mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-26 22:20:19 +00:00
feat: commit code
This commit is contained in:
parent
062d0eab47
commit
6cce4b9f4d
5 changed files with 82 additions and 8 deletions
|
@ -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
67
src/cli/plugin/mod.rs
Normal 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(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue