varuint/
ser_deser.rs

1use crate::{ReadVarint, Varint, VarintSizeHint, WriteVarint};
2use std::io::{Read, Result, Write};
3
4/// Trait for serializable types
5pub trait Serializable {
6    /// Get a hint of encoded value byte-length
7    fn size_hint(&self) -> usize;
8    /// Serialize a value, returns bytes written
9    fn serialize(&self, w: &mut dyn Write) -> Result<usize>;
10}
11
12/// Trait for deserializable types
13pub trait Deserializable: Sized {
14    /// Deserialize value from a `Read`
15    fn deserialize(r: &mut dyn Read) -> Result<Self>;
16}
17
18impl Deserializable for Varint<u8> {
19    fn deserialize(r: &mut dyn Read) -> Result<Self> {
20        Ok(Self(r.read_varint()?))
21    }
22}
23
24impl Deserializable for Varint<u16> {
25    fn deserialize(r: &mut dyn Read) -> Result<Self> {
26        Ok(Self(r.read_varint()?))
27    }
28}
29
30impl Deserializable for Varint<u32> {
31    fn deserialize(r: &mut dyn Read) -> Result<Self> {
32        Ok(Self(r.read_varint()?))
33    }
34}
35
36impl Deserializable for Varint<u64> {
37    fn deserialize(r: &mut dyn Read) -> Result<Self> {
38        Ok(Self(r.read_varint()?))
39    }
40}
41
42impl Deserializable for Varint<u128> {
43    fn deserialize(r: &mut dyn Read) -> Result<Self> {
44        Ok(Self(r.read_varint()?))
45    }
46}
47
48impl Serializable for Varint<u8> {
49    fn size_hint(&self) -> usize {
50        self.0.varint_size()
51    }
52
53    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
54        w.write_varint(self.0)
55    }
56}
57
58impl Serializable for Varint<u16> {
59    fn size_hint(&self) -> usize {
60        self.0.varint_size()
61    }
62
63    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
64        w.write_varint(self.0)
65    }
66}
67
68impl Serializable for Varint<u32> {
69    fn size_hint(&self) -> usize {
70        self.0.varint_size()
71    }
72
73    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
74        w.write_varint(self.0)
75    }
76}
77
78impl Serializable for Varint<u64> {
79    fn size_hint(&self) -> usize {
80        self.0.varint_size()
81    }
82
83    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
84        w.write_varint(self.0)
85    }
86}
87
88impl Serializable for Varint<u128> {
89    fn size_hint(&self) -> usize {
90        self.0.varint_size()
91    }
92
93    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
94        w.write_varint(self.0)
95    }
96}
97
98impl Serializable for Varint<i8> {
99    #[inline]
100    fn size_hint(&self) -> usize {
101        self.0.varint_size()
102    }
103
104    #[inline]
105    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
106        w.write_varint(self.0)
107    }
108}
109
110impl Deserializable for Varint<i8> {
111    fn deserialize(r: &mut dyn Read) -> Result<Self> {
112        Ok(Self(r.read_varint()?))
113    }
114}
115
116impl Serializable for Varint<i16> {
117    #[inline]
118    fn size_hint(&self) -> usize {
119        self.0.varint_size()
120    }
121
122    #[inline]
123    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
124        w.write_varint(self.0)
125    }
126}
127
128impl Deserializable for Varint<i16> {
129    fn deserialize(r: &mut dyn Read) -> Result<Self> {
130        Ok(Self(r.read_varint()?))
131    }
132}
133
134impl Serializable for Varint<i32> {
135    #[inline]
136    fn size_hint(&self) -> usize {
137        self.0.varint_size()
138    }
139
140    #[inline]
141    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
142        w.write_varint(self.0)
143    }
144}
145
146impl Deserializable for Varint<i32> {
147    fn deserialize(r: &mut dyn Read) -> Result<Self> {
148        Ok(Self(r.read_varint()?))
149    }
150}
151
152impl Serializable for Varint<i64> {
153    #[inline]
154    fn size_hint(&self) -> usize {
155        self.0.varint_size()
156    }
157
158    #[inline]
159    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
160        w.write_varint(self.0)
161    }
162}
163
164impl Deserializable for Varint<i64> {
165    fn deserialize(r: &mut dyn Read) -> Result<Self> {
166        Ok(Self(r.read_varint()?))
167    }
168}
169
170impl Serializable for Varint<i128> {
171    #[inline]
172    fn size_hint(&self) -> usize {
173        self.0.varint_size()
174    }
175
176    #[inline]
177    fn serialize(&self, w: &mut dyn Write) -> Result<usize> {
178        w.write_varint(self.0)
179    }
180}
181
182impl Deserializable for Varint<i128> {
183    fn deserialize(r: &mut dyn Read) -> Result<Self> {
184        Ok(Self(r.read_varint()?))
185    }
186}