use console::style;
#[allow(clippy::ptr_arg)]
fn check_username_is_available(x: &String) -> Result<(), &'static str> {
if ["alice", "bob"].contains(&x.as_str()) {
Err("Username already taken")
} else {
Ok(())
}
}
fn main() -> std::io::Result<()> {
ctrlc::set_handler(move || {}).expect("setting Ctrl-C handler");
cliclack::clear_screen()?;
cliclack::intro(style(" interactive validation ").on_cyan().black())?;
let username: String = cliclack::input("Username (not 'alice' or 'bob')")
.validate_interactively(|x: &String| (x.len() > 2).then_some(()).ok_or("too short"))
.validate_on_enter(check_username_is_available)
.interact()?;
let _password = cliclack::password("Provide a password")
.mask('▪')
.validate_interactively(|x: &String| {
if x.len() < 8 {
Err("password should be at least 8 characters long")
} else {
Ok(())
}
})
.interact()?;
cliclack::note("User created", format!("{username}\n▪▪▪▪▪\n"))?;
Ok(())
}