rsiot/message/
timestamp.rs1use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike, Weekday};
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
8pub struct Timestamp(pub DateTime<FixedOffset>);
9
10impl Timestamp {
11    pub fn format(&self, fmt: &str) -> String {
13        self.0.format(fmt).to_string()
14    }
15
16    pub fn to_rfc3339(&self) -> String {
18        self.0.to_rfc3339()
19    }
20
21    pub fn timestamp_nanos_opt(&self) -> Option<i64> {
23        self.0.timestamp_nanos_opt()
24    }
25
26    pub fn weekday(&self) -> u8 {
28        match self.0.weekday() {
29            Weekday::Mon => 1,
30            Weekday::Tue => 2,
31            Weekday::Wed => 3,
32            Weekday::Thu => 4,
33            Weekday::Fri => 5,
34            Weekday::Sat => 6,
35            Weekday::Sun => 7,
36        }
37    }
38
39    pub fn hour(&self) -> u32 {
41        self.0.hour()
42    }
43
44    pub fn minute(&self) -> u32 {
46        self.0.minute()
47    }
48
49    pub fn second(&self) -> u32 {
51        self.0.second()
52    }
53}
54
55impl Default for Timestamp {
57    fn default() -> Self {
58        Self(Local::now().into())
59    }
60}
61
62impl PartialOrd for Timestamp {
63    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
64        self.0.partial_cmp(&other.0)
65    }
66}