Skip to main content

ppt_rs/
shared.rs

1//! Objects shared by pptx modules
2
3use std::rc::Rc;
4use std::cell::RefCell;
5
6/// Base class for XML element proxy classes
7pub struct ElementProxy {
8    element: Rc<RefCell<dyn std::any::Any>>,
9}
10
11impl ElementProxy {
12    /// Create a new ElementProxy wrapping an XML element
13    pub fn new(element: Rc<RefCell<dyn std::any::Any>>) -> Self {
14        ElementProxy { element }
15    }
16
17    /// Get the wrapped XML element
18    pub fn element(&self) -> Rc<RefCell<dyn std::any::Any>> {
19        Rc::clone(&self.element)
20    }
21}
22
23impl PartialEq for ElementProxy {
24    fn eq(&self, other: &Self) -> bool {
25        // Compare by reference equality
26        Rc::ptr_eq(&self.element, &other.element)
27    }
28}
29
30impl Eq for ElementProxy {}
31
32/// Provides access to ancestor objects and part
33pub struct ParentedElementProxy {
34    element: Rc<RefCell<dyn std::any::Any>>,
35    parent: Rc<RefCell<dyn std::any::Any>>,
36}
37
38impl ParentedElementProxy {
39    /// Create a new ParentedElementProxy
40    pub fn new(
41        element: Rc<RefCell<dyn std::any::Any>>,
42        parent: Rc<RefCell<dyn std::any::Any>>,
43    ) -> Self {
44        ParentedElementProxy { element, parent }
45    }
46
47    /// Get the parent proxy object
48    pub fn parent(&self) -> Rc<RefCell<dyn std::any::Any>> {
49        Rc::clone(&self.parent)
50    }
51
52    /// Get the XML element
53    pub fn element(&self) -> Rc<RefCell<dyn std::any::Any>> {
54        Rc::clone(&self.element)
55    }
56}
57
58/// Provides common members for proxy-objects that wrap a part's root element
59pub struct PartElementProxy {
60    element: Rc<RefCell<dyn std::any::Any>>,
61    part: Rc<RefCell<dyn std::any::Any>>,
62}
63
64impl PartElementProxy {
65    /// Create a new PartElementProxy
66    pub fn new(
67        element: Rc<RefCell<dyn std::any::Any>>,
68        part: Rc<RefCell<dyn std::any::Any>>,
69    ) -> Self {
70        PartElementProxy { element, part }
71    }
72
73    /// Get the XML element
74    pub fn element(&self) -> Rc<RefCell<dyn std::any::Any>> {
75        Rc::clone(&self.element)
76    }
77
78    /// Get the part
79    pub fn part(&self) -> Rc<RefCell<dyn std::any::Any>> {
80        Rc::clone(&self.part)
81    }
82}