nimble_wrapped_step/
lib.rs1use flood_rs::prelude::*;
7use std::fmt::{Debug, Display};
8use std::io;
9
10#[derive(Debug)]
11pub struct GenericOctetStep {
12 pub payload: Vec<u8>,
13}
14
15impl Serialize for GenericOctetStep {
16 fn serialize(&self, stream: &mut impl WriteOctetStream) -> io::Result<()>
17 where
18 Self: Sized,
19 {
20 stream.write_u8(self.payload.len() as u8)?;
21 stream.write(self.payload.as_slice())
22 }
23}
24
25impl Deserialize for GenericOctetStep {
26 fn deserialize(stream: &mut impl ReadOctetStream) -> io::Result<Self>
27 where
28 Self: Sized,
29 {
30 let len = stream.read_u8()? as usize;
31 let mut payload = vec![0u8; len];
32 stream.read(&mut payload)?;
33 Ok(Self { payload })
34 }
35}
36
37#[derive(Debug, Clone, Eq, PartialEq)]
38pub struct WrappedOctetStep<T: Serialize + Deserialize + Clone + Debug + Display + Eq> {
39 pub step: T,
40}
41
42impl<T: Serialize + Deserialize + Clone + Debug + Display + Eq> Display for WrappedOctetStep<T> {
43 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44 write!(f, "wrapped {}", self.step)
45 }
46}
47
48impl<T: Serialize + Deserialize + Clone + Debug + Display + Eq> Serialize for WrappedOctetStep<T> {
49 fn serialize(&self, stream: &mut impl WriteOctetStream) -> io::Result<()>
50 where
51 Self: Sized,
52 {
53 let mut out_stream = OutOctetStream::new();
54 self.step.serialize(&mut out_stream)?;
55 stream.write_u8(out_stream.octets_ref().len() as u8)?;
56 stream.write(out_stream.octets_ref())
57 }
58}
59
60impl<T: Serialize + Deserialize + Clone + Debug + Display + Eq> Deserialize
61 for WrappedOctetStep<T>
62{
63 fn deserialize(stream: &mut impl ReadOctetStream) -> io::Result<Self>
64 where
65 Self: Sized,
66 {
67 let len = stream.read_u8()? as usize;
68 let mut payload = vec![0u8; len];
69 stream.read(&mut payload)?;
70
71 let mut in_stream = InOctetStream::new(&payload);
72 Ok(Self {
73 step: Deserialize::deserialize(&mut in_stream)?,
74 })
75 }
76}