use std::io::{stdin, stdout, Write};
const MSG_REQUIRED: &str = "This field is required";
const MSG_OPTIONAL: &str = "Optional field - Press ↵ to skip";
pub fn prompt_input_string(desc: &str, required: bool) -> anyhow::Result<String> {
let mut input = String::new();
loop {
print!("{}: ", desc);
stdout().flush()?;
stdin().read_line(&mut input)?;
input = input.trim().to_string();
if !input.is_empty() || !required {
return Ok(input);
}
if required {
println!("{}", MSG_REQUIRED);
}
}
}
pub fn prompt_input_integer(desc: &str, required: bool) -> anyhow::Result<String> {
let mut input = String::new();
loop {
print!("{}: ", desc);
stdout().flush()?;
stdin().read_line(&mut input)?;
input = input.trim().to_string();
if input.is_empty() && !required {
return Ok(input);
}
if let Ok(num) = input.parse::<i32>() {
return Ok(num.to_string());
}
if required && input.is_empty() {
println!("{}", MSG_REQUIRED);
} else {
println!("Must be a integer");
}
input.clear();
}
}
#[derive(Debug, Clone, Copy)]
pub enum PromptKind {
String,
Integer,
}