Кодирование Payload
Преобразование данных между форматами, включая JSON, MessagePack и бинарный. Работа с типизированными payload для межсервисного взаимодействия и передачи данных в workflow.
Загрузка
Глобальное пространство имён. Подключение не требуется.
payload.new(...) -- прямой доступ
Константы форматов
Идентификаторы форматов payload:
payload.format.JSON -- "json/plain"
payload.format.YAML -- "yaml/plain"
payload.format.STRING -- "text/plain"
payload.format.BYTES -- "application/octet-stream"
payload.format.MSGPACK -- "application/msgpack"
payload.format.LUA -- "lua/any"
payload.format.GOLANG -- "golang/any"
payload.format.ERROR -- "golang/error"
Создание Payload
Создание нового payload из Lua-значения:
-- Из таблицы
local p = payload.new({
user_id = 123,
name = "Alice",
roles = {"admin", "user"}
})
-- Из строки
local str_p = payload.new("Hello, World!")
-- Из числа
local num_p = payload.new(42.5)
-- Из булевого значения
local bool_p = payload.new(true)
-- Из nil
local nil_p = payload.new(nil)
-- Из ошибки
local err_p = payload.new(errors.new("something failed"))
| Параметр | Тип | Описание |
|---|---|---|
value |
any | Lua-значение (string, number, boolean, table, nil или error) |
Возвращает: Payload, nil
Получение формата
Получить формат payload:
local p = payload.new({name = "test"})
local format = p:get_format() -- "lua/any"
local str_p = payload.new("hello")
local format2 = str_p:get_format() -- "lua/any"
local err_p = payload.new(errors.new("failed"))
local format3 = err_p:get_format() -- "golang/error"
Возвращает: string, nil — одна из констант payload.format.*
Извлечение данных
Извлечь Lua-значение из payload (при необходимости выполняется транскодирование):
local p = payload.new({
items = {1, 2, 3},
total = 100
})
local data, err = p:data()
if err then
return nil, err
end
print(data.total) -- 100
print(data.items[1]) -- 1
Возвращает: any, error
Транскодирование Payload
Преобразование payload в другой формат:
local p = payload.new({
name = "test",
value = 123
})
-- Преобразование в JSON
local json_p, err = p:transcode(payload.format.JSON)
if err then
return nil, err
end
print(json_p:get_format()) -- "json/plain"
-- Преобразование в MessagePack (компактный бинарный формат)
local msgpack_p, err = p:transcode(payload.format.MSGPACK)
if err then
return nil, err
end
-- Преобразование в YAML
local yaml_p, err = p:transcode(payload.format.YAML)
| Параметр | Тип | Описание |
|---|---|---|
format |
string | Целевой формат из payload.format.* |
Возвращает: Payload, error
Асинхронные результаты
Payload часто получают из асинхронных вызовов функций:
local funcs = require("funcs")
local future, err = funcs.async("app.process:compute", input_data)
if err then
return nil, err
end
-- Ожидание результата
local ch = future:response()
local result_payload, ok = ch:receive()
if not ok then
return nil, errors.new("channel closed")
end
-- Извлечение данных из payload
local result, err = result_payload:data()
if err then
return nil, err
end
print(result.computed_value)
Ошибки
| Условие | Kind | Повторяемо |
|---|---|---|
| Ошибка транскодирования | errors.INTERNAL |
нет |
| Результат не является валидным Lua-значением | errors.INTERNAL |
нет |
См. Обработка ошибок для работы с ошибками.