refactor(ariadne): reduce Rust skeleton

This commit is contained in:
2026-09-05 20:01:06 -04:00
parent 7e015bf68e
commit 5291008baa
2 changed files with 2 additions and 94 deletions

View File

@@ -0,0 +1 @@
pub fn run() {}

View File

@@ -1,96 +1,3 @@
const COMMAND_NAME: &str = "ariadne";
#[derive(Debug, PartialEq, Eq)]
struct Request {
command: Command,
}
#[derive(Debug, PartialEq, Eq)]
enum Command {
Help,
}
#[derive(Debug, PartialEq, Eq)]
enum Error {
UnknownArgument { value: String },
}
fn main() {
match parse_args(std::env::args()) {
Ok(request) => run(request.command),
Err(error) => exit_with_error(error),
}
}
fn run(command: Command) {
match command {
Command::Help => print!("{}", help_text()),
}
}
fn parse_args(args: impl IntoIterator<Item = String>) -> Result<Request, Error> {
let mut args = args.into_iter();
let _program = args.next();
match args.next() {
None => Ok(Request {
command: Command::Help,
}),
Some(value) if value == "--help" || value == "-h" => Ok(Request {
command: Command::Help,
}),
Some(value) => Err(Error::UnknownArgument { value }),
}
}
fn help_text() -> String {
format!(
"Ariadne\n\nUsage: {COMMAND_NAME} [--help]\n\nCommands will inspect prepared Ren'Py source.\n"
)
}
fn exit_with_error(error: Error) -> ! {
match error {
Error::UnknownArgument { value } => eprintln!("ariadne: unknown argument: {value}"),
}
std::process::exit(2);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn no_arguments_request_help() {
let request = parse_args(["ariadne".to_string()]).unwrap();
assert_eq!(request.command, Command::Help);
}
#[test]
fn help_flag_requests_help() {
let request = parse_args(["ariadne".to_string(), "--help".to_string()]).unwrap();
assert_eq!(request.command, Command::Help);
}
#[test]
fn unknown_argument_returns_error() {
let result = parse_args(["ariadne".to_string(), "--unknown".to_string()]);
assert_eq!(
result,
Err(Error::UnknownArgument {
value: "--unknown".to_string(),
})
);
}
#[test]
fn help_text_mentions_title_and_command() {
let help = help_text();
assert!(help.contains("Ariadne"));
assert!(help.contains("Usage: ariadne"));
}
ariadne::run();
}