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}