motorcortex_rust/core/
state.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
11pub enum ConnectionState {
12 Disconnected,
14 Connected,
16 ConnectionLost,
20 SessionExpired,
25}
26
27impl ConnectionState {
28 pub fn is_connected(self) -> bool {
30 matches!(self, Self::Connected)
31 }
32
33 pub fn is_terminal(self) -> bool {
35 matches!(self, Self::Disconnected | Self::SessionExpired)
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn is_connected_only_true_for_connected() {
45 assert!(ConnectionState::Connected.is_connected());
46 assert!(!ConnectionState::Disconnected.is_connected());
47 assert!(!ConnectionState::ConnectionLost.is_connected());
48 assert!(!ConnectionState::SessionExpired.is_connected());
49 }
50
51 #[test]
52 fn is_terminal_covers_disconnected_and_expired() {
53 assert!(ConnectionState::Disconnected.is_terminal());
54 assert!(ConnectionState::SessionExpired.is_terminal());
55 assert!(!ConnectionState::Connected.is_terminal());
56 assert!(!ConnectionState::ConnectionLost.is_terminal());
57 }
58
59 #[test]
60 fn derives_equality_and_copy() {
61 let a = ConnectionState::Connected;
62 let b = a; assert_eq!(a, b);
64 assert_ne!(a, ConnectionState::Disconnected);
65 }
66
67 #[test]
68 fn debug_is_non_empty_for_every_variant() {
69 for v in [
70 ConnectionState::Disconnected,
71 ConnectionState::Connected,
72 ConnectionState::ConnectionLost,
73 ConnectionState::SessionExpired,
74 ] {
75 assert!(!format!("{v:?}").is_empty());
76 }
77 }
78}