twilight_model/gateway/presence/
client_status.rs

1use crate::gateway::presence::Status;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5pub struct ClientStatus {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub desktop: Option<Status>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub mobile: Option<Status>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub web: Option<Status>,
12}
13
14#[cfg(test)]
15mod tests {
16    use super::{ClientStatus, Status};
17    use serde_test::Token;
18
19    #[test]
20    fn mobile_online() {
21        let value = ClientStatus {
22            desktop: Some(Status::Idle),
23            mobile: Some(Status::Online),
24            web: Some(Status::DoNotDisturb),
25        };
26
27        serde_test::assert_tokens(
28            &value,
29            &[
30                Token::Struct {
31                    name: "ClientStatus",
32                    len: 3,
33                },
34                Token::Str("desktop"),
35                Token::Some,
36                Token::Enum { name: "Status" },
37                Token::Str("idle"),
38                Token::Unit,
39                Token::Str("mobile"),
40                Token::Some,
41                Token::Enum { name: "Status" },
42                Token::Str("online"),
43                Token::Unit,
44                Token::Str("web"),
45                Token::Some,
46                Token::Enum { name: "Status" },
47                Token::Str("dnd"),
48                Token::Unit,
49                Token::StructEnd,
50            ],
51        );
52    }
53}