67 lines
1.0 KiB
Lua
67 lines
1.0 KiB
Lua
local sproto = require "sproto"
|
|
local core = require "sproto.core"
|
|
local print_r = require "print_r"
|
|
|
|
local sp = sproto.parse [[
|
|
.Person {
|
|
name 0 : string
|
|
id 1 : integer
|
|
email 2 : string
|
|
|
|
.PhoneNumber {
|
|
number 0 : string
|
|
type 1 : integer
|
|
}
|
|
|
|
phone 3 : *PhoneNumber
|
|
}
|
|
|
|
.AddressBook {
|
|
person 0 : *Person(id)
|
|
others 1 : *Person
|
|
}
|
|
]]
|
|
|
|
-- core.dumpproto only for debug use
|
|
core.dumpproto(sp.__cobj)
|
|
|
|
local def = sp:default "Person"
|
|
print("default table for Person")
|
|
print_r(def)
|
|
print("--------------")
|
|
|
|
local ab = {
|
|
person = {
|
|
[10000] = {
|
|
name = "Alice",
|
|
id = 10000,
|
|
phone = {
|
|
{ number = "123456789" , type = 1 },
|
|
{ number = "87654321" , type = 2 },
|
|
}
|
|
},
|
|
[20000] = {
|
|
name = "Bob",
|
|
id = 20000,
|
|
phone = {
|
|
{ number = "01234567890" , type = 3 },
|
|
}
|
|
}
|
|
},
|
|
others = {
|
|
{
|
|
name = "Carol",
|
|
id = 30000,
|
|
phone = {
|
|
{ number = "9876543210" },
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
collectgarbage "stop"
|
|
|
|
local code = sp:encode("AddressBook", ab)
|
|
local addr = sp:decode("AddressBook", code)
|
|
print_r(addr)
|