1use crate::{ReadVarint, Varint, VarintSizeHint, WriteVarint};
2use std::io::{Read, Result, Write};
3
4pub trait Serializable {
6 fn size_hint(&self) -> usize;
8 fn serialize(&self, w: &mut dyn Write) -> Result<usize>;
10}
11
12pub trait Deserializable: Sized {
14 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}