1 use crate::message_dyn::MessageDyn;
2 use crate::reflect::acc::v2::AccessorV2;
3 use crate::reflect::ReflectFieldRef;
4 
5 pub(crate) mod v2;
6 
7 #[derive(Debug)]
8 pub(crate) enum GeneratedFieldAccessor {
9     V2(AccessorV2),
10 }
11 
12 /// Accessor object is constructed in generated code.
13 /// Should not be used directly.
14 #[derive(Debug)]
15 pub struct FieldAccessor {
16     pub(crate) _name: &'static str,
17     pub(crate) accessor: GeneratedFieldAccessor,
18 }
19 
20 impl GeneratedFieldAccessor {
get_reflect<'a>(&self, m: &'a dyn MessageDyn) -> ReflectFieldRef<'a>21     pub(crate) fn get_reflect<'a>(&self, m: &'a dyn MessageDyn) -> ReflectFieldRef<'a> {
22         match self {
23             GeneratedFieldAccessor::V2(AccessorV2::Singular(ref a)) => {
24                 ReflectFieldRef::Optional(a.accessor.get_field(m))
25             }
26             GeneratedFieldAccessor::V2(AccessorV2::Repeated(ref a)) => {
27                 ReflectFieldRef::Repeated(a.accessor.get_repeated(m))
28             }
29             GeneratedFieldAccessor::V2(AccessorV2::Map(ref a)) => {
30                 ReflectFieldRef::Map(a.accessor.get_reflect(m))
31             }
32         }
33     }
34 }
35 
36 impl FieldAccessor {
new(name: &'static str, accessor: AccessorV2) -> FieldAccessor37     pub(crate) fn new(name: &'static str, accessor: AccessorV2) -> FieldAccessor {
38         FieldAccessor {
39             _name: name,
40             accessor: GeneratedFieldAccessor::V2(accessor),
41         }
42     }
43 }
44