haste_reflect/
primitives.rs1use crate::traits::MetaValue;
2use std::any::Any;
3
4impl MetaValue for i64 {
15 fn fields(&self) -> Vec<&'static str> {
16 vec![]
17 }
18
19 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
20 None
21 }
22
23 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
24 None
25 }
26
27 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
28 None
29 }
30
31 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
32 None
33 }
34
35 fn typename(&self) -> &'static str {
36 "http://hl7.org/fhirpath/System.Integer"
37 }
38
39 fn as_any(&self) -> &dyn Any {
40 self
41 }
42
43 fn flatten(&self) -> Vec<&dyn MetaValue> {
44 vec![self]
45 }
46}
47
48impl MetaValue for u64 {
49 fn fields(&self) -> Vec<&'static str> {
50 vec![]
51 }
52
53 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
54 None
55 }
56
57 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
58 None
59 }
60
61 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
62 None
63 }
64
65 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
66 None
67 }
68
69 fn typename(&self) -> &'static str {
70 "http://hl7.org/fhirpath/System.Integer"
71 }
72
73 fn as_any(&self) -> &dyn Any {
74 self
75 }
76
77 fn flatten(&self) -> Vec<&dyn MetaValue> {
78 vec![self]
79 }
80}
81
82impl MetaValue for f64 {
83 fn fields(&self) -> Vec<&'static str> {
84 vec![]
85 }
86
87 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
88 None
89 }
90
91 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
92 None
93 }
94
95 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
96 None
97 }
98
99 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
100 None
101 }
102
103 fn typename(&self) -> &'static str {
104 "http://hl7.org/fhirpath/System.Decimal"
105 }
106
107 fn as_any(&self) -> &dyn Any {
108 self
109 }
110
111 fn flatten(&self) -> Vec<&dyn MetaValue> {
112 vec![self]
113 }
114}
115
116impl MetaValue for bool {
117 fn fields(&self) -> Vec<&'static str> {
118 vec![]
119 }
120
121 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
122 None
123 }
124
125 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
126 None
127 }
128
129 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
130 None
131 }
132
133 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
134 None
135 }
136
137 fn typename(&self) -> &'static str {
138 "http://hl7.org/fhirpath/System.Boolean"
139 }
140
141 fn as_any(&self) -> &dyn Any {
142 self
143 }
144
145 fn flatten(&self) -> Vec<&dyn MetaValue> {
146 vec![self]
147 }
148}
149
150impl MetaValue for String {
151 fn fields(&self) -> Vec<&'static str> {
152 vec![]
153 }
154
155 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
156 None
157 }
158
159 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
160 None
161 }
162
163 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
164 None
165 }
166
167 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
168 None
169 }
170
171 fn typename(&self) -> &'static str {
172 "http://hl7.org/fhirpath/System.String"
173 }
174
175 fn as_any(&self) -> &dyn Any {
176 self
177 }
178
179 fn flatten(&self) -> Vec<&dyn MetaValue> {
180 vec![self]
181 }
182}
183
184impl MetaValue for &'static str {
185 fn fields(&self) -> Vec<&'static str> {
186 vec![]
187 }
188
189 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
190 None
191 }
192
193 fn get_index<'a>(&'a self, _index: usize) -> Option<&'a dyn MetaValue> {
194 None
195 }
196
197 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
198 None
199 }
200
201 fn get_index_mut<'a>(&'a mut self, _index: usize) -> Option<&'a mut dyn MetaValue> {
202 None
203 }
204
205 fn typename(&self) -> &'static str {
206 "http://hl7.org/fhirpath/System.String"
207 }
208
209 fn as_any(&self) -> &dyn Any {
210 self
211 }
212
213 fn flatten(&self) -> Vec<&dyn MetaValue> {
214 vec![self]
215 }
216}
217
218impl<T> MetaValue for Vec<T>
219where
220 T: MetaValue,
221{
222 fn fields(&self) -> Vec<&'static str> {
223 if let Some(first) = self.first() {
224 first.fields()
225 } else {
226 vec![]
227 }
228 }
229
230 fn get_field<'a>(&'a self, _field: &str) -> Option<&'a dyn MetaValue> {
231 None
232 }
233
234 fn get_index<'a>(&'a self, index: usize) -> Option<&'a dyn MetaValue> {
235 if self.get(index).is_some() {
236 let k: &dyn MetaValue = &self[index];
237 Some(k)
238 } else {
239 None
240 }
241 }
242
243 fn get_field_mut<'a>(&'a mut self, _field: &str) -> Option<&'a mut dyn MetaValue> {
244 None
245 }
246
247 fn get_index_mut<'a>(&'a mut self, index: usize) -> Option<&'a mut dyn MetaValue> {
248 if self.get(index).is_some() {
249 let k: &mut dyn MetaValue = &mut self[index];
250 Some(k)
251 } else {
252 None
253 }
254 }
255
256 fn typename(&self) -> &'static str {
257 if let Some(first) = self.first() {
258 first.typename()
259 } else {
260 ""
261 }
262 }
263
264 fn as_any(&self) -> &dyn Any {
265 self
266 }
267
268 fn flatten(&self) -> Vec<&dyn MetaValue> {
269 self.iter().flat_map(|item| item.flatten()).collect()
270 }
271}
272
273impl<T> MetaValue for Option<T>
275where
276 T: MetaValue,
277{
278 fn fields(&self) -> Vec<&'static str> {
279 match self {
280 Some(value) => value.fields(),
281 None => vec![],
282 }
283 }
284
285 fn get_field<'a>(&'a self, field: &str) -> Option<&'a dyn MetaValue> {
286 self.as_ref().and_then(|value| value.get_field(field))
287 }
288
289 fn typename(&self) -> &'static str {
290 match self {
291 Some(value) => value.typename(),
292 None => "",
293 }
294 }
295
296 fn as_any(&self) -> &dyn Any {
297 match self {
298 Some(value) => value.as_any(),
299 None => self,
300 }
301 }
302
303 fn flatten(&self) -> Vec<&dyn MetaValue> {
304 self.as_ref().map(|v| v.flatten()).unwrap_or_else(|| vec![])
305 }
306
307 fn get_index<'a>(&'a self, index: usize) -> Option<&'a dyn MetaValue> {
308 self.as_ref().and_then(|v| v.get_index(index))
309 }
310
311 fn get_field_mut<'a>(&'a mut self, field: &str) -> Option<&'a mut dyn MetaValue> {
312 self.as_mut().and_then(|value| value.get_field_mut(field))
313 }
314
315 fn get_index_mut<'a>(&'a mut self, index: usize) -> Option<&'a mut dyn MetaValue> {
316 self.as_mut().and_then(|v| v.get_index_mut(index))
317 }
318}
319
320impl<T> MetaValue for Box<T>
321where
322 T: MetaValue,
323{
324 fn fields(&self) -> Vec<&'static str> {
325 self.as_ref().fields()
326 }
327
328 fn get_field<'a>(&'a self, field: &str) -> Option<&'a dyn MetaValue> {
329 self.as_ref().get_field(field)
330 }
331
332 fn typename(&self) -> &'static str {
333 self.as_ref().typename()
334 }
335
336 fn as_any(&self) -> &dyn Any {
337 self
338 }
339
340 fn flatten(&self) -> Vec<&dyn MetaValue> {
341 self.as_ref().flatten()
342 }
343
344 fn get_index<'a>(&'a self, index: usize) -> Option<&'a dyn MetaValue> {
345 self.as_ref().get_index(index)
346 }
347
348 fn get_field_mut<'a>(&'a mut self, field: &str) -> Option<&'a mut dyn MetaValue> {
349 self.as_mut().get_field_mut(field)
350 }
351
352 fn get_index_mut<'a>(&'a mut self, index: usize) -> Option<&'a mut dyn MetaValue> {
353 self.as_mut().get_index_mut(index)
354 }
355}