lua_protobuf_rs/descriptor_proto/
mod.rs1pub 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}