Coverage Report

Created: 2025-11-11 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}