|
2 gadi atpakaļ | |
---|---|---|
.. | ||
Makefile | 2 gadi atpakaļ | |
README.md | 2 gadi atpakaļ | |
build_ios.sh | 2 gadi atpakaļ | |
parser.lua | 2 gadi atpakaļ | |
pbc-lua.c | 2 gadi atpakaļ | |
protobuf.lua | 2 gadi atpakaļ | |
test.lua | 2 gadi atpakaļ | |
test2.lua | 2 gadi atpakaļ | |
testparser.lua | 2 gadi atpakaļ |
Make and install protobuf.so ( or protobuf.dll in windows ) and protobuf.lua into your lua path.
pb = require "protobuf"
pb.register_file "addressbook.pb"
or
file = io.open("addressbook.pb","rb")
buffer = file:read "*a"
file:close()
pb.register(buffer)
You can use the lua parser to register .proto file instead of .pb file .
parser = require "parser"
parser.register(filename [,path])
-- filename can be a string (single file) or a table (filename set)
See testparser.lua for detail .
parser.lua use Lpeg (http://www.inf.puc-rio.br/~roberto/lpeg/) to parser .proto file.
pb = require "protobuf"
pb.register_file "addressbook.pb"
stringbuffer = pb.encode("tutorial.Person",
{
name = "Alice",
id = 12345,
phone = {
{
number = "87654321"
},
}
})
-- If you want to get a lightuserdata(C pointer) and a length
pb.encode("tutorial.Person",
{
name = "Alice",
id = 12345,
phone = {
{
number = "87654321"
},
}
},
function (pointer, length)
-- do something
end)
For decode :
result = pb.decode("tutorial.Person", stringbuffer)
-- decode also support lightuserdata and length of data instead of a string :
-- pb.decode("tutorial.Person", buffer, length)
Pattern mode is cheaper than message mode.
phone = pb.pack("tutorial.Person.PhoneNumber number","87654321") -- pack a PhoneNumber package.
person = pb.pack("tutorial.Person name id phone","Alice",123,{phone}) -- phone list is a repeated field
-- use pb.unpack to unpack package
name, id, phone_package = pb.unpack("tutorial.Person name id phone", person)
number = pb.unpack("tutorial.Person.PhoneNumber number",unpack(phone_package[1])) -- unpack return message with { buffer, length }
pb.check(typename , field) can check the field of typename exist.
or you can use pb.check(typename) to check the typename registered.
pb.lasterror() will return an internal error string .