Documentation
use chrono::{DateTime, NaiveDateTime, TimeZone, Timelike as _};

use crate::Hour;

impl From<NaiveDateTime> for Hour {
    fn from(dt: NaiveDateTime) -> Self {
        Self::try_from(dt.hour() as u8).unwrap()
    }
}
impl<Tz: TimeZone> From<DateTime<Tz>> for Hour {
    fn from(dt: DateTime<Tz>) -> Self {
        Self::try_from(dt.hour() as u8).unwrap()
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    use chrono::Utc;

    #[test]
    fn simple() {
        assert_eq!(
            Hour::from("2021-08-01T00:00:00".parse::<NaiveDateTime>().unwrap()),
            Hour::C0
        );
        assert_eq!(
            Hour::from("2021-08-01T23:00:00Z".parse::<DateTime<Utc>>().unwrap()),
            Hour::C23
        );
    }
}