aboutsummaryrefslogtreecommitdiff
path: root/src/reflect/enums.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/reflect/enums.rs')
-rw-r--r--src/reflect/enums.rs128
1 files changed, 0 insertions, 128 deletions
diff --git a/src/reflect/enums.rs b/src/reflect/enums.rs
deleted file mode 100644
index a25be6f..0000000
--- a/src/reflect/enums.rs
+++ /dev/null
@@ -1,128 +0,0 @@
-use std::collections::HashMap;
-
-use crate::descriptor::EnumDescriptorProto;
-use crate::descriptor::EnumValueDescriptorProto;
-use crate::descriptor::FileDescriptorProto;
-use crate::descriptorx::find_enum_by_rust_name;
-use crate::reflect::find_message_or_enum::find_message_or_enum;
-use crate::reflect::find_message_or_enum::MessageOrEnum;
-use crate::ProtobufEnum;
-
-/// Description for enum variant.
-///
-/// Used in reflection.
-#[derive(Clone, Debug)]
-pub struct EnumValueDescriptor {
- proto: &'static EnumValueDescriptorProto,
-}
-
-impl Copy for EnumValueDescriptor {}
-
-impl EnumValueDescriptor {
- /// Name of enum variant as specified in proto file
- pub fn name(&self) -> &'static str {
- self.proto.get_name()
- }
-
- /// `i32` value of the enum variant
- pub fn value(&self) -> i32 {
- self.proto.get_number()
- }
-}
-
-/// Dynamic representation of enum type.
-///
-/// Can be used in reflective operations.
-pub struct EnumDescriptor {
- proto: &'static EnumDescriptorProto,
- values: Vec<EnumValueDescriptor>,
-
- index_by_name: HashMap<String, usize>,
- index_by_number: HashMap<i32, usize>,
-}
-
-impl EnumDescriptor {
- /// Enum name as given in `.proto` file
- pub fn name(&self) -> &'static str {
- self.proto.get_name()
- }
-
- /// `EnumDescriptor` for enum type
- pub fn for_type<E: ProtobufEnum>() -> &'static EnumDescriptor {
- E::enum_descriptor_static()
- }
-
- /// Create new enum descriptor.
- ///
- /// This function is called by generated code, and should not be called manually.
- #[deprecated(
- since = "2.12",
- note = "Please regenerate .rs files from .proto files to use newer APIs"
- )]
- pub fn new(rust_name: &'static str, file: &'static FileDescriptorProto) -> EnumDescriptor {
- let proto = find_enum_by_rust_name(file, rust_name);
- let mut index_by_name = HashMap::new();
- let mut index_by_number = HashMap::new();
- for (i, v) in proto.en.get_value().iter().enumerate() {
- index_by_number.insert(v.get_number(), i);
- index_by_name.insert(v.get_name().to_string(), i);
- }
- EnumDescriptor {
- proto: proto.en,
- values: proto
- .en
- .get_value()
- .iter()
- .map(|v| EnumValueDescriptor { proto: v })
- .collect(),
- index_by_name: index_by_name,
- index_by_number: index_by_number,
- }
- }
-
- /// Create new enum descriptor.
- ///
- /// This function is called by generated code, and should not be called manually.
- pub fn new_pb_name<E>(
- name_in_file: &'static str,
- file: &'static FileDescriptorProto,
- ) -> EnumDescriptor
- where
- E: ProtobufEnum,
- {
- let (_path_to_package, proto) = match find_message_or_enum(file, name_in_file) {
- (path_to_package, MessageOrEnum::Enum(e)) => (path_to_package, e),
- (_, MessageOrEnum::Message(_)) => panic!("not an enum"),
- };
-
- let mut index_by_name = HashMap::new();
- let mut index_by_number = HashMap::new();
- for (i, v) in proto.get_value().iter().enumerate() {
- index_by_number.insert(v.get_number(), i);
- index_by_name.insert(v.get_name().to_string(), i);
- }
- EnumDescriptor {
- proto,
- values: proto
- .get_value()
- .iter()
- .map(|v| EnumValueDescriptor { proto: v })
- .collect(),
- index_by_name: index_by_name,
- index_by_number: index_by_number,
- }
- }
-
- /// Find enum value by name
- pub fn value_by_name<'a>(&'a self, name: &str) -> &'a EnumValueDescriptor {
- // TODO: clone is weird
- let &index = self.index_by_name.get(&name.to_string()).unwrap();
- &self.values[index]
- }
-
- /// Find enum value by number
- pub fn value_by_number<'a>(&'a self, number: i32) -> &'a EnumValueDescriptor {
- let &index = self.index_by_number.get(&number).unwrap();
- &self.values[index]
- }
-}