twilight_model/gateway/presence/
client_status.rs1use 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}