msgpack/pack/
uint.rs

1use super::primitive::*;
2use crate::{code, PackError};
3use std::io;
4
5const UINT8_MIN: u8 = 128; // 1 << 7
6const UINT16_MIN: u16 = 256; // 1 << 8
7const UINT32_MIN: u32 = 65536; // 1 << 16
8const UINT64_MIN: u64 = 4294967296; // 1 << 32
9
10pub fn pack_pos_fixint<W: io::Write>(writer: &mut W, v: u8) -> Result<(), PackError> {
11    if v < UINT8_MIN {
12        write_data_u8(writer, code::POS_INT | v)
13    } else {
14        use std::io::ErrorKind;
15        Err(PackError::WriteError(io::Error::new(
16            ErrorKind::Other,
17            format!("Value is out of range for positive fix int: {:?}", v),
18        )))
19    }
20}
21
22pub fn pack_u8<W: io::Write>(writer: &mut W, v: u8) -> Result<(), PackError> {
23    write_data_u8(writer, code::UINT8)?;
24    write_data_u8(writer, v)
25}
26
27pub fn pack_u16<W: io::Write>(writer: &mut W, v: u16) -> Result<(), PackError> {
28    write_data_u8(writer, code::UINT16)?;
29    write_data_u16(writer, v)
30}
31
32pub fn pack_u32<W: io::Write>(writer: &mut W, v: u32) -> Result<(), PackError> {
33    write_data_u8(writer, code::UINT32)?;
34    write_data_u32(writer, v)
35}
36
37pub fn pack_u64<W: io::Write>(writer: &mut W, v: u64) -> Result<(), PackError> {
38    write_data_u8(writer, code::UINT64)?;
39    write_data_u64(writer, v)
40}
41
42pub fn pack_from_u8<W: io::Write>(writer: &mut W, v: u8) -> Result<(), PackError> {
43    if v >= UINT8_MIN {
44        pack_u8(writer, v)
45    } else {
46        pack_pos_fixint(writer, v)
47    }
48}
49
50pub fn pack_from_u16<W: io::Write>(writer: &mut W, v: u16) -> Result<(), PackError> {
51    if v >= UINT16_MIN {
52        pack_u16(writer, v)
53    } else {
54        pack_from_u8(writer, v as u8)
55    }
56}
57
58pub fn pack_from_u32<W: io::Write>(writer: &mut W, v: u32) -> Result<(), PackError> {
59    if v >= UINT32_MIN {
60        pack_u32(writer, v)
61    } else {
62        pack_from_u16(writer, v as u16)
63    }
64}
65
66pub fn pack_from_u64<W: io::Write>(writer: &mut W, v: u64) -> Result<(), PackError> {
67    if v >= UINT64_MIN {
68        pack_u64(writer, v)
69    } else {
70        pack_from_u32(writer, v as u32)
71    }
72}