1use std::io::{stdin, stdout, Write};
2
3
4pub fn input(prompt: &str) -> Result<String, String> {
15 let mut input: String = String::new();
16 print!("{}", prompt);
17 let _ = stdout().flush();
18 match stdin().read_line(&mut input) {
19 Ok(_) => Ok(input.trim().to_string()),
20 Err(e) => Err(e.to_string()),
21 }
22}
23
24pub fn confirm(prompt: &str, abort: Option<bool>) -> bool {
37 let real_prompt = prompt.to_string() + " [y/n]: ";
38
39 loop {
40 let input_attempt = input(&real_prompt);
41 if input_attempt.is_err() {
42 println!("Error: {}", input_attempt.unwrap_err());
43 continue;
44 }
45 let user_input = input_attempt.unwrap();
46 if !["y", "n"].contains(&user_input.to_lowercase().as_str()) {
47 println!("Error: Invalid input");
48 continue;
49 }
50
51 if abort.unwrap_or(false) {
52 eprintln!("Aborted.");
53 std::process::exit(1);
54 }
55
56 return user_input == "y";
57 }
58}