diff --git a/src/main.rs b/src/main.rs index 5674ebf..7fc3334 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,12 +36,20 @@ use ui::view_panel::ViewPanel; struct CmdLineArgs { file_path: Option, - headless_cmds: Vec, - headless_script: Option, import_path: Option, } -fn parse_args(args: Vec) -> Option { +enum ArgConfig { + Help, + Headless { + file_path: Option, + commands: Vec, + script: Option, + }, + Default(CmdLineArgs), +} + +fn parse_args(args: Vec) -> ArgConfig { let mut file_path: Option = None; let mut headless_cmds: Vec = Vec::new(); let mut headless_script: Option = None; @@ -65,8 +73,7 @@ fn parse_args(args: Vec) -> Option { import_path = args.get(i).map(PathBuf::from); } "--help" | "-h" => { - print_usage(); - return None; + return ArgConfig::Help; } arg if !arg.starts_with('-') => { file_path = Some(PathBuf::from(arg)); @@ -76,10 +83,16 @@ fn parse_args(args: Vec) -> Option { i += 1; } - return Some(CmdLineArgs { + if !headless_cmds.is_empty() || headless_script.is_some() { + return ArgConfig::Headless { + file_path, + commands: headless_cmds, + script: headless_script, + }; + } + + return ArgConfig::Default(CmdLineArgs { file_path, - headless_cmds, - headless_script, import_path, }); } @@ -107,45 +120,47 @@ fn get_initial_model(file_path: &Option) -> Result { fn main() -> Result<()> { let args: Vec = std::env::args().collect(); - let cmd_line_args = if let Some(args) = parse_args(args) { - args - } else { - return Ok(()); - }; + let arg_config = parse_args(args); - // Load or create model - let mut model = get_initial_model(&cmd_line_args.file_path)?; + match arg_config { + ArgConfig::Default(cmd_line_args) => { + // Load or create model + let model = get_initial_model(&cmd_line_args.file_path)?; - // Headless mode - if !cmd_line_args.headless_cmds.is_empty() || cmd_line_args.headless_script.is_some() { - return run_headless( - &mut model, - cmd_line_args.file_path, - cmd_line_args.headless_cmds, - cmd_line_args.headless_script, - ); - } - - // Pre-TUI import: parse JSON and open wizard - let import_json = if let Some(ref path) = cmd_line_args.import_path { - match std::fs::read_to_string(path) { - Err(e) => { - eprintln!("Cannot read '{}': {e}", path.display()); - return Ok(()); - } - Ok(content) => match serde_json::from_str::(&content) { - Err(e) => { - eprintln!("JSON parse error: {e}"); - return Ok(()); + // Pre-TUI import: parse JSON and open wizard + let import_json = if let Some(ref path) = cmd_line_args.import_path { + match std::fs::read_to_string(path) { + Err(e) => { + eprintln!("Cannot read '{}': {e}", path.display()); + return Ok(()); + } + Ok(content) => match serde_json::from_str::(&content) { + Err(e) => { + eprintln!("JSON parse error: {e}"); + return Ok(()); + } + Ok(json) => Some(json), + }, } - Ok(json) => Some(json), - }, - } - } else { - None - }; + } else { + None + }; - run_tui(model, cmd_line_args.file_path, import_json) + run_tui(model, cmd_line_args.file_path, import_json) + } + ArgConfig::Headless { + file_path, + commands, + script, + } => { + let mut model = get_initial_model(&file_path)?; + return run_headless(&mut model, file_path, commands, script); + } + ArgConfig::Help => { + print_usage(); + Ok(()) + } + } } fn run_headless(