lilliput_core/encoder/
bool.rs

1use crate::{binary, error::Result, header::BoolHeader, io::Write, value::BoolValue};
2
3use super::Encoder;
4
5impl<W> Encoder<W>
6where
7    W: Write,
8{
9    // MARK: - Value
10
11    /// Encodes a boolean value.
12    #[inline]
13    pub fn encode_bool(&mut self, value: bool) -> Result<()> {
14        let header = self.header_for_bool(value);
15        self.encode_bool_header(&header)
16    }
17
18    /// Encodes a boolean value, from a `BoolValue`.
19    #[inline]
20    pub fn encode_bool_value(&mut self, value: &BoolValue) -> Result<()> {
21        self.encode_bool(value.0)
22    }
23
24    // MARK: - Header
25
26    /// Encodes a boolean value's header.
27    #[inline]
28    pub fn encode_bool_header(&mut self, header: &BoolHeader) -> Result<()> {
29        let mut byte = BoolHeader::TYPE_BITS;
30
31        byte |= binary::bits_if(BoolHeader::VALUE_BIT, header.value());
32
33        #[cfg(feature = "tracing")]
34        tracing::debug!(
35            byte = crate::binary::fmt_byte(byte),
36            is_compact = true,
37            value = header.value()
38        );
39
40        self.push_byte(byte)
41    }
42
43    /// Creates a header for `value`.
44    #[inline]
45    pub fn header_for_bool(&self, value: bool) -> BoolHeader {
46        BoolHeader::new(value)
47    }
48}