Skip to main content

pdf_ast/types/
mod.rs

1pub mod object;
2pub mod primitive;
3pub mod reference;
4pub mod stream;
5
6pub use object::*;
7pub use primitive::*;
8pub use reference::*;
9pub use stream::*;
10
11use std::fmt;
12
13#[derive(Debug, Clone, PartialEq)]
14pub enum PdfValue {
15    Null,
16    Boolean(bool),
17    Integer(i64),
18    Real(f64),
19    String(PdfString),
20    Name(PdfName),
21    Array(PdfArray),
22    Dictionary(PdfDictionary),
23    Stream(PdfStream),
24    Reference(PdfReference),
25}
26
27impl PdfValue {
28    pub fn as_bool(&self) -> Option<bool> {
29        match self {
30            PdfValue::Boolean(b) => Some(*b),
31            _ => None,
32        }
33    }
34
35    pub fn as_boolean(&self) -> Option<bool> {
36        self.as_bool()
37    }
38
39    pub fn as_integer(&self) -> Option<i64> {
40        match self {
41            PdfValue::Integer(i) => Some(*i),
42            _ => None,
43        }
44    }
45
46    pub fn as_real(&self) -> Option<f64> {
47        match self {
48            PdfValue::Real(r) => Some(*r),
49            PdfValue::Integer(i) => Some(*i as f64),
50            _ => None,
51        }
52    }
53
54    pub fn as_string(&self) -> Option<&PdfString> {
55        match self {
56            PdfValue::String(s) => Some(s),
57            _ => None,
58        }
59    }
60
61    pub fn as_name(&self) -> Option<&PdfName> {
62        match self {
63            PdfValue::Name(n) => Some(n),
64            _ => None,
65        }
66    }
67
68    pub fn as_array(&self) -> Option<&PdfArray> {
69        match self {
70            PdfValue::Array(a) => Some(a),
71            _ => None,
72        }
73    }
74
75    pub fn as_array_mut(&mut self) -> Option<&mut PdfArray> {
76        match self {
77            PdfValue::Array(a) => Some(a),
78            _ => None,
79        }
80    }
81
82    pub fn as_dict(&self) -> Option<&PdfDictionary> {
83        match self {
84            PdfValue::Dictionary(d) => Some(d),
85            _ => None,
86        }
87    }
88
89    pub fn as_dict_mut(&mut self) -> Option<&mut PdfDictionary> {
90        match self {
91            PdfValue::Dictionary(d) => Some(d),
92            _ => None,
93        }
94    }
95
96    pub fn as_stream(&self) -> Option<&PdfStream> {
97        match self {
98            PdfValue::Stream(s) => Some(s),
99            _ => None,
100        }
101    }
102
103    pub fn as_reference(&self) -> Option<&PdfReference> {
104        match self {
105            PdfValue::Reference(r) => Some(r),
106            _ => None,
107        }
108    }
109
110    pub fn type_name(&self) -> &'static str {
111        match self {
112            PdfValue::Null => "null",
113            PdfValue::Boolean(_) => "boolean",
114            PdfValue::Integer(_) => "integer",
115            PdfValue::Real(_) => "real",
116            PdfValue::String(_) => "string",
117            PdfValue::Name(_) => "name",
118            PdfValue::Array(_) => "array",
119            PdfValue::Dictionary(_) => "dictionary",
120            PdfValue::Stream(_) => "stream",
121            PdfValue::Reference(_) => "reference",
122        }
123    }
124}
125
126impl fmt::Display for PdfValue {
127    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
128        match self {
129            PdfValue::Null => write!(f, "null"),
130            PdfValue::Boolean(b) => write!(f, "{}", b),
131            PdfValue::Integer(i) => write!(f, "{}", i),
132            PdfValue::Real(r) => write!(f, "{}", r),
133            PdfValue::String(s) => write!(f, "{}", s),
134            PdfValue::Name(n) => write!(f, "{}", n),
135            PdfValue::Array(a) => write!(f, "{}", a),
136            PdfValue::Dictionary(d) => write!(f, "{}", d),
137            PdfValue::Stream(s) => write!(f, "{}", s),
138            PdfValue::Reference(r) => write!(f, "{}", r),
139        }
140    }
141}