use jiff::civil::Time;
pub const STABLE_FORMAT_DATEONLY: &str = "%Y-%m-%d";
pub const STABLE_FORMAT_FLOATING: &str = "%Y-%m-%dT%H:%M:%S";
pub const STABLE_FORMAT_LOCAL: &str = "%Y-%m-%dT%H:%M:%S%z";
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RangePosition {
Before,
InRange,
After,
InvalidRange,
}
pub const fn start_of_day() -> Time {
Time::constant(0, 0, 0, 0)
}
pub const fn end_of_day() -> Time {
Time::constant(23, 59, 59, 999_999_999)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn returns_start_of_day() {
let time = start_of_day();
assert!(time.hour() == 0);
assert!(time.minute() == 0);
assert!(time.second() == 0);
}
#[test]
fn returns_end_of_day() {
let time = end_of_day();
assert!(time.hour() == 23);
assert!(time.minute() == 59);
assert!(time.second() == 59);
}
#[test]
fn validates_day_boundary_constants() {
let start = start_of_day();
let end = end_of_day();
assert_eq!(start.hour(), 0);
assert_eq!(start.minute(), 0);
assert_eq!(start.second(), 0);
assert_eq!(start.subsec_nanosecond(), 0);
assert_eq!(end.hour(), 23);
assert_eq!(end.minute(), 59);
assert_eq!(end.second(), 59);
assert_eq!(end.subsec_nanosecond(), 999_999_999);
}
}