1use super::primitive::*;
2use crate::{code, PackError};
3use std::io;
4
5const UINT8_MIN: u8 = 128; const UINT16_MIN: u16 = 256; const UINT32_MIN: u32 = 65536; const UINT64_MIN: u64 = 4294967296; pub 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}