notionrs_types/object/page/
created_time.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, notionrs_macro::Setter)]
25pub struct PageCreatedTimeProperty {
26 #[serde(skip_serializing_if = "Option::is_none")]
29 pub id: Option<String>,
30
31 #[serde(with = "time::serde::rfc3339")]
34 pub created_time: time::OffsetDateTime,
35}
36
37impl Default for PageCreatedTimeProperty {
38 fn default() -> Self {
39 Self {
40 id: None,
41 created_time: time::OffsetDateTime::now_utc(),
42 }
43 }
44}
45
46impl std::fmt::Display for PageCreatedTimeProperty {
47 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
49 write!(
50 f,
51 "{}",
52 self.created_time
53 .format(&time::format_description::well_known::Rfc3339)
54 .unwrap()
55 )
56 }
57}
58
59#[cfg(test)]
66mod unit_tests {
67
68 use super::*;
69
70 #[test]
71 fn deserialize_page_created_time_property() {
72 let json_data = r#"
73 {
74 "Created time": {
75 "id": "sv%3Fi",
76 "type": "created_time",
77 "created_time": "2024-04-03T10:55:00.000Z"
78 }
79 }
80 "#;
81
82 let created_time_map = serde_json::from_str::<
83 std::collections::HashMap<String, PageCreatedTimeProperty>,
84 >(json_data)
85 .unwrap();
86
87 let created_time = created_time_map.get("Created time").unwrap();
88
89 assert_eq!(created_time.id, Some("sv%3Fi".to_string()));
90
91 let expected_created_time = time::OffsetDateTime::new_utc(
92 time::Date::from_calendar_date(2024, time::Month::April, 3).unwrap(),
93 time::Time::from_hms(10, 55, 0).unwrap(),
94 );
95 assert_eq!(created_time.created_time, expected_created_time);
96 }
97}