//! Parsing times from definition files use std::{ str, num::{self, NonZeroU64}, fmt, iter::FromIterator, }; /// Interval for job, in miliseconds. #[derive(Debug,Clone,PartialEq,Eq,Hash,Ord,PartialOrd)] pub enum Unit { Second, Minute, Hour, Day, Week, Year, // Fuck months lole Aeon, } impl Unit { /// Multiplier to get to miliseconds #[inline] #[cfg(nightly)] const fn multiplier(&self) -> u64 { use Unit::*; match self { Second => 1000, Minute => Second.multiplier() * 60, Hour => Minute.multiplier() * 60, Day => Hour.multiplier() * 24, Week => Day.multiplier() * 7, Year => Week.multiplier() * 52, Aeon => Year.multiplier() * 1000000, } } #[cfg(not(nightly))] fn multiplier(&self) -> u64 { use Unit::*; match self { Second => 1000, Minute => Second.multiplier() * 60, Hour => Minute.multiplier() * 60, Day => Hour.multiplier() * 24, Week => Day.multiplier() * 7, Year => Week.multiplier() * 52, Aeon => Year.multiplier() * 1000000, } } } /// A time object parsed from the definition file. #[derive(Debug, Clone, PartialEq, Eq, Hash, Ord,PartialOrd)] pub struct Time { unit: Unit, value: NonZeroU64, /// Value in miliseconds absolute: Option, } impl FromIterator