doip_definitions/doip_header/
version.rs1use crate::{
2 definitions::{
3 DEFAULT_VALUE, ISO13400_2010, ISO13400_2012, ISO13400_2019, ISO13400_2019_AMD1,
4 RESERVED_VER,
5 },
6 error::Error,
7};
8
9#[cfg_attr(feature = "python-bindings", pyo3::pyclass(eq, eq_int))]
14#[derive(Debug, Clone, Copy, PartialEq)]
15#[repr(u8)]
16pub enum ProtocolVersion {
17 ReservedVer = RESERVED_VER,
19
20 Iso13400_2010 = ISO13400_2010,
22
23 Iso13400_2012 = ISO13400_2012,
25
26 Iso13400_2019 = ISO13400_2019,
28
29 Iso13400_2019Amd1 = ISO13400_2019_AMD1,
31
32 DefaultValue = DEFAULT_VALUE,
34}
35
36impl TryFrom<&u8> for ProtocolVersion {
37 type Error = Error;
38
39 fn try_from(value: &u8) -> Result<Self, Self::Error> {
40 let val = *value;
41
42 match val {
43 v if v == ProtocolVersion::ReservedVer as u8 => Ok(ProtocolVersion::ReservedVer),
44 v if v == ProtocolVersion::Iso13400_2010 as u8 => Ok(ProtocolVersion::Iso13400_2010),
45 v if v == ProtocolVersion::Iso13400_2012 as u8 => Ok(ProtocolVersion::Iso13400_2012),
46 v if v == ProtocolVersion::Iso13400_2019 as u8 => Ok(ProtocolVersion::Iso13400_2019),
47 v if v == ProtocolVersion::Iso13400_2019Amd1 as u8 => {
48 Ok(ProtocolVersion::Iso13400_2019Amd1)
49 }
50 v if v == ProtocolVersion::DefaultValue as u8 => Ok(ProtocolVersion::DefaultValue),
51 v => Err(Error::InvalidProtocolVersion { value: v }),
52 }
53 }
54}
55
56impl From<ProtocolVersion> for u8 {
57 fn from(value: ProtocolVersion) -> Self {
58 value as u8
59 }
60}