lua_protobuf_rs/descriptor_proto/
mod.rs

1pub mod enum_descriptor_proto;
2pub mod enum_options;
3pub mod enum_reserved_range;
4pub mod enum_value_descriptor_proto;
5pub mod enum_value_options;
6pub mod extension_options;
7pub mod extension_range;
8pub mod field_descriptor_proto;
9mod field_options;
10pub mod file_descriptor_proto;
11mod file_options;
12mod location;
13pub mod method_descriptor_proto;
14mod method_options;
15pub mod name_part;
16pub mod oneof_descriptor_proto;
17pub mod oneof_options;
18pub mod reserved_range;
19pub mod service_descriptor_proto;
20mod source_code_info;
21pub mod uninterpreted_option;
22
23use crate::descriptor_proto::enum_descriptor_proto::LuaEnumDescriptorProto;
24use crate::descriptor_proto::extension_range::LuaExtensionRange;
25use crate::descriptor_proto::field_descriptor_proto::LuaFieldDescriptorProto;
26use crate::descriptor_proto::oneof_descriptor_proto::LuaOneofDescriptorProto;
27use crate::descriptor_proto::reserved_range::LuaReservedRange;
28use crate::{
29    add_message_dyn_trait_method, add_message_full_trait_method, add_message_trait_method,
30};
31use derive_more::{Deref, DerefMut, From, Into};
32use mlua::prelude::LuaUserData;
33use mlua::{MetaMethod, UserDataFields, UserDataMethods};
34use protobuf::descriptor::DescriptorProto;
35
36#[derive(PartialEq, Clone, Default, Debug, Deref, DerefMut, From, Into)]
37pub struct LuaDescriptorProto(pub DescriptorProto);
38
39impl LuaUserData for LuaDescriptorProto {
40    fn add_fields<F: UserDataFields<Self>>(fields: &mut F) {
41        fields.add_field_method_get("name", |_, this| Ok(this.name.clone()));
42
43        fields.add_field_method_get("field", |_, this| {
44            let field: Vec<LuaFieldDescriptorProto> = this
45                .field
46                .iter()
47                .map(Clone::clone)
48                .map(From::from)
49                .collect();
50            Ok(field)
51        });
52
53        fields.add_field_method_get("extension", |_, this| {
54            let extension: Vec<LuaFieldDescriptorProto> = this
55                .extension
56                .iter()
57                .map(Clone::clone)
58                .map(From::from)
59                .collect();
60            Ok(extension)
61        });
62
63        fields.add_field_method_get("nested_type", |_, this| {
64            let nested_type: Vec<LuaDescriptorProto> = this
65                .nested_type
66                .iter()
67                .map(Clone::clone)
68                .map(From::from)
69                .collect();
70            Ok(nested_type)
71        });
72
73        fields.add_field_method_get("enum_type", |_, this| {
74            let enum_type: Vec<LuaEnumDescriptorProto> = this
75                .enum_type
76                .iter()
77                .map(Clone::clone)
78                .map(From::from)
79                .collect();
80            Ok(enum_type)
81        });
82
83        fields.add_field_method_get("extension_range", |_, this| {
84            let extension_range: Vec<LuaExtensionRange> = this
85                .extension_range
86                .iter()
87                .map(Clone::clone)
88                .map(From::from)
89                .collect();
90            Ok(extension_range)
91        });
92
93        fields.add_field_method_get("oneof_decl", |_, this| {
94            let oneof_decl: Vec<LuaOneofDescriptorProto> = this
95                .oneof_decl
96                .iter()
97                .map(Clone::clone)
98                .map(From::from)
99                .collect();
100            Ok(oneof_decl)
101        });
102
103        fields.add_field_method_get("reserved_range", |_, this| {
104            let reserved_range: Vec<LuaReservedRange> = this
105                .reserved_range
106                .iter()
107                .map(Clone::clone)
108                .map(From::from)
109                .collect();
110            Ok(reserved_range)
111        });
112
113        fields.add_field_method_get("reserved_name", |_, this| Ok(this.reserved_name.clone()));
114    }
115
116    fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
117        methods.add_meta_method(MetaMethod::ToString, |_, this, ()| Ok(this.to_string()));
118
119        methods.add_method("name", |_, this, ()| Ok(this.name().to_string()));
120
121        methods.add_method_mut("clear_name", |_, this, ()| {
122            this.clear_name();
123            Ok(())
124        });
125
126        methods.add_method_mut("set_name", |_, this, name: String| {
127            this.set_name(name);
128            Ok(())
129        });
130
131        methods.add_method_mut("mut_name", |_, this, ()| Ok(this.mut_name().clone()));
132
133        methods.add_method_mut("take_name", |_, this, ()| Ok(this.take_name()));
134
135        add_message_trait_method!(methods, DescriptorProto, LuaDescriptorProto);
136
137        add_message_dyn_trait_method!(methods, DescriptorProto, LuaDescriptorProto);
138
139        add_message_full_trait_method!(methods, DescriptorProto, LuaDescriptorProto);
140    }
141}