naia_shared/world/component/
replica_ref.rs

1use std::ops::{Deref, DerefMut};
2
3use crate::world::component::replicate::Replicate;
4
5// ReplicaDynRef
6
7pub 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
32// ReplicaDynMut
33
34pub 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
72// ReplicaRefTrait
73
74pub trait ReplicaRefTrait<R: Replicate> {
75    fn to_ref(&self) -> &R;
76}
77
78// ReplicaRefWrapper
79
80pub 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
100// ReplicaMutTrait
101
102pub trait ReplicaMutTrait<R: Replicate>: ReplicaRefTrait<R> {
103    fn to_mut(&mut self) -> &mut R;
104}
105
106// ReplicaMutWrapper
107
108pub 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
134// ReplicaDynRefWrapper
135
136pub 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
160// ReplicaDynMutWrapper
161
162pub 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}