refactor(ariadne): reduce Rust skeleton
This commit is contained in:
@@ -0,0 +1 @@
|
||||
pub fn run() {}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user