lua_protobuf_rs/descriptor/
enum_descriptor.rs

1use 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_function("for_type", |_, ()| {
35        //     Ok(LuaEnumDescriptor(EnumDescriptor::for_type::<E>()))
36        // });
37
38        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        // methods.add_method("is", |_, this| {
68        //     Ok(this.is::<E>())
69        // });
70    }
71}