Skip to main content

simple_someip/protocol/
return_code.rs

1use super::Error;
2
3///Return code contained in a SOME/IP header.
4#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
5pub enum ReturnCode {
6    Ok,
7    NotOk,
8    UnknownService,
9    UnknownMethod,
10    NotReady,
11    NotReachable,
12    Timeout,
13    WrongProtocolVersion,
14    WrongInterfaceVersion,
15    MalformedMessage,
16    WrongMessageType,
17    E2ERepeated,
18    E2EWrongSequence,
19    E2E,
20    E2ENotAvailable,
21    E2ENoNewData,
22    GenericError(u8),
23    InterfaceError(u8),
24}
25
26impl TryFrom<u8> for ReturnCode {
27    type Error = Error;
28    fn try_from(value: u8) -> Result<Self, Error> {
29        match value {
30            0x00 => Ok(ReturnCode::Ok),
31            0x01 => Ok(ReturnCode::NotOk),
32            0x02 => Ok(ReturnCode::UnknownService),
33            0x03 => Ok(ReturnCode::UnknownMethod),
34            0x04 => Ok(ReturnCode::NotReady),
35            0x05 => Ok(ReturnCode::NotReachable),
36            0x06 => Ok(ReturnCode::Timeout),
37            0x07 => Ok(ReturnCode::WrongProtocolVersion),
38            0x08 => Ok(ReturnCode::WrongInterfaceVersion),
39            0x09 => Ok(ReturnCode::MalformedMessage),
40            0x0a => Ok(ReturnCode::WrongMessageType),
41            0x0b => Ok(ReturnCode::E2ERepeated),
42            0x0c => Ok(ReturnCode::E2EWrongSequence),
43            0x0d => Ok(ReturnCode::E2E),
44            0x0e => Ok(ReturnCode::E2ENotAvailable),
45            0x0f => Ok(ReturnCode::E2ENoNewData),
46            0x10..=0x1f => Ok(ReturnCode::GenericError(value)),
47            0x20..=0x5e => Ok(ReturnCode::InterfaceError(value)),
48            _ => Err(Error::InvalidReturnCode(value)),
49        }
50    }
51}
52
53impl From<ReturnCode> for u8 {
54    fn from(return_code: ReturnCode) -> u8 {
55        match return_code {
56            ReturnCode::Ok => 0x00,
57            ReturnCode::NotOk => 0x01,
58            ReturnCode::UnknownService => 0x02,
59            ReturnCode::UnknownMethod => 0x03,
60            ReturnCode::NotReady => 0x04,
61            ReturnCode::NotReachable => 0x05,
62            ReturnCode::Timeout => 0x06,
63            ReturnCode::WrongProtocolVersion => 0x07,
64            ReturnCode::WrongInterfaceVersion => 0x08,
65            ReturnCode::MalformedMessage => 0x09,
66            ReturnCode::WrongMessageType => 0x0a,
67            ReturnCode::E2ERepeated => 0x0b,
68            ReturnCode::E2EWrongSequence => 0x0c,
69            ReturnCode::E2E => 0x0d,
70            ReturnCode::E2ENotAvailable => 0x0e,
71            ReturnCode::E2ENoNewData => 0x0f,
72            ReturnCode::GenericError(value) | ReturnCode::InterfaceError(value) => value,
73        }
74    }
75}