use crate::types::{ enums::time_metrics::TimeDuration, structs::countable_time::CountableTime, traits::countable_interface::ICountable, }; use chrono::{Duration, Local, NaiveDateTime}; pub type ExtractedDuration = (NaiveDateTime, String, i64); #[inline] pub fn get_expiration_date(duration: TimeDuration) -> NaiveDateTime { let mute_duration = match duration { TimeDuration::Minutes(min) => Duration::minutes(min), TimeDuration::Hours(hrs) => Duration::hours(hrs), TimeDuration::Days(day) => Duration::days(day), TimeDuration::Weeks(wks) => Duration::weeks(wks), TimeDuration::Mounths(mon) => Duration::weeks(mon * 4), }; Local::now().naive_utc() + mute_duration } pub fn get_expiration_time(time: TimeDuration) -> ExtractedDuration { let time_duration = time.extract(); let unmute_date = get_expiration_date(time); let postfix = CountableTime::from_value(time_duration) .get_postfix(time) .unwrap(); (unmute_date, postfix, time_duration) }