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}