compact_encoding/
generic.rs

1//! Generic compact encodings
2
3use super::{CompactEncoding, EncodingError, State};
4
5impl CompactEncoding<String> for State {
6    fn preencode(&mut self, value: &String) -> Result<usize, EncodingError> {
7        self.preencode_str(value)
8    }
9
10    fn encode(&mut self, value: &String, buffer: &mut [u8]) -> Result<usize, EncodingError> {
11        self.encode_str(value, buffer)
12    }
13
14    fn decode(&mut self, buffer: &[u8]) -> Result<String, EncodingError> {
15        self.decode_string(buffer)
16    }
17}
18
19impl CompactEncoding<u8> for State {
20    fn preencode(&mut self, _: &u8) -> Result<usize, EncodingError> {
21        self.add_end(1)
22    }
23
24    fn encode(&mut self, value: &u8, buffer: &mut [u8]) -> Result<usize, EncodingError> {
25        buffer[self.start()] = *value;
26        self.add_start(1)
27    }
28
29    fn decode(&mut self, buffer: &[u8]) -> Result<u8, EncodingError> {
30        let value = buffer[self.start()];
31        self.add_start(1)?;
32        Ok(value)
33    }
34}
35
36impl CompactEncoding<u32> for State {
37    fn preencode(&mut self, value: &u32) -> Result<usize, EncodingError> {
38        self.preencode_uint_var(value)
39    }
40
41    fn encode(&mut self, value: &u32, buffer: &mut [u8]) -> Result<usize, EncodingError> {
42        self.encode_u32_var(value, buffer)
43    }
44
45    fn decode(&mut self, buffer: &[u8]) -> Result<u32, EncodingError> {
46        self.decode_u32_var(buffer)
47    }
48}
49
50impl CompactEncoding<u64> for State {
51    fn preencode(&mut self, value: &u64) -> Result<usize, EncodingError> {
52        self.preencode_uint_var(value)
53    }
54
55    fn encode(&mut self, value: &u64, buffer: &mut [u8]) -> Result<usize, EncodingError> {
56        self.encode_u64_var(value, buffer)
57    }
58
59    fn decode(&mut self, buffer: &[u8]) -> Result<u64, EncodingError> {
60        self.decode_u64_var(buffer)
61    }
62}
63
64impl CompactEncoding<usize> for State {
65    fn preencode(&mut self, value: &usize) -> Result<usize, EncodingError> {
66        self.preencode_usize_var(value)
67    }
68
69    fn encode(&mut self, value: &usize, buffer: &mut [u8]) -> Result<usize, EncodingError> {
70        self.encode_usize_var(value, buffer)
71    }
72
73    fn decode(&mut self, buffer: &[u8]) -> Result<usize, EncodingError> {
74        self.decode_usize_var(buffer)
75    }
76}
77
78impl CompactEncoding<Box<[u8]>> for State {
79    fn preencode(&mut self, value: &Box<[u8]>) -> Result<usize, EncodingError> {
80        self.preencode_buffer(value)
81    }
82
83    fn encode(&mut self, value: &Box<[u8]>, buffer: &mut [u8]) -> Result<usize, EncodingError> {
84        self.encode_buffer(value, buffer)
85    }
86
87    fn decode(&mut self, buffer: &[u8]) -> Result<Box<[u8]>, EncodingError> {
88        self.decode_buffer(buffer)
89    }
90}
91
92impl CompactEncoding<Vec<u8>> for State {
93    fn preencode(&mut self, value: &Vec<u8>) -> Result<usize, EncodingError> {
94        self.preencode_buffer_vec(value)
95    }
96
97    fn encode(&mut self, value: &Vec<u8>, buffer: &mut [u8]) -> Result<usize, EncodingError> {
98        self.encode_buffer(value, buffer)
99    }
100
101    fn decode(&mut self, buffer: &[u8]) -> Result<Vec<u8>, EncodingError> {
102        self.decode_buffer_vec(buffer)
103    }
104}
105
106impl CompactEncoding<Vec<u32>> for State {
107    fn preencode(&mut self, value: &Vec<u32>) -> Result<usize, EncodingError> {
108        self.preencode_u32_array(value)
109    }
110
111    fn encode(&mut self, value: &Vec<u32>, buffer: &mut [u8]) -> Result<usize, EncodingError> {
112        self.encode_u32_array(value, buffer)
113    }
114
115    fn decode(&mut self, buffer: &[u8]) -> Result<Vec<u32>, EncodingError> {
116        self.decode_u32_array(buffer)
117    }
118}
119
120impl CompactEncoding<Vec<String>> for State {
121    fn preencode(&mut self, value: &Vec<String>) -> Result<usize, EncodingError> {
122        self.preencode_string_array(value)
123    }
124
125    fn encode(&mut self, value: &Vec<String>, buffer: &mut [u8]) -> Result<usize, EncodingError> {
126        self.encode_string_array(value, buffer)
127    }
128
129    fn decode(&mut self, buffer: &[u8]) -> Result<Vec<String>, EncodingError> {
130        self.decode_string_array(buffer)
131    }
132}
133
134impl CompactEncoding<Vec<[u8; 32]>> for State {
135    fn preencode(&mut self, value: &Vec<[u8; 32]>) -> Result<usize, EncodingError> {
136        self.preencode_fixed_32_array(value)
137    }
138
139    fn encode(&mut self, value: &Vec<[u8; 32]>, buffer: &mut [u8]) -> Result<usize, EncodingError> {
140        self.encode_fixed_32_array(value, buffer)
141    }
142
143    fn decode(&mut self, buffer: &[u8]) -> Result<Vec<[u8; 32]>, EncodingError> {
144        self.decode_fixed_32_array(buffer)
145    }
146}