use crate::{Month, Year};
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct Date {
year: Year,
month: Month,
day: u8,
}
impl Date {
/// The earliest date which can be represented
pub const MIN: Self =
unsafe { Self::from_calendar_date_unchecked(Year::MIN, Month::January, 1) };
/// The latest date which can be represented
pub const MAX: Self =
unsafe { Self::from_calendar_date_unchecked(Year::MAX, Month::December, 31) };
// TODO validated from_calendar_date
/// Creates a date without checking to make sure that it's valid.
///
/// # Example
///
/// ```
/// use botic::Date;
///
/// let y2k = unsafe {
/// Date::from_calendar_date_unchecked(Year::from(2000), Month::January, 1)
/// };
/// ```
///
/// # Safety
///
/// This function results in undefined behavior if the given date is not a real date
pub const unsafe fn from_calendar_date_unchecked(year: Year, month: Month, day: u8) -> Self {
Self { year, month, day }
}
pub const fn year(self) -> Year {
self.year
}
pub const fn month(self) -> Month {
self.month
}
pub const fn day(self) -> u8 {
self.day
}
}
|