lilliput_core/decoder/
bool.rs1use 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 #[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 #[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 #[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 #[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 #[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 #[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}