cli-prompts 0.1.1

Interactive prompts for the command line
Documentation
use cli_prompts::{
    prompts::{Confirmation, Input, Multiselect, Selection},
    DisplayPrompt,
};

#[derive(Debug)]
enum CarModel {
    Audi,
    BMW,
    Chevrolet,
}

fn car_to_string(car: &CarModel) -> String {
    match car {
        CarModel::Audi => "Audi A3".into(),
        CarModel::BMW => "BMW X5".into(),
        CarModel::Chevrolet => "Chevrolet 11".into(),
    }
}

fn main() {
    let desserts = [
        "Tiramisu",
        "Cheesecake",
        "Brownee",
        "Cookie",
        "Jelly",
        "Chupa-Chups",
        "Pudding",
    ];
    let subjects = [
        "Physics",
        "Math",
        "Polish",
        "English",
        "Sport",
        "Geography",
        "History",
    ];
    let cars = [CarModel::Audi, CarModel::BMW, CarModel::Chevrolet];

    let input_prompt = Input::new("Enter your name", |s| Ok(s.to_string()))
        .default_value("John")
        .help_message("Please provide your real name");
    let confirmation = Confirmation::new("Do you want a cup of coffee?").default_positive(true);
    let dessert_selection = Selection::new("Your favoite dessert", desserts.into_iter());
    let car_selection =
        Selection::new_with_transformation("Your car model", cars.into_iter(), car_to_string);
    let subjects_selection =
        Multiselect::new("What are your favourite subjects", subjects.into_iter());

    let name = input_prompt.display();
    let is_coffee = confirmation.display();
    let dessert = dessert_selection.display();
    let car = car_selection.display();
    let subjects = subjects_selection.display();

    println!("Name: {:?}", name);
    println!("Is coffee: {:?}", is_coffee);
    println!("Dessert: {:?}", dessert);
    println!("Car: {:?}", car);
    println!("Subjects: {:?}", subjects);
}