1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#[cfg(target_family = "wasm")]
use wasm_bindgen::prelude::*;

use crate::*;

#[cfg_attr(target_family = "wasm", wasm_bindgen)]
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub struct Hms {
    pub hour: u8,
    pub minute: u8,
    pub second: u8,
}

impl Hms {
    pub(crate) fn from_number(number: u32) -> Self {
        Self {
            hour: (number / 3600) as u8,
            minute: ((number % 3600) / 60) as u8,
            second: ((number % 3600) % 60) as u8,
        }
    }
}

impl FromRawNumber for Hms {
    fn from_raw_number(number: u64) -> (u64, Self) {
        (
            number / SECONDS_PER_DAY as u64,
            Self::from_number((number % SECONDS_PER_DAY as u64) as u32),
        )
    }
}

impl Default for Hms {
    fn default() -> Self {
        Self::from_number(0)
    }
}