msgpack/
packer.rs

1use std::io;
2
3use crate::{pack, PackError, Value};
4
5#[derive(Debug)]
6pub struct Packer<W> {
7    pub(crate) wr: W,
8}
9
10impl<W> Packer<W> {
11    pub fn new(writer: W) -> Packer<W> {
12        Packer { wr: writer }
13    }
14
15    pub fn get_ref(&self) -> &W {
16        &self.wr
17    }
18
19    pub fn get_mut(&mut self) -> &mut W {
20        &mut self.wr
21    }
22
23    pub fn into_inner(self) -> W {
24        self.wr
25    }
26}
27
28impl<W: io::Write> Packer<W> {
29    pub fn pack_nil(&mut self) -> Result<(), PackError> {
30        pack::pack_nil(&mut self.wr)
31    }
32
33    pub fn pack_uint(&mut self, v: u64) -> Result<(), PackError> {
34        pack::pack_from_u64(&mut self.wr, v)
35    }
36    pub fn pack_from_u8(&mut self, v: u8) -> Result<(), PackError> {
37        pack::pack_from_u8(&mut self.wr, v)
38    }
39
40    pub fn pack_from_u16(&mut self, v: u16) -> Result<(), PackError> {
41        pack::pack_from_u16(&mut self.wr, v)
42    }
43
44    pub fn pack_from_u32(&mut self, v: u32) -> Result<(), PackError> {
45        pack::pack_from_u32(&mut self.wr, v)
46    }
47
48    pub fn pack_from_u64(&mut self, v: u64) -> Result<(), PackError> {
49        pack::pack_from_u64(&mut self.wr, v)
50    }
51
52    pub fn pack_int(&mut self, v: i64) -> Result<(), PackError> {
53        pack::pack_from_i64(&mut self.wr, v)
54    }
55
56    pub fn pack_from_i8(&mut self, v: i8) -> Result<(), PackError> {
57        pack::pack_from_i8(&mut self.wr, v)
58    }
59
60    pub fn pack_from_i16(&mut self, v: i16) -> Result<(), PackError> {
61        pack::pack_from_i16(&mut self.wr, v)
62    }
63
64    pub fn pack_from_i32(&mut self, v: i32) -> Result<(), PackError> {
65        pack::pack_from_i32(&mut self.wr, v)
66    }
67
68    pub fn pack_from_i64(&mut self, v: i64) -> Result<(), PackError> {
69        pack::pack_from_i64(&mut self.wr, v)
70    }
71
72    pub fn pack_f32(&mut self, v: f32) -> Result<(), PackError> {
73        pack::pack_f32(&mut self.wr, v)
74    }
75
76    pub fn pack_f64(&mut self, v: f64) -> Result<(), PackError> {
77        pack::pack_f64(&mut self.wr, v)
78    }
79
80    pub fn pack_bool(&mut self, v: bool) -> Result<(), PackError> {
81        pack::pack_bool(&mut self.wr, v)
82    }
83
84    pub fn pack_str(&mut self, v: &str) -> Result<(), PackError> {
85        pack::pack_str(&mut self.wr, v)
86    }
87
88    pub fn pack_bin(&mut self, v: &[u8]) -> Result<(), PackError> {
89        pack::pack_bin(&mut self.wr, v)
90    }
91
92    pub fn pack_ary_header(&mut self, len: usize) -> Result<(), PackError> {
93        pack::pack_ary_header(&mut self.wr, len)
94    }
95
96    pub fn pack_map_header(&mut self, len: usize) -> Result<(), PackError> {
97        pack::pack_map_header(&mut self.wr, len)
98    }
99
100    pub fn pack_ext_header(&mut self, ext_type: i8, len: usize) -> Result<(), PackError> {
101        pack::pack_ext_header(&mut self.wr, ext_type, len)
102    }
103
104    pub fn pack_value(&mut self, v: Value) -> Result<(), PackError> {
105        pack::pack_value(&mut self.wr, v)
106    }
107
108    pub fn write_payload(&mut self, v: &[u8]) -> Result<(), PackError> {
109        pack::write_all(&mut self.wr, v)
110    }
111
112    pub fn flush(&mut self) -> Result<(), PackError> {
113        self.wr.flush().map_err(PackError::WriteError)
114    }
115}