protobuf/reflect/map/
empty.rs

1use std::fmt;
2
3use crate::reflect::map::ReflectMapIter;
4use crate::reflect::map::ReflectMapIterTrait;
5use crate::reflect::ReflectValueRef;
6use crate::reflect::RuntimeType;
7
8#[derive(Clone)]
9pub(crate) struct DynamicEmptyMap {
10    key_type: RuntimeType,
11    value_type: RuntimeType,
12}
13
14impl DynamicEmptyMap {
15    pub(crate) fn new(key_type: RuntimeType, value_type: RuntimeType) -> DynamicEmptyMap {
16        Self {
17            key_type,
18            value_type,
19        }
20    }
21
22    pub(crate) fn len(&self) -> usize {
23        0
24    }
25
26    pub(crate) fn is_empty(&self) -> bool {
27        true
28    }
29
30    pub(crate) fn get<'a>(&'a self, _key: ReflectValueRef) -> Option<ReflectValueRef<'a>> {
31        None
32    }
33
34    pub(crate) fn key_type(&self) -> RuntimeType {
35        self.key_type.clone()
36    }
37
38    pub(crate) fn value_type(&self) -> RuntimeType {
39        self.value_type.clone()
40    }
41
42    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
50impl fmt::Debug for DynamicEmptyMap {
51    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
52        f.debug_map().finish()
53    }
54}
55
56struct DynamicEmptyMapIter {
57    _key_type: RuntimeType,
58    _value_type: RuntimeType,
59}
60
61impl<'a> ReflectMapIterTrait<'a> for DynamicEmptyMapIter {
62    fn next(&mut self) -> Option<(ReflectValueRef<'a>, ReflectValueRef<'a>)> {
63        None
64    }
65
66    fn _key_type(&self) -> RuntimeType {
67        self._key_type.clone()
68    }
69
70    fn _value_type(&self) -> RuntimeType {
71        self._value_type.clone()
72    }
73}