use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum DataLink {
Bip,
Bip6,
Mstp,
Sc,
Ethernet,
Loopback,
}
impl DataLink {
pub const fn name(self) -> &'static str {
match self {
Self::Bip => "BACnet/IP",
Self::Bip6 => "BACnet/IPv6",
Self::Mstp => "MS/TP",
Self::Sc => "BACnet/SC",
Self::Ethernet => "BACnet Ethernet",
Self::Loopback => "loopback",
}
}
}
impl fmt::Display for DataLink {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.name())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_data_link_displays_its_short_name() {
let names = [
(DataLink::Bip, "BACnet/IP"),
(DataLink::Bip6, "BACnet/IPv6"),
(DataLink::Mstp, "MS/TP"),
(DataLink::Sc, "BACnet/SC"),
(DataLink::Ethernet, "BACnet Ethernet"),
(DataLink::Loopback, "loopback"),
];
for (link, name) in names {
assert_eq!(link.name(), name);
assert_eq!(link.to_string(), name);
}
}
}