Add subcommand support with colored help banner

Enable `clap` color feature, introduce subcommands (Sync, Add, Rm, Ls)
and a
custom before‑help banner, and update `main` to return a `Result`.
This commit is contained in:
2026-06-03 16:35:31 +02:00
parent f9bebfc938
commit c78ce27dba
3 changed files with 40 additions and 5 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ opt-level = 3
strip = true strip = true
[dependencies] [dependencies]
clap = { version = "4.6.1", features = ["derive"] } clap = { version = "4.6.1", features = ["derive", "color"] }
serde = { version = "1.0.228", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }
serde_yaml = "0.9.33" serde_yaml = "0.9.33"
dirs = "6.0.0" # XDG paths cross-platform dirs = "6.0.0" # XDG paths cross-platform
+36 -2
View File
@@ -1,8 +1,12 @@
use crate::logs::init_logger; use crate::logs::init_logger;
use clap::Parser; use clap::{Parser, Subcommand, builder::StyledStr};
#[derive(Parser, Debug, Clone)] #[derive(Parser, Debug, Clone)]
#[command(version, about = "Veil.rs", long_about = "Veil.rs")] #[command(
version,
before_help = before_help(),
subcommand_required = false
)]
pub struct Cli { pub struct Cli {
#[arg( #[arg(
long, long,
@@ -11,6 +15,17 @@ pub struct Cli {
default_value_t = false default_value_t = false
)] )]
pub log: bool, pub log: bool,
#[command(subcommand)]
pub command: Cmds,
}
#[derive(Subcommand, Clone, Debug)]
pub enum Cmds {
Sync,
Add,
Rm,
Ls,
} }
impl Cli { impl Cli {
@@ -24,3 +39,22 @@ impl Cli {
args args
} }
} }
fn before_help() -> StyledStr {
const BANNER: &str = r#"
____ ____ .__.__
\ \ / /____ |__| | _______ ______
\ Y // __ \| | | \_ __ \/ ___/
\ /\ ___/| | |__ | | \/\___ \
\___/ \___ >__|____/ /\ |__| /____ >
\/ \/ \/
"#;
format!(
"{}\n{}\t\t{}",
BANNER,
"Declarative Tauri wrapper",
format!("v{}", env!("CARGO_PKG_VERSION"))
)
.into()
}
+3 -2
View File
@@ -1,7 +1,8 @@
use std::io::Result;
use veil_rs::cli::Cli; use veil_rs::cli::Cli;
fn main() { fn main() -> Result<()> {
let args: Cli = Cli::get_args(); let args: Cli = Cli::get_args();
println!("Hello, world!"); Ok(())
} }