protobuf/reflect/acc/
mod.rs
1use crate::message_dyn::MessageDyn;
2use crate::reflect::acc::v2::AccessorV2;
3use crate::reflect::ReflectFieldRef;
4
5pub(crate) mod v2;
6
7#[derive(Debug)]
8pub(crate) enum GeneratedFieldAccessor {
9 V2(AccessorV2),
10}
11
12#[derive(Debug)]
15pub struct FieldAccessor {
16 pub(crate) _name: &'static str,
17 pub(crate) accessor: GeneratedFieldAccessor,
18}
19
20impl GeneratedFieldAccessor {
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
36impl FieldAccessor {
37 pub(crate) fn new(name: &'static str, accessor: AccessorV2) -> FieldAccessor {
38 FieldAccessor {
39 _name: name,
40 accessor: GeneratedFieldAccessor::V2(accessor),
41 }
42 }
43}