lua_protobuf_rs/descriptor/
oneof_descriptor.rs

1use crate::descriptor::field_descriptor::LuaFieldDescriptor;
2use crate::descriptor::message_descriptor::LuaMessageDescriptor;
3use crate::descriptor_proto::oneof_descriptor_proto::LuaOneofDescriptorProto;
4use derive_more::{Deref, From, Into};
5use mlua::prelude::LuaUserData;
6use mlua::UserDataMethods;
7use protobuf::reflect::OneofDescriptor;
8
9#[derive(Eq, PartialEq, Clone, Debug, Deref, From, Into)]
10pub struct LuaOneofDescriptor(pub OneofDescriptor);
11
12impl LuaUserData for LuaOneofDescriptor {
13    fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
14        methods.add_method("proto", |_, this, ()| {
15            let proto: LuaOneofDescriptorProto = this.proto().clone().into();
16            Ok(proto)
17        });
18
19        methods.add_method("name", |_, this, ()| {
20            Ok(this.name().to_string())
21        });
22        
23        methods.add_method("containing_message", |_, this, ()| {
24            let descriptor: LuaMessageDescriptor = this.containing_message().into();
25            Ok(descriptor)
26        });
27
28        methods.add_method("is_synthetic", |_, this, ()| {
29            Ok(this.is_synthetic())
30        });
31
32        methods.add_method("full_name", |_, this, ()| {
33            Ok(this.full_name())
34        });
35        
36        methods.add_method("fields", |_, this, ()| {
37            let descriptors: Vec<LuaFieldDescriptor> = this.fields().map(From::from).collect();
38            Ok(descriptors)
39        });
40    }
41}