use std::io::{stdin, stdout, Write};
pub fn input(prompt: &str) -> Result<String, String> {
let mut input: String = String::new();
print!("{}", prompt);
let _ = stdout().flush();
match stdin().read_line(&mut input) {
Ok(_) => Ok(input.trim().to_string()),
Err(e) => Err(e.to_string()),
}
}
pub fn confirm(prompt: &str, abort: Option<bool>) -> bool {
let real_prompt = prompt.to_string() + " [y/n]: ";
loop {
let input_attempt = input(&real_prompt);
if input_attempt.is_err() {
println!("Error: {}", input_attempt.unwrap_err());
continue;
}
let user_input = input_attempt.unwrap();
if !["y", "n"].contains(&user_input.to_lowercase().as_str()) {
println!("Error: Invalid input");
continue;
}
if abort.unwrap_or(false) {
eprintln!("Aborted.");
std::process::exit(1);
}
return user_input == "y";
}
}