pdf_lib_rs/core/objects/
pdf_bool.rs1use std::fmt;
2use super::pdf_object::PdfObjectTrait;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct PdfBool {
7 value: bool,
8}
9
10impl PdfBool {
11 pub const TRUE: PdfBool = PdfBool { value: true };
12 pub const FALSE: PdfBool = PdfBool { value: false };
13
14 pub fn as_boolean(&self) -> bool {
15 self.value
16 }
17}
18
19impl fmt::Display for PdfBool {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 write!(f, "{}", self.value)
22 }
23}
24
25impl PdfObjectTrait for PdfBool {
26 fn size_in_bytes(&self) -> usize {
27 if self.value { 4 } else { 5 }
28 }
29
30 fn copy_bytes_into(&self, buffer: &mut [u8], offset: usize) -> usize {
31 if self.value {
32 buffer[offset] = b't';
33 buffer[offset + 1] = b'r';
34 buffer[offset + 2] = b'u';
35 buffer[offset + 3] = b'e';
36 4
37 } else {
38 buffer[offset] = b'f';
39 buffer[offset + 1] = b'a';
40 buffer[offset + 2] = b'l';
41 buffer[offset + 3] = b's';
42 buffer[offset + 4] = b'e';
43 5
44 }
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51 use crate::utils::typed_array_for;
52
53 #[test]
54 fn can_be_converted_to_boolean() {
55 assert!(PdfBool::TRUE.as_boolean());
56 assert!(!PdfBool::FALSE.as_boolean());
57 }
58
59 #[test]
60 fn can_be_cloned() {
61 assert_eq!(PdfBool::TRUE.clone(), PdfBool::TRUE);
62 assert_eq!(PdfBool::FALSE.clone(), PdfBool::FALSE);
63 }
64
65 #[test]
66 fn can_be_converted_to_string() {
67 assert_eq!(PdfBool::TRUE.to_string(), "true");
68 assert_eq!(PdfBool::FALSE.to_string(), "false");
69 }
70
71 #[test]
72 fn can_provide_size_in_bytes() {
73 assert_eq!(PdfBool::TRUE.size_in_bytes(), 4);
74 assert_eq!(PdfBool::FALSE.size_in_bytes(), 5);
75 }
76
77 #[test]
78 fn can_be_serialized_when_true() {
79 let mut buffer = vec![b' '; 8];
80 assert_eq!(PdfBool::TRUE.copy_bytes_into(&mut buffer, 3), 4);
81 assert_eq!(buffer, typed_array_for(" true "));
82 }
83
84 #[test]
85 fn can_be_serialized_when_false() {
86 let mut buffer = vec![b' '; 9];
87 assert_eq!(PdfBool::FALSE.copy_bytes_into(&mut buffer, 1), 5);
88 assert_eq!(buffer, typed_array_for(" false "));
89 }
90}