doip_definitions/doip_payload/
routing_activation_request.rs1use crate::{
2 definitions::{DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN, DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN},
3 error::{Error, Result},
4 payload::ActivationType,
5};
6
7#[cfg_attr(feature = "python-bindings", pyo3::pyclass)]
12#[derive(Copy, Clone, Debug, PartialEq)]
13pub struct RoutingActivationRequest {
14 pub source_address: [u8; DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN],
16
17 pub activation_type: ActivationType,
19
20 pub buffer: [u8; DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN],
22}
23
24impl From<RoutingActivationRequest>
25 for [u8; DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN + 1 + DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN]
26{
27 fn from(value: RoutingActivationRequest) -> Self {
28 let mut buffer =
29 [0u8; DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN + 1 + DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN];
30
31 let mut offset = 0;
32
33 buffer[offset..offset + DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN]
34 .copy_from_slice(&value.source_address);
35 offset += DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN;
36
37 buffer[offset] = value.activation_type.into();
38 offset += 1;
39
40 buffer[offset..offset + DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN].copy_from_slice(&value.buffer);
41
42 buffer
43 }
44}
45
46impl TryFrom<&[u8]> for RoutingActivationRequest {
47 type Error = Error;
48
49 fn try_from(value: &[u8]) -> Result<Self> {
50 let mut offset = 0;
51
52 let source_address = value
53 .get(offset..DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN)
54 .ok_or(Error::OutOfBounds {
55 source: "RoutingActivationRequest",
56 variable: "Source Address",
57 })?
58 .try_into()?;
59
60 offset += DOIP_ROUTING_ACTIVATION_REQ_SRC_LEN;
61
62 let activation_type = value
63 .get(offset)
64 .ok_or(Error::OutOfBounds {
65 source: "RoutingActivationRequest",
66 variable: "Vin",
67 })?
68 .try_into()?;
69
70 offset += 1;
71
72 let buffer = value
73 .get(offset..offset + DOIP_ROUTING_ACTIVATION_REQ_ISO_LEN)
74 .ok_or(Error::OutOfBounds {
75 source: "RoutingActivationResponse",
76 variable: "Buffer",
77 })?
78 .try_into()?;
79
80 Ok(RoutingActivationRequest {
81 source_address,
82 activation_type,
83 buffer,
84 })
85 }
86}