msgpack
Библиотека msgpack (lua-cmsgpack) упаковывает значения Lua в компактную двоичную строку MessagePack и обратно. При ошибке функции возвращают nil и текст ошибки.
Правила упаковки — как у database: вложенность до 16, функции, userdata и cdata становятся nil.
msgpack.pack(...)#
Упаковывает все аргументы подряд в одну строку.
| Параметр | Тип | Описание |
|---|---|---|
... |
any |
значения |
Возвращает: string.
local s = msgpack.pack({ 7, 8 }, "x", true)
print(#s, " байт")
msgpack.unpack(s: string)#
Распаковывает все значения из строки.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
упакованные данные |
Возвращает: все распакованные значения.
local s = msgpack.pack({ 7, 8 }, "x")
local t, x = msgpack.unpack(s)
print(t[2], " ", x) --> 8 x
msgpack.unpack_one(s: string, offset?: number)#
Распаковывает одно значение, начиная со смещения.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
упакованные данные |
offset |
number |
смещение в байтах, по умолчанию 0 |
Возвращает: number, any — смещение следующего значения (-1, если данные кончились) и само значение.
local s = msgpack.pack(1, 2, 3)
local off, v = 0, nil
while off ~= -1 do
off, v = msgpack.unpack_one(s, off)
print(v)
end
msgpack.unpack_limit(s: string, limit: number, offset?: number)#
Распаковывает не больше limit значений.
| Параметр | Тип | Описание |
|---|---|---|
s |
string |
упакованные данные |
limit |
number |
сколько значений распаковать |
offset |
number |
смещение в байтах, по умолчанию 0 |
Возвращает: number, ... — смещение следующего значения (-1, если данные кончились) и распакованные значения.
local s = msgpack.pack("a", "b", "c", "d")
local off, x, y = msgpack.unpack_limit(s, 2)
print(x, y, " дальше с ", off) --> ab дальше с 4