generic_select/
generic_select.rs

1use may_clack::{cancel, error::ClackError, intro, multi_select, outro, select};
2use owo_colors::OwoColorize;
3use std::fmt::Display;
4
5#[derive(Debug, Clone)]
6enum SelectEnum {
7	One,
8	Two,
9	Three,
10}
11
12impl Display for SelectEnum {
13	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14		match *self {
15			SelectEnum::One => write!(f, "one (1)"),
16			SelectEnum::Two => write!(f, "two (2)"),
17			SelectEnum::Three => write!(f, "thr (3)"),
18		}
19	}
20}
21
22fn main() -> Result<(), ClackError> {
23	println!();
24	intro!(" generic select ".reversed());
25
26	let select_enum = select("select enum")
27		.option(SelectEnum::One, SelectEnum::One)
28		.option(SelectEnum::Two, SelectEnum::Two)
29		.option(SelectEnum::Three, SelectEnum::Three)
30		.cancel(do_cancel)
31		.interact()?;
32
33	let multi_enum = multi_select("multi_select enum")
34		.option(SelectEnum::One, "one")
35		.option(SelectEnum::Two, "two")
36		.option(SelectEnum::Three, "three")
37		.cancel(do_cancel)
38		.interact()?;
39
40	outro!();
41
42	println!("select enum, label enum {select_enum:?}");
43	println!("multi select enum, label string {multi_enum:?}");
44
45	Ok(())
46}
47
48fn do_cancel() {
49	cancel!("demo cancelled");
50	panic!("demo cancelled");
51}