use crate::{Timestamp, SECONDS_MAX, SECONDS_MIN};
impl<Tz: chrono::TimeZone> From<chrono::DateTime<Tz>> for Timestamp {
fn from(value: chrono::DateTime<Tz>) -> Self {
let seconds = value.timestamp();
let nanos = value.timestamp_subsec_nanos();
if seconds < SECONDS_MIN {
Self::new_unchecked(SECONDS_MIN, 0)
} else if seconds > SECONDS_MAX {
Self::new_unchecked(SECONDS_MAX, 0)
} else {
Self::new_unchecked(seconds, nanos)
}
}
}
impl From<Timestamp> for chrono::DateTime<chrono::Utc> {
fn from(value: Timestamp) -> Self {
chrono::DateTime::<chrono::Utc>::from_timestamp(value.seconds, value.nanos)
.expect("Timestamp out of range for chrono::DateTime")
}
}