Codificacion de Payload
Codificacion de Payload
Sección titulada «Codificacion de Payload»Convertir datos entre formatos incluyendo JSON, MessagePack y binario. Manejar payloads tipados para comunicación entre servicios y paso de datos en flujos de trabajo.
Namespace global. No se necesita require.
payload.new(...) -- acceso directoConstantes de Formato
Sección titulada «Constantes de Formato»Identificadores de formato para tipos de 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"Crear Payloads
Sección titulada «Crear Payloads»Crear un nuevo payload desde un valor Lua:
-- Desde tablalocal p = payload.new({ user_id = 123, name = "Alice", roles = {"admin", "user"}})
-- Desde stringlocal str_p = payload.new("Hello, World!")
-- Desde númerolocal num_p = payload.new(42.5)
-- Desde booleanlocal bool_p = payload.new(true)
-- Desde nillocal nil_p = payload.new(nil)
-- Desde errorlocal err_p = payload.new(errors.new("something failed"))| Parámetro | Tipo | Descripción |
|---|---|---|
value | any | Valor Lua (string, number, boolean, table, nil o error) |
Devuelve: Payload
Obtener Formato
Sección titulada «Obtener Formato»Obtener el formato del 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"Devuelve: string - una de las constantes payload.format.*
Extraer Datos
Sección titulada «Extraer Datos»Extraer el valor Lua del payload (transcodifica si es necesario):
local p = payload.new({ items = {1, 2, 3}, total = 100})
local data, err = p:data()if err then return nil, errend
print(data.total) -- 100print(data.items[1]) -- 1Devuelve: any, error
Transcodificar Payloads
Sección titulada «Transcodificar Payloads»Transcodificar payload a un formato diferente:
local p = payload.new({ name = "test", value = 123})
-- Convertir a JSONlocal json_p, err = p:transcode(payload.format.JSON)if err then return nil, errendprint(json_p:get_format()) -- "json/plain"
-- Convertir a MessagePack (binario compacto)local msgpack_p, err = p:transcode(payload.format.MSGPACK)if err then return nil, errend
-- Convertir a YAMLlocal yaml_p, err = p:transcode(payload.format.YAML)| Parámetro | Tipo | Descripción |
|---|---|---|
format | string | Formato objetivo de payload.format.* |
Devuelve: Payload, error
Unmarshalling
Sección titulada «Unmarshalling»Forzar la decodificación de un payload a un valor Lua, independientemente del formato de origen:
local data, err = p:unmarshal()unmarshal() siempre transcodifica al formato Lua y devuelve el valor Lua resultante. A diferencia de data(), que devuelve el valor subyacente sin procesar (potencialmente un objeto Go para formatos no-Lua), unmarshal() garantiza un valor Lua completamente decodificado.
Devuelve: any, error
Resultados Async
Sección titulada «Resultados Async»Los payloads se reciben comunmente de llamadas de función async:
local funcs = require("funcs")
local future, err = funcs.async("app.process:compute", input_data)if err then return nil, errend
-- Esperar resultadolocal ch = future:response()local result_payload, ok = ch:receive()if not ok then return nil, errors.new("channel closed")end
-- Extraer datos del payloadlocal result, err = result_payload:data()if err then return nil, errend
print(result.computed_value)Errores
Sección titulada «Errores»| Condición | Tipo | Reintentable |
|---|---|---|
| Fallo de transcodificacion | errors.INTERNAL | no |
| Resultado no es valor Lua valido | errors.INTERNAL | no |
Consulte Manejo de Errores para trabajar con errores.