pub mod prelude;
pub mod panic;
mod crash;
pub use crash::Crash;
mod device_id;
pub use device_id::DeviceID;
mod device;
pub use device::Device;
mod fault;
pub use fault::Fault;
mod line;
pub use line::Line;
mod watched;
pub use watched::Watched;
mod plugboard;
mod linemap;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum LinkError {
DeviceDown,
LinkDown,
}
#[derive(Clone, Copy)]
#[repr(u32)]
pub enum LinkMode {
Monitor = 0b01,
Notify = 0b10,
Peer = 0b11,
}
impl LinkMode {
pub fn monitor(&self) -> bool {
LinkMode::Monitor as u32 == ((*self) as u32 & LinkMode::Monitor as u32)
}
pub fn notify(&self) -> bool {
LinkMode::Notify as u32 == ((*self) as u32 & LinkMode::Notify as u32)
}
pub fn peer(&self) -> bool {
LinkMode::Peer as u32 == ((*self) as u32 & LinkMode::Peer as u32)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Message {
Disconnected(DeviceID, Option<Fault>),
Shutdown(DeviceID),
}
use Message::{Disconnected, Shutdown};
impl Message {
pub fn sender(&self) -> DeviceID {
match self {
Disconnected(did, _) => *did,
Shutdown(did) => *did,
}
}
pub fn unwrap_disconnected(&self) -> (DeviceID, Option<Fault>) {
if let Disconnected(did, fault) = self { (*did, *fault) }
else { panic!("Message was not Disconnected") }
}
pub fn unwrap_shutdown(&self) -> DeviceID {
if let Shutdown(did) = self { *did }
else { panic!("Message was not Shutdown") }
}
}