1 //! Generated code support for enum descriptors. 2 3 use std::any::TypeId; 4 5 use crate::descriptor::FileDescriptorProto; 6 use crate::EnumFull; 7 use crate::EnumOrUnknown; 8 9 #[doc(hidden)] 10 pub struct GeneratedEnumDescriptorData { 11 pub(crate) name_in_file: &'static str, 12 type_id: TypeId, 13 enum_or_unknown_type_id: TypeId, 14 } 15 16 impl GeneratedEnumDescriptorData { 17 #[doc(hidden)] new<E>(name_in_file: &'static str) -> GeneratedEnumDescriptorData where E: EnumFull,18 pub fn new<E>(name_in_file: &'static str) -> GeneratedEnumDescriptorData 19 where 20 E: EnumFull, 21 { 22 GeneratedEnumDescriptorData { 23 name_in_file, 24 type_id: TypeId::of::<E>(), 25 enum_or_unknown_type_id: TypeId::of::<EnumOrUnknown<E>>(), 26 } 27 } 28 } 29 30 #[derive(Debug)] 31 pub(crate) struct GeneratedEnumDescriptor { 32 /// Type id of `<E>` 33 pub(crate) type_id: TypeId, 34 /// Type id of `<ProtobufEnumOrUnknown<E>>` 35 pub(crate) _enum_or_unknown_type_id: TypeId, 36 } 37 38 impl GeneratedEnumDescriptor { new( data: GeneratedEnumDescriptorData, file_descriptor_proto: &'static FileDescriptorProto, ) -> GeneratedEnumDescriptor39 pub(crate) fn new( 40 data: GeneratedEnumDescriptorData, 41 file_descriptor_proto: &'static FileDescriptorProto, 42 ) -> GeneratedEnumDescriptor { 43 let GeneratedEnumDescriptorData { 44 name_in_file, 45 type_id, 46 enum_or_unknown_type_id, 47 } = data; 48 49 let _ = (name_in_file, file_descriptor_proto); 50 51 GeneratedEnumDescriptor { 52 type_id, 53 _enum_or_unknown_type_id: enum_or_unknown_type_id, 54 } 55 } 56 } 57