1pub mod prelude;
2pub mod panic;
3
4mod crash;
5pub use crash::Crash;
6
7mod device_id;
8pub use device_id::DeviceID;
9
10mod device;
11pub use device::Device;
12
13mod fault;
14pub use fault::Fault;
15
16mod line;
17pub use line::Line;
18
19mod watched;
20pub use watched::Watched;
21
22mod plugboard;
23mod linemap;
24
25#[derive(Clone, Copy, Debug, Eq, PartialEq)]
26pub enum LinkError {
28 DeviceDown,
30 LinkDown,
32}
33
34#[derive(Clone, Copy)]
35#[repr(u32)]
36pub enum LinkMode {
38 Monitor = 0b01,
40 Notify = 0b10,
42 Peer = 0b11,
44}
45
46impl LinkMode {
47 pub fn monitor(&self) -> bool {
49 LinkMode::Monitor as u32 == ((*self) as u32 & LinkMode::Monitor as u32)
50 }
51 pub fn notify(&self) -> bool {
53 LinkMode::Notify as u32 == ((*self) as u32 & LinkMode::Notify as u32)
54 }
55 pub fn peer(&self) -> bool {
57 LinkMode::Peer as u32 == ((*self) as u32 & LinkMode::Peer as u32)
58 }
59}
60
61#[derive(Clone, Copy, Debug, Eq, PartialEq)]
62pub enum Message {
64 Disconnected(DeviceID, Option<Fault>),
66 Shutdown(DeviceID),
68}
69
70use Message::{Disconnected, Shutdown};
71
72impl Message {
73
74 pub fn sender(&self) -> DeviceID {
76 match self {
77 Disconnected(did, _) => *did,
78 Shutdown(did) => *did,
79 }
80 }
81
82 pub fn unwrap_disconnected(&self) -> (DeviceID, Option<Fault>) {
84 if let Disconnected(did, fault) = self { (*did, *fault) }
85 else { panic!("Message was not Disconnected") }
86 }
87
88 pub fn unwrap_shutdown(&self) -> DeviceID {
90 if let Shutdown(did) = self { *did }
91 else { panic!("Message was not Shutdown") }
92 }
93}