use std::{
io::{self, Write},
str::FromStr,
};
#[must_use]
pub fn get_text_input(prompt: &str) -> String {
print!("{prompt}");
io::stdout().flush().expect("Failed to flush line");
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
input.trim().to_string()
}
pub fn get_text_input_as<Output: FromStr>(prompt: &str) -> Result<Output, Output::Err> {
get_text_input(prompt).parse()
}
#[must_use]
pub fn persistent_get_text_input_as<Output: FromStr>(prompt: &str) -> Output {
loop {
match get_text_input_as::<Output>(prompt) {
Ok(user_output) => return user_output,
Err(_) => continue,
}
}
}