validate/
validate.rs

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}