socketcan_alt/frame/
id.rs1use crate::sys;
2
3#[derive(Clone, Copy, Debug)]
4#[cfg_attr(test, derive(PartialEq))]
5pub enum Id {
6 Standard(u32),
8 Extended(u32),
10}
11
12impl Id {
13 pub(crate) fn from_can_id(can_id: u32) -> Self {
14 if can_id & sys::CAN_EFF_FLAG == 0 {
15 Id::Standard(can_id & sys::CAN_SFF_MASK)
16 } else {
17 Id::Extended(can_id & sys::CAN_EFF_MASK)
18 }
19 }
20
21 pub(crate) fn into_can_id(self) -> u32 {
22 match self {
23 Self::Standard(id) => {
24 assert!(id <= sys::CAN_SFF_MASK);
25 id
26 }
27 Self::Extended(id) => {
28 assert!(id <= sys::CAN_EFF_MASK);
29 id | sys::CAN_EFF_FLAG
30 }
31 }
32 }
33}
34
35#[cfg(test)]
36mod tests;