naia_shared/world/component/
replica_ref.rs1use std::ops::{Deref, DerefMut};
2
3use crate::world::component::replicate::Replicate;
4
5pub struct ReplicaDynRef<'b> {
8 inner: &'b dyn Replicate,
9}
10
11impl<'b> ReplicaDynRef<'b> {
12 pub fn new(inner: &'b dyn Replicate) -> Self {
13 Self { inner }
14 }
15}
16
17impl Deref for ReplicaDynRef<'_> {
18 type Target = dyn Replicate;
19
20 #[inline]
21 fn deref(&self) -> &dyn Replicate {
22 self.inner
23 }
24}
25
26impl<'a> ReplicaDynRefTrait for ReplicaDynRef<'a> {
27 fn to_dyn_ref(&self) -> &dyn Replicate {
28 self.inner
29 }
30}
31
32pub struct ReplicaDynMut<'b> {
35 inner: &'b mut dyn Replicate,
36}
37
38impl<'b> ReplicaDynMut<'b> {
39 pub fn new(inner: &'b mut dyn Replicate) -> Self {
40 Self { inner }
41 }
42}
43
44impl Deref for ReplicaDynMut<'_> {
45 type Target = dyn Replicate;
46
47 #[inline]
48 fn deref(&self) -> &dyn Replicate {
49 self.inner
50 }
51}
52
53impl DerefMut for ReplicaDynMut<'_> {
54 #[inline]
55 fn deref_mut(&mut self) -> &mut dyn Replicate {
56 self.inner
57 }
58}
59
60impl<'a> ReplicaDynRefTrait for ReplicaDynMut<'a> {
61 fn to_dyn_ref(&self) -> &dyn Replicate {
62 self.inner
63 }
64}
65
66impl<'a> ReplicaDynMutTrait for ReplicaDynMut<'a> {
67 fn to_dyn_mut(&mut self) -> &mut dyn Replicate {
68 self.inner
69 }
70}
71
72pub trait ReplicaRefTrait<R: Replicate> {
75 fn to_ref(&self) -> &R;
76}
77
78pub struct ReplicaRefWrapper<'a, R: Replicate> {
81 inner: Box<dyn ReplicaRefTrait<R> + 'a>,
82}
83
84impl<'a, R: Replicate> ReplicaRefWrapper<'a, R> {
85 pub fn new<I: ReplicaRefTrait<R> + 'a>(inner: I) -> Self {
86 Self {
87 inner: Box::new(inner),
88 }
89 }
90}
91
92impl<'a, R: Replicate> Deref for ReplicaRefWrapper<'a, R> {
93 type Target = R;
94
95 fn deref(&self) -> &R {
96 self.inner.to_ref()
97 }
98}
99
100pub trait ReplicaMutTrait<R: Replicate>: ReplicaRefTrait<R> {
103 fn to_mut(&mut self) -> &mut R;
104}
105
106pub struct ReplicaMutWrapper<'a, R: Replicate> {
109 inner: Box<dyn ReplicaMutTrait<R> + 'a>,
110}
111
112impl<'a, R: Replicate> ReplicaMutWrapper<'a, R> {
113 pub fn new<I: ReplicaMutTrait<R> + 'a>(inner: I) -> Self {
114 Self {
115 inner: Box::new(inner),
116 }
117 }
118}
119
120impl<'a, R: Replicate> Deref for ReplicaMutWrapper<'a, R> {
121 type Target = R;
122
123 fn deref(&self) -> &R {
124 self.inner.to_ref()
125 }
126}
127
128impl<'a, R: Replicate> DerefMut for ReplicaMutWrapper<'a, R> {
129 fn deref_mut(&mut self) -> &mut R {
130 self.inner.to_mut()
131 }
132}
133
134pub trait ReplicaDynRefTrait {
137 fn to_dyn_ref(&self) -> &dyn Replicate;
138}
139
140pub struct ReplicaDynRefWrapper<'a> {
141 inner: Box<dyn ReplicaDynRefTrait + 'a>,
142}
143
144impl<'a> ReplicaDynRefWrapper<'a> {
145 pub fn new<I: ReplicaDynRefTrait + 'a>(inner: I) -> Self {
146 Self {
147 inner: Box::new(inner),
148 }
149 }
150}
151
152impl<'a> Deref for ReplicaDynRefWrapper<'a> {
153 type Target = dyn Replicate;
154
155 fn deref(&self) -> &dyn Replicate {
156 self.inner.to_dyn_ref()
157 }
158}
159
160pub trait ReplicaDynMutTrait: ReplicaDynRefTrait {
163 fn to_dyn_mut(&mut self) -> &mut dyn Replicate;
164}
165
166pub struct ReplicaDynMutWrapper<'a> {
167 inner: Box<dyn ReplicaDynMutTrait + 'a>,
168}
169
170impl<'a> ReplicaDynMutWrapper<'a> {
171 pub fn new<I: ReplicaDynMutTrait + 'a>(inner: I) -> Self {
172 Self {
173 inner: Box::new(inner),
174 }
175 }
176}
177
178impl<'a> Deref for ReplicaDynMutWrapper<'a> {
179 type Target = dyn Replicate;
180
181 fn deref(&self) -> &dyn Replicate {
182 self.inner.to_dyn_ref()
183 }
184}
185
186impl<'a> DerefMut for ReplicaDynMutWrapper<'a> {
187 fn deref_mut(&mut self) -> &mut dyn Replicate {
188 self.inner.to_dyn_mut()
189 }
190}