open_protocol/types/
trace.rs1use 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}