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