lua_protobuf_rs/descriptor_proto/
enum_descriptor_proto.rs

1use 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}