33 lines
899 B
Rust
33 lines
899 B
Rust
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!();
|
|
}
|
|
}
|