use chrono::{NaiveDateTime, TimeDelta, Utc}; use rand::{Rng, distr::Alphanumeric, rng}; pub fn generate_token_and_expiration( token_length_bytes: usize, validity: TimeDelta, ) -> (String, NaiveDateTime) { let value = std::iter::repeat(()) .map(|()| rng().sample(Alphanumeric)) .take(token_length_bytes) .collect::>(); let token = String::from_utf8(value).unwrap(); let expires = Utc::now().naive_utc() + validity; (token, expires) }