simple_someip/protocol/
return_code.rs1use super::Error;
2
3#[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}