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}