messagepack-core 0.2.4

messagepack for `no_std`
Documentation
//! Boolean encoders.

use super::{Encode, Result};
use crate::{formats::Format, io::IoWrite};

impl Encode for bool {
    fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, <W as IoWrite>::Error> {
        match self {
            true => {
                writer.write(&Format::True.as_slice())?;
                Ok(1)
            }
            false => {
                writer.write(&Format::False.as_slice())?;
                Ok(1)
            }
        }
    }
}

impl Encode for core::sync::atomic::AtomicBool {
    fn encode<W: IoWrite>(&self, writer: &mut W) -> Result<usize, W::Error> {
        self.load(core::sync::atomic::Ordering::Relaxed)
            .encode(writer)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use rstest::rstest;

    #[rstest]
    #[case(true,[0xc3])]
    #[case(false,[0xc2])]
    fn encode_bool<V: Encode, E: AsRef<[u8]> + Sized>(#[case] value: V, #[case] expected: E) {
        let expected = expected.as_ref();

        let mut buf = vec![];
        let n = value.encode(&mut buf).unwrap();
        assert_eq!(buf, expected);
        assert_eq!(n, expected.len());
    }
}