twilight_model/gateway/presence/
activity_timestamps.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
4pub struct ActivityTimestamps {
5    /// Unix time of when the activity started, in milliseconds.
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub end: Option<u64>,
8    /// Unix time of when the activity ends, in milliseconds.
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub start: Option<u64>,
11}
12
13#[cfg(test)]
14mod tests {
15    use super::ActivityTimestamps;
16    use serde_test::Token;
17
18    #[test]
19    fn empty() {
20        let value = ActivityTimestamps {
21            end: None,
22            start: None,
23        };
24
25        serde_test::assert_tokens(
26            &value,
27            &[
28                Token::Struct {
29                    name: "ActivityTimestamps",
30                    len: 0,
31                },
32                Token::StructEnd,
33            ],
34        );
35    }
36
37    #[test]
38    fn start() {
39        let value = ActivityTimestamps {
40            end: Some(1),
41            start: None,
42        };
43
44        serde_test::assert_tokens(
45            &value,
46            &[
47                Token::Struct {
48                    name: "ActivityTimestamps",
49                    len: 1,
50                },
51                Token::Str("end"),
52                Token::Some,
53                Token::U64(1),
54                Token::StructEnd,
55            ],
56        );
57    }
58
59    #[test]
60    fn end() {
61        let value = ActivityTimestamps {
62            end: None,
63            start: Some(1),
64        };
65
66        serde_test::assert_tokens(
67            &value,
68            &[
69                Token::Struct {
70                    name: "ActivityTimestamps",
71                    len: 1,
72                },
73                Token::Str("start"),
74                Token::Some,
75                Token::U64(1),
76                Token::StructEnd,
77            ],
78        );
79    }
80
81    #[test]
82    fn present() {
83        let value = ActivityTimestamps {
84            end: Some(2),
85            start: Some(1),
86        };
87
88        serde_test::assert_tokens(
89            &value,
90            &[
91                Token::Struct {
92                    name: "ActivityTimestamps",
93                    len: 2,
94                },
95                Token::Str("end"),
96                Token::Some,
97                Token::U64(2),
98                Token::Str("start"),
99                Token::Some,
100                Token::U64(1),
101                Token::StructEnd,
102            ],
103        );
104    }
105}