1use may_clack::{cancel, error::ClackError, input, intro, multi_input, outro};
2use owo_colors::OwoColorize;
3use std::{borrow::Cow, net::Ipv4Addr};
4
5fn main() -> Result<(), ClackError> {
6 println!();
7 intro!(" validate ".reversed());
8
9 let do_validate_input = input("validate single (only use ascii)")
10 .validate(|x| {
11 if x.is_ascii() {
12 Ok(())
13 } else {
14 Err(Cow::Borrowed("only use ascii characters"))
15 }
16 })
17 .cancel(do_cancel)
18 .required()?;
19 let do_validate_multi_input = multi_input("validate multi (only use lowercase)")
20 .validate(|x| {
21 if x.find(char::is_uppercase).is_some() {
22 Err(Cow::Borrowed("only use lowercase characters"))
23 } else {
24 Ok(())
25 }
26 })
27 .cancel(do_cancel)
28 .interact()?;
29 let do_parse_input = input("parse to u8").cancel(do_cancel).parse::<u8>()?;
30 let do_maybe_parse = input("maybe parse to ipv4 addr").maybe_parse::<Ipv4Addr>()?;
31 let do_parse_multi = multi_input("parse multiple to u8")
32 .cancel(do_cancel)
33 .parse::<u8>()?;
34
35 outro!();
36
37 println!("single {do_validate_input:?}");
38 println!("multi {do_validate_multi_input:?}");
39 println!("parse single {do_parse_input:?}");
40 println!("maybe parse single {do_maybe_parse:?}");
41 println!("parse multi {do_parse_multi:?}");
42
43 Ok(())
44}
45
46fn do_cancel() {
47 cancel!("demo cancelled");
48 panic!("demo cancelled");
49}