Skip to main content

messagepack_core/encode/
bool.rs

1//! Boolean encoders.
2
3use super::{Encode, Result};
4use crate::{formats::Format, io::IoWrite};
5
6impl Encode for bool {
7    fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, <W as IoWrite>::Error> {
8        match self {
9            true => {
10                writer.write(&Format::True.as_slice())?;
11                Ok(1)
12            }
13            false => {
14                writer.write(&Format::False.as_slice())?;
15                Ok(1)
16            }
17        }
18    }
19}
20
21impl Encode for core::sync::atomic::AtomicBool {
22    fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, W::Error> {
23        self.load(core::sync::atomic::Ordering::Relaxed)
24            .encode(writer)
25    }
26}
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31    use rstest::rstest;
32
33    #[rstest]
34    #[case(true,[0xc3])]
35    #[case(false,[0xc2])]
36    fn encode_bool<V: Encode, E: AsRef<[u8]> + Sized>(#[case] value: V, #[case] expected: E) {
37        let expected = expected.as_ref();
38
39        let mut buf = vec![];
40        let n = value.encode(&mut buf).unwrap();
41        assert_eq!(buf, expected);
42        assert_eq!(n, expected.len());
43    }
44}