[][src]Crate simple_arguments

This crate is usefull if you want to easily have an okay cli interface for your program.

you can use it like this:

use std::env::args;

type Error = Box<dyn std::error::Error>;

use simple_arguments::Arguments;

fn main() -> Result<(), Error> {
	let mut number: usize = 0;
	let mut string: String = String::new();
	let mut boolean: bool = false;
	let mut help: bool = false;

	let usage;
	// you have to do this because the lifetimes of the references must be
	// greter than the lifetime of the argument struct

	{
		let mut arguments = Arguments::new(Some("args_tester"));
		let mut args = args();
		let exec = args.next().unwrap();
		let a: Vec<_> = args.collect();

		arguments.add(&mut number, "number", "a number");
		arguments.add(&mut boolean, "bool", "a boolean value");
		arguments.add(&mut string, "string", "a string");
		arguments.add_bool(&mut help, "help", "displays the help message");
		usage = arguments.usage();

		if let Err(e) = arguments.parse(&a[..]) {
			println!("{}", e);
			print!("{}", usage);
			return Ok(());
		}
	}

	if help {
		println!("{}", usage);
		return Ok(());
	}
	println!("{} {} {}", number, boolean, string);

	Ok(())
}

here, instead of only defining the arguments' names and converting them to the correct type after, we make use of a special trait Filler (which is implemented for all FromStr types) to automatically convert the arguments.

Structs

Arguments

the main struct which is responsible for managing all argument parsing logic

Enums

ArgError

Traits

Filler

This trait is the one which has to be implemented by every argument passed to the Arguments struct.