支持 proto3 的 lua 绑定库 LuaPbIntf

支持 proto3 的 lua 绑定库 LuaPbIntf

(金庆的专栏 2017.4)

protobuf的lua绑定库之前一直用 pbc,但是该库已经不更新了。
想要添加 proto3 的 map , 还有支持 service, 发现代码太高深,无法下手。

pbc因为用c代码实现了 protobuf 的功能,所以代码量很大。
而对于 c++ 来说,只需要利用 protobuf 库中动态消息就可以实现 lua 所需功能。

luapb 就是直接用 protobuf 库封装后导出lua实现的。该库仅支持 proto2.

在 luapb 基础上实现对 proto3 的支持,就是 LuaPbIntf 库。
LuaPbIntf 库利用了 lua-intf 库来实现 c++ 与 lua 绑定,所以代码量比 luapb 又少了许多,
并且可读性大大增强,更改添加新功能也就更方便了。

与 pbc, lubpb 一样,LuaPbIntf 也是动态加载 proto 文件,不需要代码生成。

LuaPbIntf 采用 lua table 来表示 pb 消息,不是 pbc 中的代理表,而只是普通表。

项目地址: https://github.com/jinq0123/LuaPbIntf

示例:

local pb = require("luapbintf")

pb.import_proto_file("test.proto")

local msg = { uid = 12345 }
local sz = pb.encode("test.TestMsg", msg)

local msg2 = pb.decode("test.TestMsg", sz)
assert(msg2.uid == 12345)

proto3 map 示例:

local msgs = {}
msgs["k1"] = {}
msgs["k2"] = {}
pb.encode("test.TestMsg", { msgs = msgs })

rpc service 支持:

assert(pb.get_rpc_input_name("test.Test", "Foo") == "test.TestMsg")

assert(pb.get_rpc_output_name("test.Test", "Foo") == "test.CommonMsg")



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值