hayro_syntax/object/
bool.rs

1//! Booleans.
2
3use crate::object::Object;
4use crate::object::macros::object;
5use crate::reader::{Readable, Reader, ReaderContext, Skippable};
6
7impl Skippable for bool {
8    fn skip(r: &mut Reader<'_>, _: bool) -> Option<()> {
9        match r.peek_byte()? {
10            b't' => r.forward_tag(b"true"),
11            b'f' => r.forward_tag(b"false"),
12            _ => None,
13        }
14    }
15}
16
17impl Readable<'_> for bool {
18    fn read(r: &mut Reader<'_>, _: &ReaderContext) -> Option<Self> {
19        match r.skip_in_content_stream::<bool>()? {
20            b"true" => Some(true),
21            b"false" => Some(false),
22            _ => None,
23        }
24    }
25}
26
27object!(bool, Boolean);
28
29#[cfg(test)]
30mod tests {
31    use crate::reader::Reader;
32
33    #[test]
34    fn bool_true() {
35        assert!(
36            Reader::new("true".as_bytes())
37                .read_without_context::<bool>()
38                .unwrap()
39        );
40    }
41
42    #[test]
43    fn bool_false() {
44        assert!(
45            !Reader::new("false".as_bytes())
46                .read_without_context::<bool>()
47                .unwrap()
48        );
49    }
50
51    #[test]
52    fn bool_trailing() {
53        assert!(
54            Reader::new("trueabdf".as_bytes())
55                .read_without_context::<bool>()
56                .unwrap()
57        );
58    }
59}