hayro_syntax/object/
bool.rs1use crate::object::Object;
4use crate::object::macros::object;
5use crate::reader::{Readable, Reader, Skippable};
6use crate::xref::XRef;
7
8impl Skippable for bool {
9 fn skip<const PLAIN: bool>(r: &mut Reader<'_>) -> 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<const PLAIN: bool>(r: &mut Reader<'_>, _: &XRef) -> Option<Self> {
20 match r.skip_plain::<bool>()? {
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
34 #[test]
35 fn bool_true() {
36 assert_eq!(
37 Reader::new("true".as_bytes())
38 .read_without_xref::<bool>()
39 .unwrap(),
40 true
41 );
42 }
43
44 #[test]
45 fn bool_false() {
46 assert_eq!(
47 Reader::new("false".as_bytes())
48 .read_without_xref::<bool>()
49 .unwrap(),
50 false
51 );
52 }
53
54 #[test]
55 fn bool_trailing() {
56 assert_eq!(
57 Reader::new("trueabdf".as_bytes())
58 .read_without_xref::<bool>()
59 .unwrap(),
60 true
61 );
62 }
63}