1use std::rc::Rc;
4use std::cell::RefCell;
5
6pub struct ElementProxy {
8 element: Rc<RefCell<dyn std::any::Any>>,
9}
10
11impl ElementProxy {
12 pub fn new(element: Rc<RefCell<dyn std::any::Any>>) -> Self {
14 ElementProxy { element }
15 }
16
17 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 Rc::ptr_eq(&self.element, &other.element)
27 }
28}
29
30impl Eq for ElementProxy {}
31
32pub struct ParentedElementProxy {
34 element: Rc<RefCell<dyn std::any::Any>>,
35 parent: Rc<RefCell<dyn std::any::Any>>,
36}
37
38impl ParentedElementProxy {
39 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 pub fn parent(&self) -> Rc<RefCell<dyn std::any::Any>> {
49 Rc::clone(&self.parent)
50 }
51
52 pub fn element(&self) -> Rc<RefCell<dyn std::any::Any>> {
54 Rc::clone(&self.element)
55 }
56}
57
58pub struct PartElementProxy {
60 element: Rc<RefCell<dyn std::any::Any>>,
61 part: Rc<RefCell<dyn std::any::Any>>,
62}
63
64impl PartElementProxy {
65 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 pub fn element(&self) -> Rc<RefCell<dyn std::any::Any>> {
75 Rc::clone(&self.element)
76 }
77
78 pub fn part(&self) -> Rc<RefCell<dyn std::any::Any>> {
80 Rc::clone(&self.part)
81 }
82}