refactor: continue simplifying entrypoint

This commit is contained in:
Edward Langley
2026-03-31 20:15:20 -07:00
parent 6eee161f02
commit aae8392f46

View File

@ -36,12 +36,20 @@ use ui::view_panel::ViewPanel;
struct CmdLineArgs { struct CmdLineArgs {
file_path: Option<PathBuf>, file_path: Option<PathBuf>,
headless_cmds: Vec<String>,
headless_script: Option<PathBuf>,
import_path: Option<PathBuf>, import_path: Option<PathBuf>,
} }
fn parse_args(args: Vec<String>) -> Option<CmdLineArgs> { enum ArgConfig {
Help,
Headless {
file_path: Option<PathBuf>,
commands: Vec<String>,
script: Option<PathBuf>,
},
Default(CmdLineArgs),
}
fn parse_args(args: Vec<String>) -> ArgConfig {
let mut file_path: Option<PathBuf> = None; let mut file_path: Option<PathBuf> = None;
let mut headless_cmds: Vec<String> = Vec::new(); let mut headless_cmds: Vec<String> = Vec::new();
let mut headless_script: Option<PathBuf> = None; let mut headless_script: Option<PathBuf> = None;
@ -65,8 +73,7 @@ fn parse_args(args: Vec<String>) -> Option<CmdLineArgs> {
import_path = args.get(i).map(PathBuf::from); import_path = args.get(i).map(PathBuf::from);
} }
"--help" | "-h" => { "--help" | "-h" => {
print_usage(); return ArgConfig::Help;
return None;
} }
arg if !arg.starts_with('-') => { arg if !arg.starts_with('-') => {
file_path = Some(PathBuf::from(arg)); file_path = Some(PathBuf::from(arg));
@ -76,10 +83,16 @@ fn parse_args(args: Vec<String>) -> Option<CmdLineArgs> {
i += 1; 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, file_path,
headless_cmds,
headless_script,
import_path, import_path,
}); });
} }
@ -107,24 +120,12 @@ fn get_initial_model(file_path: &Option<PathBuf>) -> Result<Model> {
fn main() -> Result<()> { fn main() -> Result<()> {
let args: Vec<String> = std::env::args().collect(); let args: Vec<String> = std::env::args().collect();
let cmd_line_args = if let Some(args) = parse_args(args) { let arg_config = parse_args(args);
args
} else {
return Ok(());
};
match arg_config {
ArgConfig::Default(cmd_line_args) => {
// Load or create model // Load or create model
let mut model = get_initial_model(&cmd_line_args.file_path)?; 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 // Pre-TUI import: parse JSON and open wizard
let import_json = if let Some(ref path) = cmd_line_args.import_path { let import_json = if let Some(ref path) = cmd_line_args.import_path {
@ -147,6 +148,20 @@ fn main() -> Result<()> {
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( fn run_headless(
model: &mut Model, model: &mut Model,