dstar_gateway_core/session/server/
state.rs1pub trait ServerState: sealed::Sealed + 'static {}
14
15mod sealed {
16 pub trait Sealed {}
17}
18
19#[derive(Debug, Clone, Copy)]
21pub struct Unknown;
22
23#[derive(Debug, Clone, Copy)]
33pub struct Link1Received;
34
35#[derive(Debug, Clone, Copy)]
37pub struct Linked;
38
39#[derive(Debug, Clone, Copy)]
41pub struct Streaming;
42
43#[derive(Debug, Clone, Copy)]
45pub struct Unlinking;
46
47#[derive(Debug, Clone, Copy)]
49pub struct Closed;
50
51impl sealed::Sealed for Unknown {}
52impl ServerState for Unknown {}
53impl sealed::Sealed for Link1Received {}
54impl ServerState for Link1Received {}
55impl sealed::Sealed for Linked {}
56impl ServerState for Linked {}
57impl sealed::Sealed for Streaming {}
58impl ServerState for Streaming {}
59impl sealed::Sealed for Unlinking {}
60impl ServerState for Unlinking {}
61impl sealed::Sealed for Closed {}
62impl ServerState for Closed {}
63
64#[non_exhaustive]
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
67pub enum ServerStateKind {
68 Unknown,
70 Linked,
72 Streaming,
74 Unlinking,
76 Closed,
78}
79
80#[cfg(test)]
81mod tests {
82 use super::{Closed, Linked, ServerStateKind, Streaming, Unknown, Unlinking};
83
84 #[test]
85 fn states_are_zero_sized() {
86 assert_eq!(size_of::<Unknown>(), 0);
87 assert_eq!(size_of::<Linked>(), 0);
88 assert_eq!(size_of::<Streaming>(), 0);
89 assert_eq!(size_of::<Unlinking>(), 0);
90 assert_eq!(size_of::<Closed>(), 0);
91 }
92
93 #[test]
94 fn state_kind_variants_distinct() {
95 assert_ne!(ServerStateKind::Unknown, ServerStateKind::Linked);
96 assert_ne!(ServerStateKind::Linked, ServerStateKind::Streaming);
97 assert_ne!(ServerStateKind::Streaming, ServerStateKind::Unlinking);
98 assert_ne!(ServerStateKind::Unlinking, ServerStateKind::Closed);
99 }
100}