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(test)]
57mod tests {
58 use super::*;
59
60 #[cfg(feature = "serde")]
61 mod serde_tests {
62 use super::*;
63
64 #[test]
65 fn reg_state_serde_uses_wire_format() {
66 for &state in GatewayRegState::ALL {
67 let json = serde_json::to_string(&state).unwrap();
68 let expected = format!("\"{}\"", state.as_str());
69 assert_eq!(json, expected, "serde must serialize as wire format");
70 }
71 }
72
73 #[test]
74 fn reg_state_serde_round_trip() {
75 for &state in GatewayRegState::ALL {
76 let json = serde_json::to_string(&state).unwrap();
77 let parsed: GatewayRegState = serde_json::from_str(&json).unwrap();
78 assert_eq!(parsed, state);
79 }
80 }
81
82 #[test]
83 fn reg_state_serde_accepts_pascal_case_alias() {
84 let cases = [
85 ("\"Noreg\"", GatewayRegState::Noreg),
86 ("\"Reged\"", GatewayRegState::Reged),
87 ("\"FailWait\"", GatewayRegState::FailWait),
88 ("\"Unreged\"", GatewayRegState::Unreged),
89 ];
90 for (json, expected) in cases {
91 let parsed: GatewayRegState = serde_json::from_str(json).unwrap();
92 assert_eq!(parsed, expected, "PascalCase alias failed for {json}");
93 }
94 }
95
96 #[test]
97 fn ping_status_serde_uses_wire_format() {
98 for &status in GatewayPingStatus::ALL {
99 let json = serde_json::to_string(&status).unwrap();
100 let expected = format!("\"{}\"", status.as_str());
101 assert_eq!(json, expected, "serde must serialize as wire format");
102 }
103 }
104
105 #[test]
106 fn ping_status_serde_round_trip() {
107 for &status in GatewayPingStatus::ALL {
108 let json = serde_json::to_string(&status).unwrap();
109 let parsed: GatewayPingStatus = serde_json::from_str(&json).unwrap();
110 assert_eq!(parsed, status);
111 }
112 }
113
114 #[test]
115 fn ping_status_serde_accepts_pascal_case_alias() {
116 let cases = [
117 ("\"Down\"", GatewayPingStatus::Down),
118 ("\"Up\"", GatewayPingStatus::Up),
119 ("\"Invalid\"", GatewayPingStatus::Invalid),
120 ];
121 for (json, expected) in cases {
122 let parsed: GatewayPingStatus = serde_json::from_str(json).unwrap();
123 assert_eq!(parsed, expected, "PascalCase alias failed for {json}");
124 }
125 }
126 }
127}