aimo 0.1.12

just another [ai] model orchestrator
Documentation
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,
}