#[derive(Debug, Default, Clone, Copy)]
pub struct Options {
pub all: bool,
pub long: bool,
}
pub fn parse_options<I: IntoIterator<Item = String>>(args: I) -> Options {
let mut options = Options::default();
for arg in args {
match arg.as_str() {
"-a" => options.all = true,
"-l" => options.long = true,
_ => {}
}
}
options
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parse_options_defaults_to_all_false_and_long_false() {
let options = parse_options(Vec::new());
assert!(!options.all);
assert!(!options.long);
}
#[test]
fn parse_options_recognises_dash_a() {
let options = parse_options(vec!["-a".to_string()]);
assert!(options.all);
}
#[test]
fn parse_options_recognises_dash_l() {
let options = parse_options(vec!["-l".to_string()]);
assert!(options.long);
}
}