//! 姓名牌命令行入口(开发期对照用;镜像 Python CLI 参数)。 //! cargo run -p toolbox-core --example nameplate_cli -- <名单.xlsx> [--班级 X] [--座右铭 M] [--模板 T] [--sheet S] [--输出目录 D] [--保留模板] use std::path::PathBuf; use toolbox_core::nameplate::{run_nameplate, NameplateInput, DEFAULT_MOTTO}; fn main() { let args: Vec = std::env::args().collect(); if args.len() < 2 { eprintln!("用法: nameplate_cli <名单.xlsx> [--班级 X] [--座右铭 M] [--模板 T] [--sheet S] [--输出目录 D] [--保留模板]"); std::process::exit(2); } let roster = PathBuf::from(&args[1]); let mut class_override: Option = None; let mut motto: String = DEFAULT_MOTTO.to_string(); let mut template: Option = None; let mut sheet: Option = None; let mut out_dir: Option = None; let mut keep_template = false; let mut i = 2; while i < args.len() { match args[i].as_str() { "--班级" => { i += 1; class_override = Some(args[i].clone()); } "--座右铭" => { i += 1; motto = args[i].clone(); } "--模板" => { i += 1; template = Some(PathBuf::from(&args[i])); } "--sheet" => { i += 1; sheet = Some(args[i].clone()); } "--输出目录" => { i += 1; out_dir = Some(PathBuf::from(&args[i])); } "--保留模板" => keep_template = true, _ => { eprintln!("未知参数: {}", args[i]); std::process::exit(2); } } i += 1; } let inp = NameplateInput { roster_path: roster, class_override, motto, template, auto_dirs: vec![std::env::current_dir().unwrap_or_default()], sheet, out_dir: out_dir.unwrap_or_else(|| { std::env::current_dir().unwrap_or_else(|_| PathBuf::from(".")) }), keep_template, }; match run_nameplate(&inp) { Ok(res) => { for l in &res.log { println!("{}", l); } } Err(e) => { eprintln!("{}", e); std::process::exit(1); } } }