1use bitvec::prelude::*;
4
5use crate::per::PerCodecData;
6
7#[allow(unused)]
8use crate::per::common::encode::*;
9
10use crate::PerCodecError;
11
12pub fn encode_choice_idx(
17 data: &mut PerCodecData,
18 lb: i128,
19 ub: i128,
20 is_extensible: bool,
21 idx: i128,
22 extended: bool,
23) -> Result<(), PerCodecError> {
24
25 encode_choice_idx_common(data, lb, ub, is_extensible, idx, extended, true)
26}
27
28pub fn encode_sequence_header(
30 data: &mut PerCodecData,
31 is_extensible: bool,
32 optionals: &BitSlice<u8, Msb0>,
33 extended: bool,
34) -> Result<(), PerCodecError> {
35
36 encode_sequence_header_common(data, is_extensible, optionals, extended, true)
37}
38
39pub fn encode_integer(
46 data: &mut PerCodecData,
47 lb: Option<i128>,
48 ub: Option<i128>,
49 is_extensible: bool,
50 value: i128,
51 extended: bool,
52) -> Result<(), PerCodecError> {
53
54 encode_integer_common(data, lb, ub, is_extensible, value, extended, true)
55}
56
57pub fn encode_bool(data: &mut PerCodecData, value: bool) -> Result<(), PerCodecError> {
61
62 encode_bool_common(data, value, true)
63}
64
65pub fn encode_enumerated(
67 data: &mut PerCodecData,
68 lb: Option<i128>,
69 ub: Option<i128>,
70 is_extensible: bool,
71 value: i128,
72 extended: bool,
73) -> Result<(), PerCodecError> {
74
75 encode_enumerated_common(data, lb, ub, is_extensible, value, extended, true)
76}
77
78pub fn encode_bitstring(
80 data: &mut PerCodecData,
81 lb: Option<i128>,
82 ub: Option<i128>,
83 is_extensible: bool,
84 bit_string: &BitSlice<u8, Msb0>,
85 extended: bool,
86) -> Result<(), PerCodecError> {
87
88 encode_bitstring_common(data, lb, ub, is_extensible, bit_string, extended, true)
89}
90
91pub fn encode_octetstring(
93 data: &mut PerCodecData,
94 lb: Option<i128>,
95 ub: Option<i128>,
96 is_extensible: bool,
97 octet_string: &Vec<u8>,
98 extended: bool,
99) -> Result<(), PerCodecError> {
100
101 encode_octet_string_common(data, lb, ub, is_extensible, octet_string, extended, true)
102}
103
104pub fn encode_length_determinent(
106 data: &mut PerCodecData,
107 lb: Option<i128>,
108 ub: Option<i128>,
109 normally_small: bool,
110 value: usize,
111) -> Result<(), PerCodecError> {
112
113 encode_length_determinent_common(data, lb, ub, normally_small, value, true)
114}
115
116pub fn encode_visible_string(
118 data: &mut PerCodecData,
119 lb: Option<i128>,
120 ub: Option<i128>,
121 is_extensible: bool,
122 value: &String,
123 extended: bool,
124) -> Result<(), PerCodecError> {
125
126 encode_string_common(data, lb, ub, is_extensible, value, extended, true)
127}
128
129pub fn encode_printable_string(
131 data: &mut PerCodecData,
132 lb: Option<i128>,
133 ub: Option<i128>,
134 is_extensible: bool,
135 value: &String,
136 extended: bool,
137) -> Result<(), PerCodecError> {
138
139 encode_string_common(data, lb, ub, is_extensible, value, extended, true)
140}
141
142pub fn encode_utf8_string(
144 data: &mut PerCodecData,
145 lb: Option<i128>,
146 ub: Option<i128>,
147 is_extensible: bool,
148 value: &String,
149 extended: bool,
150) -> Result<(), PerCodecError> {
151
152 encode_string_common(data, lb, ub, is_extensible, value, extended, true)
153}
154
155#[cfg(test)]
156mod tests {
157
158 use super::*;
159
160 #[test]
161 fn encode_bool_always_success() {
162 let mut data = PerCodecData::new_aper();
163
164 let result = encode_bool(&mut data, true);
165 assert!(result.is_ok());
166 assert_eq!(data.bits.len(), 1);
167 assert_eq!(data.bits[0], true);
168 }
169
170 #[test]
171 fn int_too_small() {
172 assert!(encode_integer(
173 &mut PerCodecData::new_aper(),
174 Some(1),
175 None,
176 false,
177 0,
178 false
179 )
180 .is_err());
181 }
182
183 #[test]
184 fn int_too_big() {
185 assert!(encode_integer(
186 &mut PerCodecData::new_aper(),
187 Some(-1),
188 Some(0),
189 false,
190 1,
191 false
192 )
193 .is_err());
194 }
195
196 #[test]
197 fn octetstring_too_small() {
198 assert!(encode_octetstring(
199 &mut PerCodecData::new_aper(),
200 Some(2),
201 None,
202 false,
203 &vec![0],
204 false
205 )
206 .is_err());
207 }
208 #[test]
209 fn octetstring_too_big() {
210 assert!(encode_octetstring(
211 &mut PerCodecData::new_aper(),
212 None,
213 Some(1),
214 false,
215 &vec![0, 0],
216 false
217 )
218 .is_err());
219 }
220
221 #[test]
222 fn string_too_small() {
223 assert!(encode_visible_string(
224 &mut PerCodecData::new_aper(),
225 Some(2),
226 None,
227 false,
228 &"a".to_string(),
229 false
230 )
231 .is_err());
232 }
233
234 #[test]
235 fn string_too_big() {
236 assert!(encode_visible_string(
237 &mut PerCodecData::new_aper(),
238 None,
239 Some(1),
240 false,
241 &"aa".to_string(),
242 false
243 )
244 .is_err());
245 }
246
247 #[test]
248 fn length_too_small() {
249 assert!(
250 encode_length_determinent(&mut PerCodecData::new_aper(), Some(2), None, false, 1,)
251 .is_err()
252 );
253 }
254 #[test]
255 fn length_too_big() {
256 assert!(
257 encode_length_determinent(&mut PerCodecData::new_aper(), None, Some(1), false, 2,)
258 .is_err()
259 );
260 }
261
262 #[test]
263 fn big_length_too_big() {
264 assert!(encode_length_determinent(
265 &mut PerCodecData::new_aper(),
266 None,
267 Some(65536),
268 false,
269 65537,
270 )
271 .is_err());
272 }
273
274 #[test]
275 fn bitstring_too_small() {
276 assert!(encode_bitstring(
277 &mut PerCodecData::new_aper(),
278 Some(2),
279 None,
280 false,
281 bits![u8, Msb0; 0],
282 false
283 )
284 .is_err());
285 }
286
287 #[test]
288 fn bitstring_too_big() {
289 assert!(encode_bitstring(
290 &mut PerCodecData::new_aper(),
291 None,
292 Some(1),
293 false,
294 bits![u8, Msb0; 0, 0],
295 false
296 )
297 .is_err());
298 }
299}