modcli/output/input/
text.rs

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