lua-protobuf-rs 0.3.0

lua protobuf
Documentation
use crate::descriptor::field_descriptor::LuaFieldDescriptor;
use crate::descriptor::message_descriptor::LuaMessageDescriptor;
use crate::descriptor_proto::oneof_descriptor_proto::LuaOneofDescriptorProto;
use derive_more::{Deref, From, Into};
use mlua::UserDataMethods;
use mlua::prelude::LuaUserData;
use protobuf::reflect::OneofDescriptor;

#[derive(Eq, PartialEq, Clone, Debug, Deref, From, Into)]
pub struct LuaOneofDescriptor(pub OneofDescriptor);

impl LuaUserData for LuaOneofDescriptor {
    fn add_methods<M: UserDataMethods<Self>>(methods: &mut M) {
        methods.add_method("proto", |_, this, ()| {
            let proto: LuaOneofDescriptorProto = this.proto().clone().into();
            Ok(proto)
        });

        methods.add_method("name", |_, this, ()| Ok(this.name().to_string()));

        methods.add_method("containing_message", |_, this, ()| {
            let descriptor: LuaMessageDescriptor = this.containing_message().into();
            Ok(descriptor)
        });

        methods.add_method("is_synthetic", |_, this, ()| Ok(this.is_synthetic()));

        methods.add_method("full_name", |_, this, ()| Ok(this.full_name()));

        methods.add_method("fields", |_, this, ()| {
            let descriptors: Vec<LuaFieldDescriptor> = this.fields().map(From::from).collect();
            Ok(descriptors)
        });
    }
}