c_its_parser/transport/
encode.rs1use alloc::string::ToString;
2
3use super::{BasicTransportAHeader, BasicTransportBHeader, Debug, IPv6Header};
4
5#[allow(dead_code)]
6#[derive(Debug)]
7pub enum EncodeError {
8 Unsupported(alloc::string::String),
9 #[cfg(feature = "json")]
10 Json(alloc::string::String),
11}
12
13pub trait Encode: Sized {
14 fn encode(&self) -> Result<alloc::vec::Vec<u8>, EncodeError>;
15}
16
17impl Encode for BasicTransportAHeader {
18 fn encode(&self) -> Result<alloc::vec::Vec<u8>, EncodeError> {
19 Ok([
20 self.destination_port.to_be_bytes(),
21 self.source_port.to_be_bytes(),
22 ]
23 .concat())
24 }
25}
26
27impl BasicTransportAHeader {
28 #[cfg(feature = "json")]
29 pub fn encode_to_json(&self) -> Result<alloc::string::String, EncodeError> {
34 serde_json::to_string(&self)
35 .map_err(|e| EncodeError::Json(alloc::format!("Error encoding to JSON: {e:?}")))
36 }
37}
38
39impl Encode for BasicTransportBHeader {
40 fn encode(&self) -> Result<alloc::vec::Vec<u8>, EncodeError> {
41 Ok([
42 self.destination_port.to_be_bytes(),
43 self.destination_port_info.to_be_bytes(),
44 ]
45 .concat())
46 }
47}
48
49impl BasicTransportBHeader {
50 #[cfg(feature = "json")]
51 pub fn encode_to_json(&self) -> Result<alloc::string::String, EncodeError> {
56 serde_json::to_string(&self)
57 .map_err(|e| EncodeError::Json(alloc::format!("Error encoding to JSON: {e:?}")))
58 }
59}
60
61impl Encode for IPv6Header {
62 fn encode(&self) -> Result<alloc::vec::Vec<u8>, EncodeError> {
63 Err(EncodeError::Unsupported(
64 "Encoding IPv6 headers is currently unsupported.".to_string(),
65 ))
66 }
67}