styling/
styling.rs

1use std::io::Result;
2
3use cli_prompts::{
4    DisplayPrompt,
5    prompts::{Confirmation, Input},
6    style::{Color, ConfirmationStyle, Formatting, InputStyle, LabelStyle},
7};
8
9fn name_validation(input: &str) -> std::result::Result<String, String> {
10    if input.len() > 0 {
11        Ok(input.to_string())
12    } else {
13        Err(String::from("Name must not be empty"))
14    }
15}
16
17fn main() -> Result<()> {
18    let label_style = LabelStyle::default()
19        .prefix("*")
20        .prefix_formatting(Formatting::default().foreground_color(Color::Cyan))
21        .prompt_formatting(
22            Formatting::default()
23                .bold()
24                .underline()
25                .foreground_color(Color::Magenta),
26        );
27    let input_formatting = Formatting::default().foreground_color(Color::Cyan);
28    let submitted_formatting = Formatting::default().foreground_color(Color::DarkCyan);
29
30    let name = Input::new("Enter your name", name_validation)
31        .style(
32            InputStyle::default()
33                .label_style(label_style.clone())
34                .input_formatting(input_formatting.clone())
35                .submitted_formatting(submitted_formatting.clone()),
36        )
37        .display();
38    let coffee = Confirmation::new("Do you want a cup of coffee")
39        .style(
40            ConfirmationStyle::default()
41                .label_style(label_style.clone())
42                .input_formatting(input_formatting.clone())
43                .submitted_formatting(submitted_formatting.clone()),
44        )
45        .display();
46
47    println!("Name: {:?}", name);
48    println!("Coffee: {:?}", coffee);
49
50    Ok(())
51}