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}