use serde::{Deserialize, Serialize};
mod display;
mod try_from;
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum DateTime {
Date(chrono::NaiveDate),
DateAndTime(chrono::DateTime<chrono::FixedOffset>),
Time(chrono::NaiveTime),
}
fn date_epoch() -> chrono::NaiveDate {
chrono::NaiveDate::from_ymd_opt(1900, 1, 1).unwrap()
}
impl DateTime {
pub(crate) fn distance_from_epoch(&self) -> i64 {
match self {
Self::Date(d) => d.signed_duration_since(date_epoch()).num_days(),
_ => unimplemented!(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn distance_from_epoch_date() {
assert_eq!(
DateTime::Date(chrono::NaiveDate::from_ymd_opt(2012, 10, 22).unwrap())
.distance_from_epoch(),
41202
);
}
}