use may_clack::{cancel, error::ClackError, input, intro, multi_input, outro}; use owo_colors::OwoColorize; use std::{borrow::Cow, net::Ipv4Addr}; fn main() -> Result<(), ClackError> { println!(); intro!(" validate ".reversed()); let do_validate_input = input("validate single (only use ascii)") .validate(|x| { if x.is_ascii() { Ok(()) } else { Err(Cow::Borrowed("only use ascii characters")) } }) .cancel(do_cancel) .required()?; let do_validate_multi_input = multi_input("validate multi (only use lowercase)") .validate(|x| { if x.find(char::is_uppercase).is_some() { Err(Cow::Borrowed("only use lowercase characters")) } else { Ok(()) } }) .cancel(do_cancel) .interact()?; let do_parse_input = input("parse to u8").cancel(do_cancel).parse::()?; let do_maybe_parse = input("maybe parse to ipv4 addr").maybe_parse::()?; let do_parse_multi = multi_input("parse multiple to u8") .cancel(do_cancel) .parse::()?; outro!(); println!("single {:?}", do_validate_input); println!("multi {:?}", do_validate_multi_input); println!("parse single {:?}", do_parse_input); println!("maybe parse single {:?}", do_maybe_parse); println!("parse multi {:?}", do_parse_multi); Ok(()) } fn do_cancel() { cancel!("demo cancelled"); panic!("demo cancelled"); }