use core::str::FromStr;
use binrw::{BinRead, BinWrite};
#[must_use]
#[derive(Copy, Clone, Debug, Eq, PartialEq, BinRead, BinWrite)]
pub enum UnitId {
#[brw(magic(0_u8))]
Broadcast,
#[brw(magic(255_u8))]
NonSignificant,
#[bw(assert(matches!(self_0, 1..=247), "unit ID {self_0} is reserved"))]
Significant(u8),
}
impl From<u8> for UnitId {
fn from(unit_id: u8) -> Self {
match unit_id {
0 => Self::Broadcast,
255 => Self::NonSignificant,
_ => Self::Significant(unit_id),
}
}
}
impl FromStr for UnitId {
type Err = core::num::ParseIntError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(Self::from(u8::from_str(s)?))
}
}