use super::{
DateTime, MAX_DAY, MAX_HOUR, MAX_ISO_WEEK, MAX_MICROSECOND,
MAX_MIN_SEC, MAX_MONTH, MAX_ORDINAL_DAY,
};
impl DateTime {
#[must_use]
pub fn is_valid_day(day: &str) -> bool {
day.parse::<u8>().is_ok_and(|d| (1..=MAX_DAY).contains(&d))
}
#[must_use]
pub fn is_valid_hour(hour: &str) -> bool {
hour.parse::<u8>().is_ok_and(|h| h <= MAX_HOUR)
}
#[must_use]
pub fn is_valid_minute(minute: &str) -> bool {
minute.parse::<u8>().is_ok_and(|m| m <= MAX_MIN_SEC)
}
#[must_use]
pub fn is_valid_second(second: &str) -> bool {
second.parse::<u8>().is_ok_and(|s| s <= MAX_MIN_SEC)
}
#[must_use]
pub fn is_valid_month(month: &str) -> bool {
month
.parse::<u8>()
.is_ok_and(|m| (1..=MAX_MONTH).contains(&m))
}
#[must_use]
pub fn is_valid_year(year: &str) -> bool {
year.parse::<i32>()
.is_ok_and(|y| (-9999..=9999).contains(&y))
}
#[must_use]
pub fn is_valid_microsecond(microsecond: &str) -> bool {
microsecond
.parse::<u32>()
.is_ok_and(|us| us <= MAX_MICROSECOND)
}
#[must_use]
pub fn is_valid_ordinal(ordinal: &str) -> bool {
ordinal
.parse::<u16>()
.is_ok_and(|o| (1..=MAX_ORDINAL_DAY).contains(&o))
}
#[must_use]
pub fn is_valid_iso_week(week: &str) -> bool {
week.parse::<u8>()
.is_ok_and(|w| (1..=MAX_ISO_WEEK).contains(&w))
}
#[must_use]
pub fn is_valid_time(time: &str) -> bool {
let parts: Vec<&str> = time.split(':').collect();
if parts.len() != 3 {
return false;
}
Self::is_valid_hour(parts[0])
&& Self::is_valid_minute(parts[1])
&& Self::is_valid_second(parts[2])
}
}