Skip to main content

rsiot/components/cmp_linux_can/
can_id.rs

1use super::{CanId, Error};
2
3impl TryFrom<CanId> for socketcan::CanId {
4    type Error = Error;
5
6    fn try_from(value: CanId) -> Result<Self, Self::Error> {
7        match value {
8            CanId::Standard(id) => {
9                let id =
10                    socketcan::StandardId::new(id).ok_or_else(|| Error::InvalidId(id as u64))?;
11                Ok(socketcan::CanId::Standard(id))
12            }
13            CanId::Extended(id) => {
14                let id =
15                    socketcan::ExtendedId::new(id).ok_or_else(|| Error::InvalidId(id as u64))?;
16                Ok(socketcan::CanId::Extended(id))
17            }
18        }
19    }
20}
21
22impl TryFrom<socketcan::CanId> for CanId {
23    type Error = Error;
24
25    fn try_from(value: socketcan::CanId) -> Result<Self, Self::Error> {
26        match value {
27            socketcan::CanId::Standard(id) => {
28                let id = id.as_raw();
29                Ok(CanId::Standard(id))
30            }
31            socketcan::CanId::Extended(id) => {
32                let id = id.as_raw();
33                Ok(CanId::Extended(id))
34            }
35        }
36    }
37}