aboutsummaryrefslogtreecommitdiff
path: root/src/reflect/acc/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/reflect/acc/mod.rs')
-rw-r--r--src/reflect/acc/mod.rs46
1 files changed, 29 insertions, 17 deletions
diff --git a/src/reflect/acc/mod.rs b/src/reflect/acc/mod.rs
index 288c183..408c41c 100644
--- a/src/reflect/acc/mod.rs
+++ b/src/reflect/acc/mod.rs
@@ -1,31 +1,43 @@
-#![doc(hidden)]
+use crate::message_dyn::MessageDyn;
+use crate::reflect::acc::v2::AccessorV2;
+use crate::reflect::ReflectFieldRef;
-use crate::reflect::acc::v1::FieldAccessorFunctions;
-use crate::reflect::acc::v1::FieldAccessorImpl;
-use crate::reflect::acc::v1::FieldAccessorTrait;
-use crate::Message;
+pub(crate) mod v2;
-pub(crate) mod v1;
-
-pub(crate) enum Accessor {
- V1(Box<dyn FieldAccessorTrait + 'static>),
+#[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: Accessor,
+ 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_v1<M: Message>(
- name: &'static str,
- fns: FieldAccessorFunctions<M>,
- ) -> FieldAccessor {
+ pub(crate) fn new(name: &'static str, accessor: AccessorV2) -> FieldAccessor {
FieldAccessor {
- name,
- accessor: Accessor::V1(Box::new(FieldAccessorImpl { fns })),
+ _name: name,
+ accessor: GeneratedFieldAccessor::V2(accessor),
}
}
}