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/// Accessor object is constructed in generated code.
13/// Should not be used directly.
14#[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}