1 use std::fmt;
2 
3 use crate::reflect::map::ReflectMapIter;
4 use crate::reflect::map::ReflectMapIterTrait;
5 use crate::reflect::ReflectValueRef;
6 use crate::reflect::RuntimeType;
7 
8 #[derive(Clone)]
9 pub(crate) struct DynamicEmptyMap {
10     key_type: RuntimeType,
11     value_type: RuntimeType,
12 }
13 
14 impl DynamicEmptyMap {
new(key_type: RuntimeType, value_type: RuntimeType) -> DynamicEmptyMap15     pub(crate) fn new(key_type: RuntimeType, value_type: RuntimeType) -> DynamicEmptyMap {
16         Self {
17             key_type,
18             value_type,
19         }
20     }
21 
len(&self) -> usize22     pub(crate) fn len(&self) -> usize {
23         0
24     }
25 
is_empty(&self) -> bool26     pub(crate) fn is_empty(&self) -> bool {
27         true
28     }
29 
get<'a>(&'a self, _key: ReflectValueRef) -> Option<ReflectValueRef<'a>>30     pub(crate) fn get<'a>(&'a self, _key: ReflectValueRef) -> Option<ReflectValueRef<'a>> {
31         None
32     }
33 
key_type(&self) -> RuntimeType34     pub(crate) fn key_type(&self) -> RuntimeType {
35         self.key_type.clone()
36     }
37 
value_type(&self) -> RuntimeType38     pub(crate) fn value_type(&self) -> RuntimeType {
39         self.value_type.clone()
40     }
41 
reflect_iter(&self) -> ReflectMapIter42     pub(crate) fn reflect_iter(&self) -> ReflectMapIter {
43         ReflectMapIter::new(DynamicEmptyMapIter {
44             key_type: self.key_type.clone(),
45             value_type: self.value_type.clone(),
46         })
47     }
48 }
49 
50 impl fmt::Debug for DynamicEmptyMap {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result51     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
52         f.debug_map().finish()
53     }
54 }
55 
56 struct DynamicEmptyMapIter {
57     key_type: RuntimeType,
58     value_type: RuntimeType,
59 }
60 
61 impl<'a> ReflectMapIterTrait<'a> for DynamicEmptyMapIter {
next(&mut self) -> Option<(ReflectValueRef<'a>, ReflectValueRef<'a>)>62     fn next(&mut self) -> Option<(ReflectValueRef<'a>, ReflectValueRef<'a>)> {
63         None
64     }
65 
key_type(&self) -> RuntimeType66     fn key_type(&self) -> RuntimeType {
67         self.key_type.clone()
68     }
69 
value_type(&self) -> RuntimeType70     fn value_type(&self) -> RuntimeType {
71         self.value_type.clone()
72     }
73 }
74