docan_rs/
error.rs

1use iso14229_1::{response::Code, Iso14229Error, Service};
2use iso15765_2::IsoTpError;
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 {
15        service: Service,
16        expect: u8,
17        actual: u8,
18    },
19
20    #[error("DoCAN - service `{expect}` got an unexpect response `{actual}`")]
21    UnexpectedResponse { expect: Service, actual: Service },
22
23    #[error("DoCAN - block sequence number of response (0x{actual:02x}) does not match request block sequence number (0x{expect:02x})")]
24    UnexpectedTransferSequence { expect: u8, actual: u8 },
25
26    #[error("DoCAN - service `{service}` got a NRC({code:?})")]
27    NRCError { service: Service, code: Code },
28
29    #[error("{0}")]
30    IsoTpError(IsoTpError),
31
32    #[error("DoCAN - security algorithm error: {0}")]
33    SecurityAlgoError(String),
34
35    #[error("DoCAN - other error: {0}")]
36    OtherError(String),
37
38    #[error("DoCAN - service: {0} is not implement")]
39    NotImplement(Service),
40}