blob: 558d6ffa810f373dfa63b46c7fcde143cc1c2a1f [file] [log] [blame]
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<Self>;
/// 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!();
}
}