Skip to main content

yevm_misc/
buf.rs

1use crate::hex::parse_vec;
2use std::fmt;
3
4#[derive(Clone, Default, PartialEq, Eq)]
5pub struct Buf(pub Vec<u8>);
6
7impl Buf {
8    pub fn as_slice(&self) -> &[u8] {
9        &self.0
10    }
11
12    pub fn into_vec(self) -> Vec<u8> {
13        self.0
14    }
15
16    pub fn len(&self) -> usize {
17        self.0.len()
18    }
19
20    pub fn is_empty(&self) -> bool {
21        self.len() == 0
22    }
23}
24
25impl From<Vec<u8>> for Buf {
26    fn from(value: Vec<u8>) -> Self {
27        Self(value)
28    }
29}
30
31impl fmt::Debug for Buf {
32    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33        f.write_str("0x")?;
34        for b in &self.0 {
35            write!(f, "{:02x}", b)?;
36        }
37        Ok(())
38    }
39}
40
41impl fmt::Display for Buf {
42    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43        fmt::Debug::fmt(self, f)
44    }
45}
46
47impl serde::Serialize for Buf {
48    fn serialize<S: serde::Serializer>(&self, s: S) -> Result<S::Ok, S::Error> {
49        s.collect_str(self)
50    }
51}
52
53impl<'de> serde::Deserialize<'de> for Buf {
54    fn deserialize<D: serde::Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
55        let s = String::deserialize(d)?;
56        let bytes = parse_vec(&s).map_err(serde::de::Error::custom)?;
57        Ok(Buf(bytes))
58    }
59}