use yunohost_api::{YunohostUsers, Username, Password}; use std::io::{BufRead, Stdin, stdin}; use std::str::FromStr; fn acquire_loop(input: &Stdin, message: &str) -> T where ::Err: std::fmt::Display { loop { println!("{message}"); let value = input.lock().lines().next().unwrap().unwrap(); match T::from_str(&value) { Ok(v) => { return v; }, Err(e) => { println!("{}", e); } } } } #[tokio::main(flavor = "current_thread")] async fn main() { env_logger::init(); let input = stdin(); let users = YunohostUsers::new(500).await.unwrap(); loop { println!("Welcome to Yunohost! Please login to continue..."); let username: Username = acquire_loop(&input, "Username:"); let password: Password = acquire_loop(&input, "Password:"); if users.check_credentials(&username, &password).await.unwrap() { println!("Successful login"); } else { println!("Failed login"); } } }