lua_protobuf_rs/descriptor/
enum_descriptor.rs1use crate::descriptor::enum_value_descriptor::LuaEnumValueDescriptor;
2use crate::descriptor::message_descriptor::LuaMessageDescriptor;
3use crate::descriptor_proto::enum_descriptor_proto::LuaEnumDescriptorProto;
4use derive_more::{Deref, From, Into};
5use mlua::prelude::LuaUserData;
6use mlua::{MetaMethod, UserDataMethods};
7use protobuf::reflect::EnumDescriptor;
8
9#[derive(Clone, Eq, PartialEq, Hash, Deref, From, Into)]
10pub struct LuaEnumDescriptor(pub EnumDescriptor);
11
12impl LuaUserData for LuaEnumDescriptor {
13 fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
14 methods.add_meta_method(MetaMethod::ToString, |_, this, ()| {
15 Ok(this.to_string())
16 });
17
18 methods.add_method("proto", |_, this, ()| {
19 Ok::<LuaEnumDescriptorProto, _>(this.proto().clone().into())
20 });
21
22 methods.add_method("name", |_, this, ()| {
23 Ok(this.name().to_string())
24 });
25
26 methods.add_method("full_name", |_, this, ()| {
27 Ok(this.full_name().to_string())
28 });
29
30 methods.add_method("name_to_package", |_, this, ()| {
31 Ok(this.name_to_package().to_string())
32 });
33
34 methods.add_method("enclosing_message", |_, this, ()| {
39 Ok(this.enclosing_message().map(LuaMessageDescriptor))
40 });
41
42 methods.add_method("values", |_, this, ()| {
43 let values: Vec<_> = this.values().map(LuaEnumValueDescriptor).collect();
44 Ok(values)
45 });
46
47 methods.add_method("value_by_name", |_, this, name: String| {
48 Ok(this.value_by_name(&name).map(LuaEnumValueDescriptor))
49 });
50
51 methods.add_method("value_by_number", |_, this, number: i32| {
52 Ok(this.value_by_number(number).map(LuaEnumValueDescriptor))
53 });
54
55 methods.add_method("value_by_index", |_, this, index: usize| {
56 Ok(LuaEnumValueDescriptor(this.value_by_index(index)))
57 });
58
59 methods.add_method("default_value", |_, this, ()| {
60 Ok(LuaEnumValueDescriptor(this.default_value()))
61 });
62
63 methods.add_method("value_by_number_or_default", |_, this, number: i32| {
64 Ok(LuaEnumValueDescriptor(this.value_by_number_or_default(number)))
65 });
66
67 }
71}