modcli/output/input/
password.rs

1use rpassword::read_password;
2
3pub fn prompt_password(message: &str) -> String {
4    prompt_password_with_validation(message, |_| Ok(()))
5}
6
7pub fn prompt_password_with_validation<F>(message: &str, validator: F) -> String
8where
9    F: Fn(&str) -> Result<(), &str>,
10{
11    loop {
12        print!("{}: ", message);
13        std::io::Write::flush(&mut std::io::stdout()).unwrap();
14        let password = read_password().unwrap();
15
16        match validator(password.trim()) {
17            Ok(_) => return password.trim().to_string(),
18            Err(err) => {
19                println!("Invalid password: {}", err);
20            }
21        }
22    }
23}