初识lua
资源下载
Git Clone代码到本地: 复制代码
Subversion代码到本地: 复制代码
svn co –depth empty http://www.github.com/starwing/lua-protobuf
Checked out revision 1.
cd repo
svn up trunk
用法
protoc 模块
函数返回描述
1 | protoc.new() Proroc对象 创建新的编译器实例 |
pb 模块
pb 模块具有高级例程,可以用于 maniplate protobuf消息。
在下面的函数中,有几种类型具有特殊的含义:
type: 指示protobuf消息类型的字符串,”.Foo” 表示未声明 package 语句的原始文件中的类型。 “foo.Foo” 表示原始文件中声明 package foo;的类型
data: 可以是字符串,pb.slice 值或者 pb.buffer 值。
iterator: 可以在 Lua for in 语句中使用的函数,e.g.
复制代码
for name in pb.types() doprint(name)end
当遇到错误时,所有函数都返回 nil, errmsg 。
函数返回描述
1 | pb.clear() 无 清除所有类型 |
你可以使用 pb.(type|field)s 函数来检索已经加载消息的类型信息。
pb.type() 为指定类型返回多个信息:
名称:类型的完整qualitier名称,比如 。package 。typename”
basename: 没有软件包前缀的类型名称,比如”typename””
:”|”枚举”|”消息” 类型是否为map_entry类型,enum 类型或者消息类型。
pb.types() 返回一个迭代器,如所有消息类型上的调用 pb.type() 。
print(pb.type”MyType”)– list all types that loaded into pbfor name, basename, type in pb.types() doprint(name, basename, type)end
pb.field() 为一种类型返回指定字段的信息:
名称:字段名称
编号:架构中的字段数
类型:字段类型
默认值:如果没有默认值,则为 nil
可选”|”重复”|”:字段标签,可选或者重复,要求不支持
如果这是一个字段,这是一个名称和索引
然后 pb.fields() 迭代消息中的所有字段:
print(pb.field(“MyType”, “the_first_field”))– notice that you needn’t receive all return values from iteratorfor name, number, type in pb.fields”MyType”doprint(name, number, type)end
pb.enum() 映射来自 enum 名称和值:
protoc:load[[enum Color { Red = 1; Green = 2; Blue = 3 }]]print(pb.enum(“Color”, “Red”)) –> 1print(pb.enum(“Color”, 2)) –>”Green”
使用 pb.defaults(),你可以获得一个包含消息中所有默认值的表:
check_load[[ message TestDefault { optional int32 defaulted_int = 10 [ default = 777 ]; optional bool defaulted_bool = 11 [ default = true ]; optional string defaulted_str = 12 [ default =”foo” ]; optional float defaulted_num = 13 [ default = 0.125 ]; } ]]print(require”serpent”.block(pb.defaults”TestDefault”))– output:– {– defaulted_bool = true,– defaulted_int = 777,– defaulted_num = 0.125,– defaulted_str =”foo”– } –[[table: 0x7f8c1e52b050]]