Skip to main content

pdf_ast/types/
reference.rs

1use serde::{Deserialize, Serialize};
2use std::fmt;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub struct PdfReference {
6    pub object_number: u32,
7    pub generation_number: u16,
8}
9
10impl PdfReference {
11    pub fn new(object_number: u32, generation_number: u16) -> Self {
12        PdfReference {
13            object_number,
14            generation_number,
15        }
16    }
17
18    pub fn id(&self) -> ObjectId {
19        ObjectId {
20            number: self.object_number,
21            generation: self.generation_number,
22        }
23    }
24
25    pub fn number(&self) -> u32 {
26        self.object_number
27    }
28
29    pub fn generation(&self) -> u16 {
30        self.generation_number
31    }
32
33    pub fn object_id(&self) -> ObjectId {
34        self.id()
35    }
36}
37
38impl fmt::Display for PdfReference {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        write!(f, "{} {} R", self.object_number, self.generation_number)
41    }
42}
43
44#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
45pub struct ObjectId {
46    pub number: u32,
47    pub generation: u16,
48}
49
50impl ObjectId {
51    pub fn new(number: u32, generation: u16) -> Self {
52        ObjectId { number, generation }
53    }
54
55    pub fn to_reference(&self) -> PdfReference {
56        PdfReference::new(self.number, self.generation)
57    }
58}
59
60impl fmt::Display for ObjectId {
61    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
62        write!(f, "{} {} obj", self.number, self.generation)
63    }
64}
65
66impl From<(u32, u16)> for ObjectId {
67    fn from((number, generation): (u32, u16)) -> Self {
68        ObjectId::new(number, generation)
69    }
70}
71
72impl From<ObjectId> for PdfReference {
73    fn from(id: ObjectId) -> Self {
74        id.to_reference()
75    }
76}
77
78impl From<PdfReference> for ObjectId {
79    fn from(reference: PdfReference) -> Self {
80        reference.id()
81    }
82}
83
84impl From<&PdfReference> for ObjectId {
85    fn from(reference: &PdfReference) -> Self {
86        reference.id()
87    }
88}
89
90impl From<&ObjectId> for PdfReference {
91    fn from(id: &ObjectId) -> Self {
92        id.to_reference()
93    }
94}