doip_definitions/doip_payload/
diagnostic_nack.rs1use crate::error::{Error, Result};
2
3#[cfg_attr(feature = "python-bindings", pyo3::pyclass(eq, eq_int))]
7#[derive(Clone, Copy, Debug, PartialEq)]
8pub enum DiagnosticNackCode {
9 ReservedByIso13400_00 = 0x00,
11
12 ReservedByIso13400_01 = 0x01,
14
15 InvalidSourceAddress = 0x02,
17
18 UnknownTargetAddress = 0x03,
20
21 DiagnosticMessageTooLarge = 0x04,
23
24 OutOfMemory = 0x05,
26
27 TargetUnreachable = 0x06,
29
30 UnknownNetwork = 0x07,
32
33 TransportProtocolError = 0x08,
35}
36
37impl From<DiagnosticNackCode> for u8 {
38 fn from(value: DiagnosticNackCode) -> Self {
39 value as u8
40 }
41}
42
43impl TryFrom<&u8> for DiagnosticNackCode {
44 type Error = Error;
45
46 fn try_from(value: &u8) -> Result<Self> {
47 let val = *value;
48
49 match val {
50 v if v == DiagnosticNackCode::ReservedByIso13400_00 as u8 => {
51 Ok(DiagnosticNackCode::ReservedByIso13400_00)
52 }
53 v if v == DiagnosticNackCode::ReservedByIso13400_01 as u8 => {
54 Ok(DiagnosticNackCode::ReservedByIso13400_01)
55 }
56 v if v == DiagnosticNackCode::InvalidSourceAddress as u8 => {
57 Ok(DiagnosticNackCode::InvalidSourceAddress)
58 }
59 v if v == DiagnosticNackCode::UnknownTargetAddress as u8 => {
60 Ok(DiagnosticNackCode::UnknownTargetAddress)
61 }
62 v if v == DiagnosticNackCode::DiagnosticMessageTooLarge as u8 => {
63 Ok(DiagnosticNackCode::DiagnosticMessageTooLarge)
64 }
65 v if v == DiagnosticNackCode::OutOfMemory as u8 => Ok(DiagnosticNackCode::OutOfMemory),
66 v if v == DiagnosticNackCode::TargetUnreachable as u8 => {
67 Ok(DiagnosticNackCode::TargetUnreachable)
68 }
69 v if v == DiagnosticNackCode::UnknownNetwork as u8 => {
70 Ok(DiagnosticNackCode::UnknownNetwork)
71 }
72 v if v == DiagnosticNackCode::TransportProtocolError as u8 => {
73 Ok(DiagnosticNackCode::TransportProtocolError)
74 }
75 v => Err(Error::InvalidDiagnosticNackCode { value: v }),
76 }
77 }
78}