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() {
|
fn main() {
|
||||||
match parse_args(std::env::args()) {
|
ariadne::run();
|
||||||
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"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user