Add CLI skeleton with clap: process, preset, history, and undo subcommands

This commit is contained in:
2026-03-06 01:57:43 +02:00
parent 175324e1aa
commit fea51ed220

View File

@@ -1,3 +1,125 @@
fn main() { use clap::{Parser, Subcommand};
println!("Pixstrip CLI - v{}", pixstrip_core::version());
#[derive(Parser)]
#[command(name = "pixstrip")]
#[command(about = "Batch image processor - resize, convert, compress, strip metadata, watermark, and rename")]
#[command(version)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Process images with a preset or custom operations
Process {
/// Input files or directories
#[arg(required = true)]
input: Vec<String>,
/// Preset name to use
#[arg(long)]
preset: Option<String>,
/// Output directory
#[arg(short, long)]
output: Option<String>,
/// Resize to width (e.g., "1200" or "1200x900")
#[arg(long)]
resize: Option<String>,
/// Output format (jpeg, png, webp, avif)
#[arg(long)]
format: Option<String>,
/// Quality preset (maximum, high, medium, low, web)
#[arg(long)]
quality: Option<String>,
/// Strip all metadata
#[arg(long)]
strip_metadata: bool,
/// Include subdirectories
#[arg(short, long)]
recursive: bool,
},
/// Manage presets
Preset {
#[command(subcommand)]
action: PresetAction,
},
/// View processing history
History,
/// Undo last batch operation
Undo {
/// Undo the last operation
#[arg(long)]
last: bool,
},
}
#[derive(Subcommand)]
enum PresetAction {
/// List all presets
List,
/// Export a preset to a file
Export {
name: String,
#[arg(short, long)]
output: String,
},
/// Import a preset from a file
Import {
path: String,
},
}
fn main() {
let cli = Cli::parse();
match cli.command {
Commands::Process {
input,
preset,
output: _,
resize: _,
format: _,
quality: _,
strip_metadata: _,
recursive: _,
} => {
println!("Processing {} input(s)", input.len());
if let Some(preset) = &preset {
println!("Using preset: {}", preset);
}
println!("Processing not yet implemented");
}
Commands::Preset { action } => match action {
PresetAction::List => {
println!("Available presets:");
for preset in pixstrip_core::preset::Preset::all_builtins() {
println!(" {} - {}", preset.name, preset.description);
}
}
PresetAction::Export { name, output } => {
println!("Export preset '{}' to '{}'", name, output);
}
PresetAction::Import { path } => {
println!("Import preset from '{}'", path);
}
},
Commands::History => {
println!("Processing history not yet implemented");
}
Commands::Undo { last } => {
if last {
println!("Undo not yet implemented");
}
}
}
} }