lua_protobuf_rs/descriptor_proto/
enum_descriptor_proto.rs1use crate::descriptor_proto::enum_options::LuaEnumOptions;
2use crate::descriptor_proto::enum_reserved_range::LuaEnumReservedRange;
3use crate::descriptor_proto::enum_value_descriptor_proto::LuaEnumValueDescriptorProto;
4use crate::{add_message_dyn_trait_method, add_message_full_trait_method, add_message_trait_method};
5use derive_more::{Deref, DerefMut, From, Into};
6use mlua::prelude::LuaUserData;
7use mlua::{MetaMethod, UserDataFields, UserDataMethods};
8use protobuf::descriptor::EnumDescriptorProto;
9
10#[derive(PartialEq, Clone, Default, Debug, From, Deref, DerefMut)]
11pub struct LuaEnumDescriptorProto(pub EnumDescriptorProto);
12
13impl LuaUserData for LuaEnumDescriptorProto {
14 fn add_fields<F: UserDataFields<Self>>(fields: &mut F) {
15 fields.add_field_method_get("name", |_, this| {
16 Ok(this.name.clone())
17 });
18
19 fields.add_field_method_get("value", |_, this| {
20 let value: Vec<LuaEnumValueDescriptorProto> = this.value.clone().into_iter().map(Into::into).collect();
21 Ok(value)
22 });
23
24 fields.add_field_method_get("options", |_, this| {
25 let options: Option<LuaEnumOptions> = this.options.clone().into_option().map(Into::into);
26 Ok(options)
27 });
28
29 fields.add_field_method_get("reserved_range", |_, this| {
30 let reserved_range = this.reserved_range.iter().map(Clone::clone).map(Into::into).collect::<Vec<LuaEnumReservedRange>>();
31 Ok(reserved_range)
32 });
33
34 fields.add_field_method_get("reserved_name", |_, this| {
35 Ok(this.reserved_name.clone())
36 });
37 }
38
39 fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
40 methods.add_meta_method(MetaMethod::ToString, |_, this, ()| {
41 Ok(this.to_string())
42 });
43
44 methods.add_method("name", |_, this, ()| {
45 Ok(this.name().to_string())
46 });
47
48 methods.add_method_mut("clear_name", |_, this, ()| {
49 this.clear_name();
50 Ok(())
51 });
52
53 methods.add_method("has_name", |_, this, ()| {
54 Ok(this.has_name())
55 });
56
57 methods.add_method_mut("set_name", |_, this, value: String| {
58 this.set_name(value);
59 Ok(())
60 });
61
62 methods.add_method_mut("mut_name", |_, this, ()| {
63 Ok(this.mut_name().clone())
64 });
65
66 methods.add_method_mut("take_name", |_, this, ()| {
67 Ok(this.take_name())
68 });
69
70 add_message_trait_method!(methods, EnumDescriptorProto, LuaEnumDescriptorProto);
71
72 add_message_dyn_trait_method!(methods, EnumDescriptorProto, LuaEnumDescriptorProto);
73
74 add_message_full_trait_method!(methods, EnumDescriptorProto, LuaEnumDescriptorProto);
75 }
76}