| use crate::message_dyn::MessageDyn; |
| use crate::reflect::acc::v2::AccessorV2; |
| use crate::reflect::ReflectFieldRef; |
| |
| pub(crate) mod v2; |
| |
| #[derive(Debug)] |
| pub(crate) enum GeneratedFieldAccessor { |
| V2(AccessorV2), |
| } |
| |
| /// Accessor object is constructed in generated code. |
| /// Should not be used directly. |
| #[derive(Debug)] |
| pub struct FieldAccessor { |
| pub(crate) _name: &'static str, |
| pub(crate) accessor: GeneratedFieldAccessor, |
| } |
| |
| impl GeneratedFieldAccessor { |
| pub(crate) fn get_reflect<'a>(&self, m: &'a dyn MessageDyn) -> ReflectFieldRef<'a> { |
| match self { |
| GeneratedFieldAccessor::V2(AccessorV2::Singular(ref a)) => { |
| ReflectFieldRef::Optional(a.accessor.get_field(m)) |
| } |
| GeneratedFieldAccessor::V2(AccessorV2::Repeated(ref a)) => { |
| ReflectFieldRef::Repeated(a.accessor.get_repeated(m)) |
| } |
| GeneratedFieldAccessor::V2(AccessorV2::Map(ref a)) => { |
| ReflectFieldRef::Map(a.accessor.get_reflect(m)) |
| } |
| } |
| } |
| } |
| |
| impl FieldAccessor { |
| pub(crate) fn new(name: &'static str, accessor: AccessorV2) -> FieldAccessor { |
| FieldAccessor { |
| _name: name, |
| accessor: GeneratedFieldAccessor::V2(accessor), |
| } |
| } |
| } |