open_protocol/types/
trace.rs

1use std::ops::Deref;
2use open_protocol_codec::decode::{self, Decode, Decoder};
3use open_protocol_codec::encode::{self, Encode, Encoder};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct TraceSample(u16);
7
8impl TraceSample {
9    pub fn number(&self) -> u16 {
10        self.0
11    }
12}
13
14impl Encode for TraceSample {
15    fn encode(&self, _encoder: &mut Encoder) -> encode::Result<()> {
16        Err(encode::Error::UnsizedEncodeNotAllowed)
17    }
18
19    fn encode_sized(&self, encoder: &mut Encoder, size: usize) -> encode::Result<()> {
20        if size != 2 {
21            return Err(encode::Error::InvalidSize(size));
22        }
23
24        let bytes = self.0.to_be_bytes();
25        encoder.write_byte(&bytes[0])?;
26        encoder.write_byte(&bytes[1])?;
27        Ok(())
28    }
29}
30
31impl Decode for TraceSample {
32    fn decode(_decoder: &mut Decoder) -> decode::Result<Self> {
33        Err(decode::Error::UnsizedDecodeNotAllowed)
34    }
35
36    fn decode_sized(decoder: &mut Decoder, size: usize) -> decode::Result<Self> {
37        if size != 2 {
38            return Err(decode::Error::SizeMismatch { requested_size: size, type_name: "TraceSample".into() })
39        }
40
41        let b0 = decoder.read_byte()?;
42        let b1 = decoder.read_byte()?;
43        Ok(TraceSample(u16::from_be_bytes([b0, b1])))
44    }
45}
46
47impl From<u16> for TraceSample {
48    fn from(value: u16) -> Self {
49        Self(value)
50    }
51}
52
53impl Into<u16> for TraceSample {
54    fn into(self) -> u16 {
55        self.0
56    }
57}
58
59impl Deref for TraceSample {
60    type Target = u16;
61
62    fn deref(&self) -> &Self::Target {
63        &self.0
64    }
65}