no-more-secrets-rust/src/args.rs

52 lines
1.4 KiB
Rust
Raw Normal View History

2023-07-23 03:04:59 -07:00
use std::ffi::OsString;
use lexopt::prelude::*;
#[derive(Debug, Default)]
2023-07-23 03:14:38 -07:00
pub(crate) struct Args {
pub(crate) version: bool,
pub(crate) clear_screen: bool,
2023-07-23 20:00:52 -07:00
///Pass the 'color' argument to the nmstermio module where it will set the
///foreground color of the unencrypted characters as they are
///revealed. Valid arguments are "white", "yellow", "magenta", "blue",
///"green", "red", and "cyan".
2023-07-23 03:14:38 -07:00
pub(crate) foreground: Option<OsString>,
pub(crate) autodecrypt: bool,
2023-07-23 20:13:44 -07:00
/// Set the maskBlank flag according to the true/false value of the
/// 'setting' argument. When set to true, blank spaces characters
/// will be masked as well.
2023-07-23 03:14:38 -07:00
pub(crate) mask_blanks: bool,
2023-07-23 03:04:59 -07:00
}
2023-07-23 03:14:38 -07:00
pub(crate) fn parse_arguments() -> Result<Args, lexopt::Error> {
2023-07-23 03:04:59 -07:00
let mut parser = lexopt::Parser::from_env();
let mut args = Args::default();
while let Some(arg) = parser.next()? {
match arg {
Short('a') => {
args.autodecrypt = true;
}
Short('c') => {
args.clear_screen = true;
}
Short('f') => {
let foreground = parser.value()?;
args.foreground = Some(foreground);
}
Short('s') => {
args.mask_blanks = true;
}
Short('v') => {
args.version = true;
}
_ => return Err(arg.unexpected()),
}
}
Ok(args)
}