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<W: IoWrite> Encode<W> for bool {
7    fn encode(&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<W> Encode<W> for core::sync::atomic::AtomicBool
22where
23    W: IoWrite,
24{
25    fn encode(&self, writer: &mut W) -> Result<usize, W::Error> {
26        self.load(core::sync::atomic::Ordering::Relaxed)
27            .encode(writer)
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34    use rstest::rstest;
35
36    #[rstest]
37    #[case(true,[0xc3])]
38    #[case(false,[0xc2])]
39    fn encode_bool<V: Encode<Vec<u8>>, E: AsRef<[u8]> + Sized>(
40        #[case] value: V,
41        #[case] expected: E,
42    ) {
43        let expected = expected.as_ref();
44
45        let mut buf = vec![];
46        let n = value.encode(&mut buf).unwrap();
47        assert_eq!(buf, expected);
48        assert_eq!(n, expected.len());
49    }
50}