freeswitch_types/sofia/
gateway.rs1wire_enum! {
4 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9 #[cfg_attr(feature = "serde", serde(rename_all = "SCREAMING_SNAKE_CASE"))]
10 pub enum GatewayRegState {
11 #[cfg_attr(feature = "serde", serde(alias = "Unreged"))]
12 Unreged => "UNREGED",
13 #[cfg_attr(feature = "serde", serde(alias = "Trying"))]
14 Trying => "TRYING",
15 #[cfg_attr(feature = "serde", serde(alias = "Register"))]
16 Register => "REGISTER",
17 #[cfg_attr(feature = "serde", serde(alias = "Reged"))]
18 Reged => "REGED",
19 #[cfg_attr(feature = "serde", serde(alias = "Unregister"))]
20 Unregister => "UNREGISTER",
21 #[cfg_attr(feature = "serde", serde(alias = "Failed"))]
22 Failed => "FAILED",
23 #[cfg_attr(feature = "serde", serde(alias = "FailWait"))]
24 FailWait => "FAIL_WAIT",
25 #[cfg_attr(feature = "serde", serde(alias = "Expired"))]
26 Expired => "EXPIRED",
27 #[cfg_attr(feature = "serde", serde(alias = "Noreg"))]
28 Noreg => "NOREG",
29 #[cfg_attr(feature = "serde", serde(alias = "Down"))]
30 Down => "DOWN",
31 #[cfg_attr(feature = "serde", serde(alias = "Timeout"))]
32 Timeout => "TIMEOUT",
33 }
34 error ParseGatewayRegStateError("gateway reg state");
35 tests: gateway_reg_state_wire_tests;
36}
37
38wire_enum! {
39 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
43 #[cfg_attr(feature = "serde", serde(rename_all = "SCREAMING_SNAKE_CASE"))]
44 pub enum GatewayPingStatus {
45 #[cfg_attr(feature = "serde", serde(alias = "Down"))]
46 Down => "DOWN",
47 #[cfg_attr(feature = "serde", serde(alias = "Up"))]
48 Up => "UP",
49 #[cfg_attr(feature = "serde", serde(alias = "Invalid"))]
50 Invalid => "INVALID",
51 }
52 error ParseGatewayPingStatusError("gateway ping status");
53 tests: gateway_ping_status_wire_tests;
54}
55
56#[cfg(all(test, feature = "serde"))]
57mod tests {
58 use super::*;
59
60 mod serde_tests {
61 use super::*;
62
63 #[test]
64 fn reg_state_serde_uses_wire_format() {
65 for &state in GatewayRegState::ALL {
66 let json = serde_json::to_string(&state).unwrap();
67 let expected = format!("\"{}\"", state.as_str());
68 assert_eq!(json, expected, "serde must serialize as wire format");
69 }
70 }
71
72 #[test]
73 fn reg_state_serde_round_trip() {
74 for &state in GatewayRegState::ALL {
75 let json = serde_json::to_string(&state).unwrap();
76 let parsed: GatewayRegState = serde_json::from_str(&json).unwrap();
77 assert_eq!(parsed, state);
78 }
79 }
80
81 #[test]
82 fn reg_state_serde_accepts_pascal_case_alias() {
83 let cases = [
84 ("\"Noreg\"", GatewayRegState::Noreg),
85 ("\"Reged\"", GatewayRegState::Reged),
86 ("\"FailWait\"", GatewayRegState::FailWait),
87 ("\"Unreged\"", GatewayRegState::Unreged),
88 ];
89 for (json, expected) in cases {
90 let parsed: GatewayRegState = serde_json::from_str(json).unwrap();
91 assert_eq!(parsed, expected, "PascalCase alias failed for {json}");
92 }
93 }
94
95 #[test]
96 fn ping_status_serde_uses_wire_format() {
97 for &status in GatewayPingStatus::ALL {
98 let json = serde_json::to_string(&status).unwrap();
99 let expected = format!("\"{}\"", status.as_str());
100 assert_eq!(json, expected, "serde must serialize as wire format");
101 }
102 }
103
104 #[test]
105 fn ping_status_serde_round_trip() {
106 for &status in GatewayPingStatus::ALL {
107 let json = serde_json::to_string(&status).unwrap();
108 let parsed: GatewayPingStatus = serde_json::from_str(&json).unwrap();
109 assert_eq!(parsed, status);
110 }
111 }
112
113 #[test]
114 fn ping_status_serde_accepts_pascal_case_alias() {
115 let cases = [
116 ("\"Down\"", GatewayPingStatus::Down),
117 ("\"Up\"", GatewayPingStatus::Up),
118 ("\"Invalid\"", GatewayPingStatus::Invalid),
119 ];
120 for (json, expected) in cases {
121 let parsed: GatewayPingStatus = serde_json::from_str(json).unwrap();
122 assert_eq!(parsed, expected, "PascalCase alias failed for {json}");
123 }
124 }
125 }
126}