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}
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}