Skip to main content

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    #[serde(skip_serializing_if = "Option::is_none")]
13    pub vr: Option<Status>,
14}
15
16#[cfg(test)]
17mod tests {
18    use super::{ClientStatus, Status};
19    use serde_test::Token;
20
21    #[test]
22    fn mobile_online() {
23        let value = ClientStatus {
24            desktop: Some(Status::Idle),
25            mobile: Some(Status::Online),
26            web: Some(Status::DoNotDisturb),
27            vr: Some(Status::Online),
28        };
29
30        serde_test::assert_tokens(
31            &value,
32            &[
33                Token::Struct {
34                    name: "ClientStatus",
35                    len: 4,
36                },
37                Token::Str("desktop"),
38                Token::Some,
39                Token::Enum { name: "Status" },
40                Token::Str("idle"),
41                Token::Unit,
42                Token::Str("mobile"),
43                Token::Some,
44                Token::Enum { name: "Status" },
45                Token::Str("online"),
46                Token::Unit,
47                Token::Str("web"),
48                Token::Some,
49                Token::Enum { name: "Status" },
50                Token::Str("dnd"),
51                Token::Unit,
52                Token::Str("vr"),
53                Token::Some,
54                Token::Enum { name: "Status" },
55                Token::Str("online"),
56                Token::Unit,
57                Token::StructEnd,
58            ],
59        );
60    }
61}