mls_rs_codec/
bool.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// Copyright by contributors to this project.
3// SPDX-License-Identifier: (Apache-2.0 OR MIT)
4
5use 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}