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 {
file_path: Option<PathBuf>,
headless_cmds: Vec<String>,
headless_script: 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 headless_cmds: Vec<String> = Vec::new();
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);
}
"--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<String>) -> Option<CmdLineArgs> {
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,24 +120,12 @@ fn get_initial_model(file_path: &Option<PathBuf>) -> Result<Model> {
fn main() -> Result<()> {
let args: Vec<String> = 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);
match arg_config {
ArgConfig::Default(cmd_line_args) => {
// Load or create model
let mut 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,
);
}
let model = get_initial_model(&cmd_line_args.file_path)?;
// Pre-TUI import: parse JSON and open wizard
let import_json = if let Some(ref path) = cmd_line_args.import_path {
@ -146,6 +147,20 @@ fn main() -> Result<()> {
};
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(