Crate simple_arguments

Source
Expand description

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.