const STANDARD_MAX: u16 = 0x7FF;
const EXTENDED_MAX: u32 = 0x1FFF_FFFF;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CanId {
Standard(u16),
Extended(u32),
}
impl CanId {
#[must_use]
pub fn new_standard(id: u16) -> Option<Self> {
if id <= STANDARD_MAX {
Some(CanId::Standard(id))
} else {
None
}
}
#[must_use]
pub fn new_extended(id: u32) -> Option<Self> {
if id <= EXTENDED_MAX {
Some(CanId::Extended(id))
} else {
None
}
}
pub fn raw(&self) -> u32 {
match *self {
CanId::Standard(id) => id as u32,
CanId::Extended(id) => id,
}
}
pub fn is_standard(&self) -> bool {
matches!(self, CanId::Standard(_))
}
pub fn is_extended(&self) -> bool {
matches!(self, CanId::Extended(_))
}
}