hayro_syntax/object/
bool.rs

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