use crate::reflect::EnumDescriptor; use crate::reflect::EnumValueDescriptor; /// Trait implemented by all protobuf enum types. pub trait ProtobufEnum: Eq + Sized + Copy + 'static { /// Get enum `i32` value. fn value(&self) -> i32; /// Try to create an enum from `i32` value. /// Return `None` if value is unknown. fn from_i32(v: i32) -> Option; /// Get all enum values for enum type. fn values() -> &'static [Self] { panic!(); } /// Get enum value descriptor. fn descriptor(&self) -> &'static EnumValueDescriptor { self.enum_descriptor().value_by_number(self.value()) } /// Get enum descriptor. fn enum_descriptor(&self) -> &'static EnumDescriptor { Self::enum_descriptor_static() } /// Get enum descriptor by type. fn enum_descriptor_static() -> &'static EnumDescriptor { panic!(); } }