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)