use argon2::Argon2;
use password_hash::{PasswordHash, PasswordVerifier, Salt};
use rand::{distributions::Alphanumeric, Rng};
fn get_salt() -> String {
rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(Salt::RECOMMENDED_LENGTH)
.map(char::from)
.collect()
}
pub fn generate(password: &str) -> String {
PasswordHash::generate(Argon2::default(), password, &get_salt())
.unwrap()
.serialize()
.as_str()
.to_owned()
}
pub fn validate(hash: &str, password: &str) -> bool {
let algorithms: &[&dyn PasswordVerifier] = &[&Argon2::default()];
PasswordHash::new(hash)
.unwrap()
.verify_password(algorithms, password)
.is_ok()
}