1use crate::{MlsDecode, MlsEncode, MlsSize};
6use alloc::vec::Vec;
7
8impl MlsSize for bool {
9 fn mls_encoded_len(&self) -> usize {
10 1
11 }
12}
13
14impl MlsEncode for bool {
15 fn mls_encode(&self, writer: &mut Vec<u8>) -> Result<(), crate::Error> {
16 writer.push(*self as u8);
17 Ok(())
18 }
19}
20
21impl MlsDecode for bool {
22 fn mls_decode(reader: &mut &[u8]) -> Result<Self, crate::Error> {
23 MlsDecode::mls_decode(reader).map(|i: u8| i != 0)
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 #[cfg(target_arch = "wasm32")]
30 use wasm_bindgen_test::wasm_bindgen_test as test;
31
32 use crate::{MlsDecode, MlsEncode};
33
34 use alloc::vec;
35
36 #[test]
37 fn round_trip() {
38 assert_eq!(false.mls_encode_to_vec().unwrap(), vec![0]);
39 assert_eq!(true.mls_encode_to_vec().unwrap(), vec![1]);
40
41 let vec = vec![true, true, false];
42 let bytes = vec.mls_encode_to_vec().unwrap();
43 assert_eq!(vec, Vec::mls_decode(&mut &*bytes).unwrap())
44 }
45}