docan_rs/
error.rs

1use iso15765_2::IsoTpError;
2use iso14229_1::{Iso14229Error, Service, response::Code};
3use rs_can::CanError;
4
5#[derive(thiserror::Error, Debug)]
6pub enum DoCanError {
7    #[error("{0}")]
8    DeviceError(CanError),
9
10    #[error("{0}")]
11    ISO14229Error(Iso14229Error),
12
13    #[error("DoCAN - service `{service}` got an unexpected sub-function(expect: {expect}, actual: {actual})")]
14    UnexpectedSubFunction { service: Service, expect: u8, actual: u8 },
15
16    #[error("DoCAN - service `{expect}` got an unexpect response `{actual}`")]
17    UnexpectedResponse { expect: Service, actual: Service },
18
19    #[error("DoCAN - block sequence number of response (0x{actual:02x}) does not match request block sequence number (0x{expect:02x})")]
20    UnexpectedTransferSequence { expect: u8, actual: u8 },
21
22    #[error("DoCAN - service `{service}` got a NRC({code:?})")]
23    NRCError { service: Service, code: Code },
24
25    #[error("{0}")]
26    IsoTpError(IsoTpError),
27
28    #[error("DoCAN - security algorithm error: {0}")]
29    SecurityAlgoError(String),
30
31    #[error("DoCAN - other error: {0}")]
32    OtherError(String),
33
34    #[error("DoCAN - service: {0} is not implement")]
35    NotImplement(Service),
36}