lilliput_core/decoder/
bool.rs

1use crate::{error::Result, header::BoolHeader, io::Read, marker::Marker, value::BoolValue};
2
3use super::Decoder;
4
5impl<'de, R> Decoder<R>
6where
7    R: Read<'de>,
8{
9    // MARK: - Value
10
11    /// Decodes a boolean value.
12    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
13    pub fn decode_bool(&mut self) -> Result<bool>
14    where
15        R: Read<'de>,
16    {
17        let header: BoolHeader = self.decode_bool_header()?;
18
19        self.decode_bool_of(header)
20    }
21
22    /// Decodes a boolean value, as a `BoolValue`.
23    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
24    pub fn decode_bool_value(&mut self) -> Result<BoolValue> {
25        self.decode_bool().map(From::from)
26    }
27
28    // MARK: - Header
29
30    /// Decodes a boolean value's header.
31    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
32    pub fn decode_bool_header(&mut self) -> Result<BoolHeader> {
33        let byte = self.pull_byte_expecting(Marker::Bool)?;
34
35        let value = (byte & BoolHeader::VALUE_BIT) != 0b0;
36
37        #[cfg(feature = "tracing")]
38        tracing::debug!(byte = crate::binary::fmt_byte(byte), value = value);
39
40        Ok(BoolHeader::new(value))
41    }
42
43    // MARK: - Skip
44
45    /// Skips the boolean value for a given `header`.
46    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
47    pub fn skip_bool_value_of(&mut self, header: BoolHeader) -> Result<()>
48    where
49        R: Read<'de>,
50    {
51        let _ = header;
52        self.reader.skip_one()
53    }
54
55    // MARK: - Body
56
57    /// Decodes boolean value for a given `header`, as a `BoolValue`.
58    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
59    pub fn decode_bool_value_of(&mut self, header: BoolHeader) -> Result<BoolValue> {
60        self.decode_bool_of(header).map(From::from)
61    }
62
63    // MARK: - Private
64
65    /// Decodes boolean value for a given `header`.
66    #[cfg_attr(feature = "tracing", tracing::instrument(skip_all))]
67    fn decode_bool_of(&mut self, header: BoolHeader) -> Result<bool> {
68        Ok(header.value())
69    }
70}