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