/rust/registry/src/index.crates.io-1949cf8c6b5b557f/bincode-1.3.3/src/config/int.rs
Line | Count | Source |
1 | | use std::io::Write; |
2 | | use std::mem::size_of; |
3 | | |
4 | | use super::Options; |
5 | | use de::read::BincodeRead; |
6 | | use error::{ErrorKind, Result}; |
7 | | |
8 | | pub trait IntEncoding { |
9 | | /// Gets the size (in bytes) that a value would be serialized to. |
10 | | fn u16_size(n: u16) -> u64; |
11 | | /// Gets the size (in bytes) that a value would be serialized to. |
12 | | fn u32_size(n: u32) -> u64; |
13 | | /// Gets the size (in bytes) that a value would be serialized to. |
14 | | fn u64_size(n: u64) -> u64; |
15 | | |
16 | | /// Gets the size (in bytes) that a value would be serialized to. |
17 | | fn i16_size(n: i16) -> u64; |
18 | | /// Gets the size (in bytes) that a value would be serialized to. |
19 | | fn i32_size(n: i32) -> u64; |
20 | | /// Gets the size (in bytes) that a value would be serialized to. |
21 | | fn i64_size(n: i64) -> u64; |
22 | | |
23 | | #[inline(always)] |
24 | 0 | fn len_size(len: usize) -> u64 { |
25 | 0 | Self::u64_size(len as u64) |
26 | 0 | } |
27 | | |
28 | | /// Serializes a sequence length. |
29 | | #[inline(always)] |
30 | 0 | fn serialize_len<W: Write, O: Options>( |
31 | 0 | ser: &mut ::ser::Serializer<W, O>, |
32 | 0 | len: usize, |
33 | 0 | ) -> Result<()> { |
34 | 0 | Self::serialize_u64(ser, len as u64) |
35 | 0 | } |
36 | | |
37 | | fn serialize_u16<W: Write, O: Options>( |
38 | | ser: &mut ::ser::Serializer<W, O>, |
39 | | val: u16, |
40 | | ) -> Result<()>; |
41 | | |
42 | | fn serialize_u32<W: Write, O: Options>( |
43 | | ser: &mut ::ser::Serializer<W, O>, |
44 | | val: u32, |
45 | | ) -> Result<()>; |
46 | | |
47 | | fn serialize_u64<W: Write, O: Options>( |
48 | | ser: &mut ::ser::Serializer<W, O>, |
49 | | val: u64, |
50 | | ) -> Result<()>; |
51 | | |
52 | | fn serialize_i16<W: Write, O: Options>( |
53 | | ser: &mut ::ser::Serializer<W, O>, |
54 | | val: i16, |
55 | | ) -> Result<()>; |
56 | | |
57 | | fn serialize_i32<W: Write, O: Options>( |
58 | | ser: &mut ::ser::Serializer<W, O>, |
59 | | val: i32, |
60 | | ) -> Result<()>; |
61 | | |
62 | | fn serialize_i64<W: Write, O: Options>( |
63 | | ser: &mut ::ser::Serializer<W, O>, |
64 | | val: i64, |
65 | | ) -> Result<()>; |
66 | | |
67 | | /// Deserializes a sequence length. |
68 | | #[inline(always)] |
69 | 14.4k | fn deserialize_len<'de, R: BincodeRead<'de>, O: Options>( |
70 | 14.4k | de: &mut ::de::Deserializer<R, O>, |
71 | 14.4k | ) -> Result<usize> { |
72 | 14.4k | Self::deserialize_u64(de).and_then(cast_u64_to_usize) |
73 | 14.4k | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 69 | 14.4k | fn deserialize_len<'de, R: BincodeRead<'de>, O: Options>( | 70 | 14.4k | de: &mut ::de::Deserializer<R, O>, | 71 | 14.4k | ) -> Result<usize> { | 72 | 14.4k | Self::deserialize_u64(de).and_then(cast_u64_to_usize) | 73 | 14.4k | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_len::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <_ as bincode::config::int::IntEncoding>::deserialize_len::<_, _> |
74 | | |
75 | | fn deserialize_u16<'de, R: BincodeRead<'de>, O: Options>( |
76 | | de: &mut ::de::Deserializer<R, O>, |
77 | | ) -> Result<u16>; |
78 | | |
79 | | fn deserialize_u32<'de, R: BincodeRead<'de>, O: Options>( |
80 | | de: &mut ::de::Deserializer<R, O>, |
81 | | ) -> Result<u32>; |
82 | | |
83 | | fn deserialize_u64<'de, R: BincodeRead<'de>, O: Options>( |
84 | | de: &mut ::de::Deserializer<R, O>, |
85 | | ) -> Result<u64>; |
86 | | |
87 | | fn deserialize_i16<'de, R: BincodeRead<'de>, O: Options>( |
88 | | de: &mut ::de::Deserializer<R, O>, |
89 | | ) -> Result<i16>; |
90 | | |
91 | | fn deserialize_i32<'de, R: BincodeRead<'de>, O: Options>( |
92 | | de: &mut ::de::Deserializer<R, O>, |
93 | | ) -> Result<i32>; |
94 | | |
95 | | fn deserialize_i64<'de, R: BincodeRead<'de>, O: Options>( |
96 | | de: &mut ::de::Deserializer<R, O>, |
97 | | ) -> Result<i64>; |
98 | | |
99 | | serde_if_integer128! { |
100 | | fn u128_size(v: u128) -> u64; |
101 | | fn i128_size(v: i128) -> u64; |
102 | | fn serialize_u128<W: Write, O: Options>( |
103 | | ser: &mut ::Serializer<W, O>, |
104 | | val: u128, |
105 | | ) -> Result<()>; |
106 | | fn deserialize_u128<'de, R: BincodeRead<'de>, O: Options>( |
107 | | de: &mut ::Deserializer<R, O>, |
108 | | ) -> Result<u128>; |
109 | | fn serialize_i128<W: Write, O: Options>( |
110 | | ser: &mut ::Serializer<W, O>, |
111 | | val: i128, |
112 | | ) -> Result<()>; |
113 | | fn deserialize_i128<'de, R: BincodeRead<'de>, O: Options>( |
114 | | de: &mut ::Deserializer<R, O>, |
115 | | ) -> Result<i128>; |
116 | | } |
117 | | } |
118 | | |
119 | | /// Fixed-size integer encoding. |
120 | | /// |
121 | | /// * Fixed size integers are encoded directly |
122 | | /// * Enum discriminants are encoded as u32 |
123 | | /// * Lengths and usize are encoded as u64 |
124 | | #[derive(Copy, Clone)] |
125 | | pub struct FixintEncoding; |
126 | | |
127 | | /// Variable-size integer encoding (excepting [ui]8). |
128 | | /// |
129 | | /// Encoding an unsigned integer v (of any type excepting u8) works as follows: |
130 | | /// |
131 | | /// 1. If `u < 251`, encode it as a single byte with that value. |
132 | | /// 2. If `251 <= u < 2**16`, encode it as a literal byte 251, followed by a u16 with value `u`. |
133 | | /// 3. If `2**16 <= u < 2**32`, encode it as a literal byte 252, followed by a u32 with value `u`. |
134 | | /// 4. If `2**32 <= u < 2**64`, encode it as a literal byte 253, followed by a u64 with value `u`. |
135 | | /// 5. If `2**64 <= u < 2**128`, encode it as a literal byte 254, followed by a |
136 | | /// u128 with value `u`. |
137 | | /// |
138 | | /// Then, for signed integers, we first convert to unsigned using the zigzag algorithm, |
139 | | /// and then encode them as we do for unsigned integers generally. The reason we use this |
140 | | /// algorithm is that it encodes those values which are close to zero in less bytes; the |
141 | | /// obvious algorithm, where we encode the cast values, gives a very large encoding for all |
142 | | /// negative values. |
143 | | /// |
144 | | /// The zigzag algorithm is defined as follows: |
145 | | /// |
146 | | /// ```ignore |
147 | | /// fn zigzag(v: Signed) -> Unsigned { |
148 | | /// match v { |
149 | | /// 0 => 0, |
150 | | /// v if v < 0 => |v| * 2 - 1 |
151 | | /// v if v > 0 => v * 2 |
152 | | /// } |
153 | | /// } |
154 | | /// ``` |
155 | | /// |
156 | | /// And works such that: |
157 | | /// |
158 | | /// ```ignore |
159 | | /// assert_eq!(zigzag(0), 0); |
160 | | /// assert_eq!(zigzag(-1), 1); |
161 | | /// assert_eq!(zigzag(1), 2); |
162 | | /// assert_eq!(zigzag(-2), 3); |
163 | | /// assert_eq!(zigzag(2), 4); |
164 | | /// assert_eq!(zigzag(i64::min_value()), u64::max_value()); |
165 | | /// ``` |
166 | | /// |
167 | | /// Note that u256 and the like are unsupported by this format; if and when they are added to the |
168 | | /// language, they may be supported via the extension point given by the 255 byte. |
169 | | #[derive(Copy, Clone)] |
170 | | pub struct VarintEncoding; |
171 | | |
172 | | const SINGLE_BYTE_MAX: u8 = 250; |
173 | | const U16_BYTE: u8 = 251; |
174 | | const U32_BYTE: u8 = 252; |
175 | | const U64_BYTE: u8 = 253; |
176 | | const U128_BYTE: u8 = 254; |
177 | | const DESERIALIZE_EXTENSION_POINT_ERR: &str = r#" |
178 | | Byte 255 is treated as an extension point; it should not be encoding anything. |
179 | | Do you have a mismatched bincode version or configuration? |
180 | | "#; |
181 | | |
182 | | impl VarintEncoding { |
183 | 0 | fn varint_size(n: u64) -> u64 { |
184 | 0 | if n <= SINGLE_BYTE_MAX as u64 { |
185 | 0 | 1 |
186 | 0 | } else if n <= u16::max_value() as u64 { |
187 | 0 | (1 + size_of::<u16>()) as u64 |
188 | 0 | } else if n <= u32::max_value() as u64 { |
189 | 0 | (1 + size_of::<u32>()) as u64 |
190 | | } else { |
191 | 0 | (1 + size_of::<u64>()) as u64 |
192 | | } |
193 | 0 | } |
194 | | |
195 | | #[inline(always)] |
196 | 0 | fn zigzag_encode(n: i64) -> u64 { |
197 | 0 | if n < 0 { |
198 | | // let's avoid the edge case of i64::min_value() |
199 | | // !n is equal to `-n - 1`, so this is: |
200 | | // !n * 2 + 1 = 2(-n - 1) + 1 = -2n - 2 + 1 = -2n - 1 |
201 | 0 | !(n as u64) * 2 + 1 |
202 | | } else { |
203 | 0 | (n as u64) * 2 |
204 | | } |
205 | 0 | } |
206 | | |
207 | | #[inline(always)] |
208 | 0 | fn zigzag_decode(n: u64) -> i64 { |
209 | 0 | if n % 2 == 0 { |
210 | | // positive number |
211 | 0 | (n / 2) as i64 |
212 | | } else { |
213 | | // negative number |
214 | | // !m * 2 + 1 = n |
215 | | // !m * 2 = n - 1 |
216 | | // !m = (n - 1) / 2 |
217 | | // m = !((n - 1) / 2) |
218 | | // since we have n is odd, we have floor(n / 2) = floor((n - 1) / 2) |
219 | 0 | !(n / 2) as i64 |
220 | | } |
221 | 0 | } |
222 | | |
223 | 0 | fn serialize_varint<W: Write, O: Options>( |
224 | 0 | ser: &mut ::ser::Serializer<W, O>, |
225 | 0 | n: u64, |
226 | 0 | ) -> Result<()> { |
227 | 0 | if n <= SINGLE_BYTE_MAX as u64 { |
228 | 0 | ser.serialize_byte(n as u8) |
229 | 0 | } else if n <= u16::max_value() as u64 { |
230 | 0 | ser.serialize_byte(U16_BYTE)?; |
231 | 0 | ser.serialize_literal_u16(n as u16) |
232 | 0 | } else if n <= u32::max_value() as u64 { |
233 | 0 | ser.serialize_byte(U32_BYTE)?; |
234 | 0 | ser.serialize_literal_u32(n as u32) |
235 | | } else { |
236 | 0 | ser.serialize_byte(U64_BYTE)?; |
237 | 0 | ser.serialize_literal_u64(n as u64) |
238 | | } |
239 | 0 | } |
240 | | |
241 | 0 | fn deserialize_varint<'de, R: BincodeRead<'de>, O: Options>( |
242 | 0 | de: &mut ::de::Deserializer<R, O>, |
243 | 0 | ) -> Result<u64> { |
244 | 0 | #[allow(ellipsis_inclusive_range_patterns)] |
245 | 0 | match de.deserialize_byte()? { |
246 | 0 | byte @ 0...SINGLE_BYTE_MAX => Ok(byte as u64), |
247 | 0 | U16_BYTE => Ok(de.deserialize_literal_u16()? as u64), |
248 | 0 | U32_BYTE => Ok(de.deserialize_literal_u32()? as u64), |
249 | 0 | U64_BYTE => de.deserialize_literal_u64(), |
250 | 0 | U128_BYTE => Err(Box::new(ErrorKind::Custom( |
251 | 0 | "Invalid value (u128 range): you may have a version or configuration disagreement?" |
252 | 0 | .to_string(), |
253 | 0 | ))), |
254 | 0 | _ => Err(Box::new(ErrorKind::Custom( |
255 | 0 | DESERIALIZE_EXTENSION_POINT_ERR.to_string(), |
256 | 0 | ))), |
257 | | } |
258 | 0 | } |
259 | | |
260 | | serde_if_integer128! { |
261 | | // see zigzag_encode and zigzag_decode for implementation comments |
262 | | #[inline(always)] |
263 | 0 | fn zigzag128_encode(n: i128) -> u128 { |
264 | 0 | if n < 0 { |
265 | 0 | !(n as u128) * 2 + 1 |
266 | | } else { |
267 | 0 | (n as u128) * 2 |
268 | | } |
269 | 0 | } |
270 | | #[inline(always)] |
271 | 0 | fn zigzag128_decode(n: u128) -> i128 { |
272 | 0 | if n % 2 == 0 { |
273 | 0 | (n / 2) as i128 |
274 | | } else { |
275 | 0 | !(n / 2) as i128 |
276 | | } |
277 | 0 | } |
278 | | |
279 | 0 | fn varint128_size(n: u128) -> u64 { |
280 | 0 | if n <= SINGLE_BYTE_MAX as u128 { |
281 | 0 | 1 |
282 | 0 | } else if n <= u16::max_value() as u128 { |
283 | 0 | (1 + size_of::<u16>()) as u64 |
284 | 0 | } else if n <= u32::max_value() as u128 { |
285 | 0 | (1 + size_of::<u32>()) as u64 |
286 | 0 | } else if n <= u64::max_value() as u128 { |
287 | 0 | (1 + size_of::<u64>()) as u64 |
288 | | } else { |
289 | 0 | (1 + size_of::<u128>()) as u64 |
290 | | } |
291 | 0 | } |
292 | | |
293 | 0 | fn serialize_varint128<W: Write, O: Options>( |
294 | 0 | ser: &mut ::ser::Serializer<W, O>, |
295 | 0 | n: u128, |
296 | 0 | ) -> Result<()> { |
297 | 0 | if n <= SINGLE_BYTE_MAX as u128 { |
298 | 0 | ser.serialize_byte(n as u8) |
299 | 0 | } else if n <= u16::max_value() as u128 { |
300 | 0 | ser.serialize_byte(U16_BYTE)?; |
301 | 0 | ser.serialize_literal_u16(n as u16) |
302 | 0 | } else if n <= u32::max_value() as u128 { |
303 | 0 | ser.serialize_byte(U32_BYTE)?; |
304 | 0 | ser.serialize_literal_u32(n as u32) |
305 | 0 | } else if n <= u64::max_value() as u128 { |
306 | 0 | ser.serialize_byte(U64_BYTE)?; |
307 | 0 | ser.serialize_literal_u64(n as u64) |
308 | | } else { |
309 | 0 | ser.serialize_byte(U128_BYTE)?; |
310 | 0 | ser.serialize_literal_u128(n) |
311 | | } |
312 | 0 | } |
313 | | |
314 | 0 | fn deserialize_varint128<'de, R: BincodeRead<'de>, O: Options>( |
315 | 0 | de: &mut ::de::Deserializer<R, O>, |
316 | 0 | ) -> Result<u128> { |
317 | 0 | #[allow(ellipsis_inclusive_range_patterns)] |
318 | 0 | match de.deserialize_byte()? { |
319 | 0 | byte @ 0...SINGLE_BYTE_MAX => Ok(byte as u128), |
320 | 0 | U16_BYTE => Ok(de.deserialize_literal_u16()? as u128), |
321 | 0 | U32_BYTE => Ok(de.deserialize_literal_u32()? as u128), |
322 | 0 | U64_BYTE => Ok(de.deserialize_literal_u64()? as u128), |
323 | 0 | U128_BYTE => de.deserialize_literal_u128(), |
324 | 0 | _ => Err(Box::new(ErrorKind::Custom(DESERIALIZE_EXTENSION_POINT_ERR.to_string()))), |
325 | | } |
326 | 0 | } |
327 | | } |
328 | | } |
329 | | |
330 | | impl IntEncoding for FixintEncoding { |
331 | | #[inline(always)] |
332 | 0 | fn u16_size(_: u16) -> u64 { |
333 | 0 | size_of::<u16>() as u64 |
334 | 0 | } |
335 | | #[inline(always)] |
336 | 0 | fn u32_size(_: u32) -> u64 { |
337 | 0 | size_of::<u32>() as u64 |
338 | 0 | } |
339 | | #[inline(always)] |
340 | 0 | fn u64_size(_: u64) -> u64 { |
341 | 0 | size_of::<u64>() as u64 |
342 | 0 | } |
343 | | |
344 | | #[inline(always)] |
345 | 0 | fn i16_size(_: i16) -> u64 { |
346 | 0 | size_of::<i16>() as u64 |
347 | 0 | } |
348 | | #[inline(always)] |
349 | 0 | fn i32_size(_: i32) -> u64 { |
350 | 0 | size_of::<i32>() as u64 |
351 | 0 | } |
352 | | #[inline(always)] |
353 | 0 | fn i64_size(_: i64) -> u64 { |
354 | 0 | size_of::<i64>() as u64 |
355 | 0 | } |
356 | | |
357 | | #[inline(always)] |
358 | 0 | fn serialize_u16<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u16) -> Result<()> { |
359 | 0 | ser.serialize_literal_u16(val) |
360 | 0 | } |
361 | | #[inline(always)] |
362 | 0 | fn serialize_u32<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u32) -> Result<()> { |
363 | 0 | ser.serialize_literal_u32(val) |
364 | 0 | } |
365 | | #[inline(always)] |
366 | 0 | fn serialize_u64<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u64) -> Result<()> { |
367 | 0 | ser.serialize_literal_u64(val) |
368 | 0 | } |
369 | | |
370 | | #[inline(always)] |
371 | 0 | fn serialize_i16<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i16) -> Result<()> { |
372 | 0 | ser.serialize_literal_u16(val as u16) |
373 | 0 | } |
374 | | #[inline(always)] |
375 | 0 | fn serialize_i32<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i32) -> Result<()> { |
376 | 0 | ser.serialize_literal_u32(val as u32) |
377 | 0 | } |
378 | | #[inline(always)] |
379 | 0 | fn serialize_i64<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i64) -> Result<()> { |
380 | 0 | ser.serialize_literal_u64(val as u64) |
381 | 0 | } |
382 | | |
383 | | #[inline(always)] |
384 | 2.45k | fn deserialize_u16<'de, R: BincodeRead<'de>, O: Options>( |
385 | 2.45k | de: &mut ::Deserializer<R, O>, |
386 | 2.45k | ) -> Result<u16> { |
387 | 2.45k | de.deserialize_literal_u16() |
388 | 2.45k | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 384 | 2.45k | fn deserialize_u16<'de, R: BincodeRead<'de>, O: Options>( | 385 | 2.45k | de: &mut ::Deserializer<R, O>, | 386 | 2.45k | ) -> Result<u16> { | 387 | 2.45k | de.deserialize_literal_u16() | 388 | 2.45k | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u16::<_, _> |
389 | | #[inline(always)] |
390 | 49.6k | fn deserialize_u32<'de, R: BincodeRead<'de>, O: Options>( |
391 | 49.6k | de: &mut ::Deserializer<R, O>, |
392 | 49.6k | ) -> Result<u32> { |
393 | 49.6k | de.deserialize_literal_u32() |
394 | 49.6k | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 390 | 49.6k | fn deserialize_u32<'de, R: BincodeRead<'de>, O: Options>( | 391 | 49.6k | de: &mut ::Deserializer<R, O>, | 392 | 49.6k | ) -> Result<u32> { | 393 | 49.6k | de.deserialize_literal_u32() | 394 | 49.6k | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u32::<_, _> |
395 | | #[inline(always)] |
396 | 16.2k | fn deserialize_u64<'de, R: BincodeRead<'de>, O: Options>( |
397 | 16.2k | de: &mut ::Deserializer<R, O>, |
398 | 16.2k | ) -> Result<u64> { |
399 | 16.2k | de.deserialize_literal_u64() |
400 | 16.2k | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 396 | 16.2k | fn deserialize_u64<'de, R: BincodeRead<'de>, O: Options>( | 397 | 16.2k | de: &mut ::Deserializer<R, O>, | 398 | 16.2k | ) -> Result<u64> { | 399 | 16.2k | de.deserialize_literal_u64() | 400 | 16.2k | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u64::<_, _> |
401 | | |
402 | | #[inline(always)] |
403 | 0 | fn deserialize_i16<'de, R: BincodeRead<'de>, O: Options>( |
404 | 0 | de: &mut ::Deserializer<R, O>, |
405 | 0 | ) -> Result<i16> { |
406 | 0 | Ok(de.deserialize_literal_u16()? as i16) |
407 | 0 | } |
408 | | #[inline(always)] |
409 | 719 | fn deserialize_i32<'de, R: BincodeRead<'de>, O: Options>( |
410 | 719 | de: &mut ::Deserializer<R, O>, |
411 | 719 | ) -> Result<i32> { |
412 | 719 | Ok(de.deserialize_literal_u32()? as i32) |
413 | 719 | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 409 | 719 | fn deserialize_i32<'de, R: BincodeRead<'de>, O: Options>( | 410 | 719 | de: &mut ::Deserializer<R, O>, | 411 | 719 | ) -> Result<i32> { | 412 | 719 | Ok(de.deserialize_literal_u32()? as i32) | 413 | 719 | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i32::<_, _> |
414 | | #[inline(always)] |
415 | 0 | fn deserialize_i64<'de, R: BincodeRead<'de>, O: Options>( |
416 | 0 | de: &mut ::Deserializer<R, O>, |
417 | 0 | ) -> Result<i64> { |
418 | 0 | Ok(de.deserialize_literal_u64()? as i64) |
419 | 0 | } |
420 | | |
421 | | serde_if_integer128! { |
422 | | #[inline(always)] |
423 | 0 | fn u128_size(_: u128) -> u64{ |
424 | 0 | size_of::<u128>() as u64 |
425 | 0 | } |
426 | | #[inline(always)] |
427 | 0 | fn i128_size(_: i128) -> u64{ |
428 | 0 | size_of::<i128>() as u64 |
429 | 0 | } |
430 | | |
431 | | #[inline(always)] |
432 | 0 | fn serialize_u128<W: Write, O: Options>( |
433 | 0 | ser: &mut ::Serializer<W, O>, |
434 | 0 | val: u128, |
435 | 0 | ) -> Result<()> { |
436 | 0 | ser.serialize_literal_u128(val) |
437 | 0 | } |
438 | | #[inline(always)] |
439 | 0 | fn serialize_i128<W: Write, O: Options>( |
440 | 0 | ser: &mut ::Serializer<W, O>, |
441 | 0 | val: i128, |
442 | 0 | ) -> Result<()> { |
443 | 0 | ser.serialize_literal_u128(val as u128) |
444 | 0 | } |
445 | | #[inline(always)] |
446 | 817 | fn deserialize_u128<'de, R: BincodeRead<'de>, O: Options>( |
447 | 817 | de: &mut ::Deserializer<R, O>, |
448 | 817 | ) -> Result<u128> { |
449 | 817 | de.deserialize_literal_u128() |
450 | 817 | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 446 | 817 | fn deserialize_u128<'de, R: BincodeRead<'de>, O: Options>( | 447 | 817 | de: &mut ::Deserializer<R, O>, | 448 | 817 | ) -> Result<u128> { | 449 | 817 | de.deserialize_literal_u128() | 450 | 817 | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_u128::<_, _> |
451 | | #[inline(always)] |
452 | 984 | fn deserialize_i128<'de, R: BincodeRead<'de>, O: Options>( |
453 | 984 | de: &mut ::Deserializer<R, O>, |
454 | 984 | ) -> Result<i128> { |
455 | 984 | Ok(de.deserialize_literal_u128()? as i128) |
456 | 984 | } <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::LittleEndian>> Line | Count | Source | 452 | 984 | fn deserialize_i128<'de, R: BincodeRead<'de>, O: Options>( | 453 | 984 | de: &mut ::Deserializer<R, O>, | 454 | 984 | ) -> Result<i128> { | 455 | 984 | Ok(de.deserialize_literal_u128()? as i128) | 456 | 984 | } |
Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Bounded>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::LittleEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::NativeEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<bincode::de::read::IoReader<&[u8]>, bincode::config::WithOtherEndian<bincode::config::WithOtherLimit<bincode::config::WithOtherTrailing<bincode::config::WithOtherIntEncoding<bincode::config::DefaultOptions, bincode::config::int::FixintEncoding>, bincode::config::trailing::AllowTrailing>, bincode::config::limit::Infinite>, bincode::config::endian::BigEndian>> Unexecuted instantiation: <bincode::config::int::FixintEncoding as bincode::config::int::IntEncoding>::deserialize_i128::<_, _> |
457 | | } |
458 | | } |
459 | | |
460 | | impl IntEncoding for VarintEncoding { |
461 | | #[inline(always)] |
462 | 0 | fn u16_size(n: u16) -> u64 { |
463 | 0 | Self::varint_size(n as u64) |
464 | 0 | } |
465 | | #[inline(always)] |
466 | 0 | fn u32_size(n: u32) -> u64 { |
467 | 0 | Self::varint_size(n as u64) |
468 | 0 | } |
469 | | #[inline(always)] |
470 | 0 | fn u64_size(n: u64) -> u64 { |
471 | 0 | Self::varint_size(n) |
472 | 0 | } |
473 | | |
474 | | #[inline(always)] |
475 | 0 | fn i16_size(n: i16) -> u64 { |
476 | 0 | Self::varint_size(Self::zigzag_encode(n as i64)) |
477 | 0 | } |
478 | | #[inline(always)] |
479 | 0 | fn i32_size(n: i32) -> u64 { |
480 | 0 | Self::varint_size(Self::zigzag_encode(n as i64)) |
481 | 0 | } |
482 | | #[inline(always)] |
483 | 0 | fn i64_size(n: i64) -> u64 { |
484 | 0 | Self::varint_size(Self::zigzag_encode(n)) |
485 | 0 | } |
486 | | |
487 | | #[inline(always)] |
488 | 0 | fn serialize_u16<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u16) -> Result<()> { |
489 | 0 | Self::serialize_varint(ser, val as u64) |
490 | 0 | } |
491 | | #[inline(always)] |
492 | 0 | fn serialize_u32<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u32) -> Result<()> { |
493 | 0 | Self::serialize_varint(ser, val as u64) |
494 | 0 | } |
495 | | #[inline(always)] |
496 | 0 | fn serialize_u64<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: u64) -> Result<()> { |
497 | 0 | Self::serialize_varint(ser, val) |
498 | 0 | } |
499 | | |
500 | | #[inline(always)] |
501 | 0 | fn serialize_i16<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i16) -> Result<()> { |
502 | 0 | Self::serialize_varint(ser, Self::zigzag_encode(val as i64)) |
503 | 0 | } |
504 | | #[inline(always)] |
505 | 0 | fn serialize_i32<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i32) -> Result<()> { |
506 | 0 | Self::serialize_varint(ser, Self::zigzag_encode(val as i64)) |
507 | 0 | } |
508 | | #[inline(always)] |
509 | 0 | fn serialize_i64<W: Write, O: Options>(ser: &mut ::Serializer<W, O>, val: i64) -> Result<()> { |
510 | 0 | Self::serialize_varint(ser, Self::zigzag_encode(val)) |
511 | 0 | } |
512 | | |
513 | | #[inline(always)] |
514 | 0 | fn deserialize_u16<'de, R: BincodeRead<'de>, O: Options>( |
515 | 0 | de: &mut ::Deserializer<R, O>, |
516 | 0 | ) -> Result<u16> { |
517 | 0 | Self::deserialize_varint(de).and_then(cast_u64_to_u16) |
518 | 0 | } |
519 | | #[inline(always)] |
520 | 0 | fn deserialize_u32<'de, R: BincodeRead<'de>, O: Options>( |
521 | 0 | de: &mut ::Deserializer<R, O>, |
522 | 0 | ) -> Result<u32> { |
523 | 0 | Self::deserialize_varint(de).and_then(cast_u64_to_u32) |
524 | 0 | } |
525 | | #[inline(always)] |
526 | 0 | fn deserialize_u64<'de, R: BincodeRead<'de>, O: Options>( |
527 | 0 | de: &mut ::Deserializer<R, O>, |
528 | 0 | ) -> Result<u64> { |
529 | 0 | Self::deserialize_varint(de) |
530 | 0 | } |
531 | | |
532 | | #[inline(always)] |
533 | 0 | fn deserialize_i16<'de, R: BincodeRead<'de>, O: Options>( |
534 | 0 | de: &mut ::Deserializer<R, O>, |
535 | 0 | ) -> Result<i16> { |
536 | 0 | Self::deserialize_varint(de) |
537 | 0 | .map(Self::zigzag_decode) |
538 | 0 | .and_then(cast_i64_to_i16) |
539 | 0 | } |
540 | | #[inline(always)] |
541 | 0 | fn deserialize_i32<'de, R: BincodeRead<'de>, O: Options>( |
542 | 0 | de: &mut ::Deserializer<R, O>, |
543 | 0 | ) -> Result<i32> { |
544 | 0 | Self::deserialize_varint(de) |
545 | 0 | .map(Self::zigzag_decode) |
546 | 0 | .and_then(cast_i64_to_i32) |
547 | 0 | } |
548 | | #[inline(always)] |
549 | 0 | fn deserialize_i64<'de, R: BincodeRead<'de>, O: Options>( |
550 | 0 | de: &mut ::Deserializer<R, O>, |
551 | 0 | ) -> Result<i64> { |
552 | 0 | Self::deserialize_varint(de).map(Self::zigzag_decode) |
553 | 0 | } |
554 | | |
555 | | serde_if_integer128! { |
556 | | #[inline(always)] |
557 | 0 | fn u128_size(n: u128) -> u64 { |
558 | 0 | Self::varint128_size(n) |
559 | 0 | } |
560 | | #[inline(always)] |
561 | 0 | fn i128_size(n: i128) -> u64 { |
562 | 0 | Self::varint128_size(Self::zigzag128_encode(n)) |
563 | 0 | } |
564 | | #[inline(always)] |
565 | 0 | fn serialize_u128<W: Write, O: Options>( |
566 | 0 | ser: &mut ::Serializer<W, O>, |
567 | 0 | val: u128, |
568 | 0 | ) -> Result<()> { |
569 | 0 | Self::serialize_varint128(ser, val) |
570 | 0 | } |
571 | | #[inline(always)] |
572 | 0 | fn serialize_i128<W: Write, O: Options>( |
573 | 0 | ser: &mut ::Serializer<W, O>, |
574 | 0 | val: i128, |
575 | 0 | ) -> Result<()> { |
576 | 0 | Self::serialize_varint128(ser, Self::zigzag128_encode(val)) |
577 | 0 | } |
578 | | #[inline(always)] |
579 | 0 | fn deserialize_u128<'de, R: BincodeRead<'de>, O: Options>( |
580 | 0 | de: &mut ::Deserializer<R, O>, |
581 | 0 | ) -> Result<u128> { |
582 | 0 | Self::deserialize_varint128(de) |
583 | 0 | } |
584 | | #[inline(always)] |
585 | 0 | fn deserialize_i128<'de, R: BincodeRead<'de>, O: Options>( |
586 | 0 | de: &mut ::Deserializer<R, O>, |
587 | 0 | ) -> Result<i128> { |
588 | 0 | Self::deserialize_varint128(de).map(Self::zigzag128_decode) |
589 | 0 | } |
590 | | } |
591 | | } |
592 | | |
593 | 14.2k | fn cast_u64_to_usize(n: u64) -> Result<usize> { |
594 | 14.2k | if n <= usize::max_value() as u64 { |
595 | 14.2k | Ok(n as usize) |
596 | | } else { |
597 | 0 | Err(Box::new(ErrorKind::Custom(format!( |
598 | 0 | "Invalid size {}: sizes must fit in a usize (0 to {})", |
599 | 0 | n, |
600 | 0 | usize::max_value() |
601 | 0 | )))) |
602 | | } |
603 | 14.2k | } |
604 | 0 | fn cast_u64_to_u32(n: u64) -> Result<u32> { |
605 | 0 | if n <= u32::max_value() as u64 { |
606 | 0 | Ok(n as u32) |
607 | | } else { |
608 | 0 | Err(Box::new(ErrorKind::Custom(format!( |
609 | 0 | "Invalid u32 {}: you may have a version disagreement?", |
610 | 0 | n, |
611 | 0 | )))) |
612 | | } |
613 | 0 | } |
614 | 0 | fn cast_u64_to_u16(n: u64) -> Result<u16> { |
615 | 0 | if n <= u16::max_value() as u64 { |
616 | 0 | Ok(n as u16) |
617 | | } else { |
618 | 0 | Err(Box::new(ErrorKind::Custom(format!( |
619 | 0 | "Invalid u16 {}: you may have a version disagreement?", |
620 | 0 | n, |
621 | 0 | )))) |
622 | | } |
623 | 0 | } |
624 | | |
625 | 0 | fn cast_i64_to_i32(n: i64) -> Result<i32> { |
626 | 0 | if n <= i32::max_value() as i64 && n >= i32::min_value() as i64 { |
627 | 0 | Ok(n as i32) |
628 | | } else { |
629 | 0 | Err(Box::new(ErrorKind::Custom(format!( |
630 | 0 | "Invalid i32 {}: you may have a version disagreement?", |
631 | 0 | n, |
632 | 0 | )))) |
633 | | } |
634 | 0 | } |
635 | | |
636 | 0 | fn cast_i64_to_i16(n: i64) -> Result<i16> { |
637 | 0 | if n <= i16::max_value() as i64 && n >= i16::min_value() as i64 { |
638 | 0 | Ok(n as i16) |
639 | | } else { |
640 | 0 | Err(Box::new(ErrorKind::Custom(format!( |
641 | 0 | "Invalid i16 {}: you may have a version disagreement?", |
642 | 0 | n, |
643 | 0 | )))) |
644 | | } |
645 | 0 | } |
646 | | |
647 | | #[cfg(test)] |
648 | | mod test { |
649 | | use super::VarintEncoding; |
650 | | |
651 | | #[test] |
652 | | fn test_zigzag_encode() { |
653 | | let zigzag = VarintEncoding::zigzag_encode; |
654 | | |
655 | | assert_eq!(zigzag(0), 0); |
656 | | for x in 1..512 { |
657 | | assert_eq!(zigzag(x), (x as u64) * 2); |
658 | | assert_eq!(zigzag(-x), (x as u64) * 2 - 1); |
659 | | } |
660 | | } |
661 | | |
662 | | #[test] |
663 | | fn test_zigzag_decode() { |
664 | | // zigzag' |
665 | | let zigzagp = VarintEncoding::zigzag_decode; |
666 | | for x in (0..512).map(|x| x * 2) { |
667 | | assert_eq!(zigzagp(x), x as i64 / 2); |
668 | | assert_eq!(zigzagp(x + 1), -(x as i64) / 2 - 1); |
669 | | } |
670 | | } |
671 | | |
672 | | #[test] |
673 | | fn test_zigzag_edge_cases() { |
674 | | let (zigzag, zigzagp) = (VarintEncoding::zigzag_encode, VarintEncoding::zigzag_decode); |
675 | | |
676 | | assert_eq!(zigzag(i64::max_value()), u64::max_value() - 1); |
677 | | assert_eq!(zigzag(i64::min_value()), u64::max_value()); |
678 | | |
679 | | assert_eq!(zigzagp(u64::max_value() - 1), i64::max_value()); |
680 | | assert_eq!(zigzagp(u64::max_value()), i64::min_value()); |
681 | | } |
682 | | } |