Codificação de Payload
Codificação de Payload
Seção intitulada “Codificação de Payload”Converta dados entre formatos incluindo JSON, MessagePack e binario. Manipule payloads tipados para comunicação entre serviços e passagem de dados em workflows.
Carregamento
Seção intitulada “Carregamento”Namespace global. Nenhum require necessario.
payload.new(...) -- acesso diretoConstantes de Formato
Seção intitulada “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"Criando Payloads
Seção intitulada “Criando Payloads”Criar um novo payload de um valor Lua:
-- De tabelalocal p = payload.new({ user_id = 123, name = "Alice", roles = {"admin", "user"}})
-- De stringlocal str_p = payload.new("Hello, World!")
-- De numerolocal num_p = payload.new(42.5)
-- De booleanlocal bool_p = payload.new(true)
-- De nillocal nil_p = payload.new(nil)
-- De errolocal err_p = payload.new(errors.new("something failed"))| Parâmetro | Tipo | Descrição |
|---|---|---|
value | any | Valor Lua (string, numero, boolean, tabela, nil ou erro) |
Retorna: Payload
Obtendo Formato
Seção intitulada “Obtendo Formato”Obter o formato do 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"Retorna: string - uma das constantes payload.format.*
Extraindo Dados
Seção intitulada “Extraindo Dados”Extrair o valor Lua do payload (transcodifica se necessario):
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]) -- 1Retorna: any, error
Transcodificando Payloads
Seção intitulada “Transcodificando Payloads”Transcodificar payload para um formato diferente:
local p = payload.new({ name = "test", value = 123})
-- Converter para JSONlocal json_p, err = p:transcode(payload.format.JSON)if err then return nil, errendprint(json_p:get_format()) -- "json/plain"
-- Converter para MessagePack (binario compacto)local msgpack_p, err = p:transcode(payload.format.MSGPACK)if err then return nil, errend
-- Converter para YAMLlocal yaml_p, err = p:transcode(payload.format.YAML)| Parâmetro | Tipo | Descrição |
|---|---|---|
format | string | Formato alvo de payload.format.* |
Retorna: Payload, error
Unmarshalling
Seção intitulada “Unmarshalling”Forçar a decodificação de um payload para um valor Lua, independentemente do formato de origem:
local data, err = p:unmarshal()unmarshal() sempre transcodifica para o formato Lua e retorna o valor Lua resultante. Diferente de data(), que retorna o valor bruto subjacente (potencialmente um objeto Go para formatos não-Lua), unmarshal() garante um valor Lua totalmente decodificado.
Retorna: any, error
Resultados Assincronos
Seção intitulada “Resultados Assincronos”Payloads sao comumente recebidos de chamadas de função assíncronas:
local funcs = require("funcs")
local future, err = funcs.async("app.process:compute", input_data)if err then return nil, errend
-- Aguardar resultadolocal ch = future:response()local result_payload, ok = ch:receive()if not ok then return nil, errors.new("channel closed")end
-- Extrair dados do payloadlocal result, err = result_payload:data()if err then return nil, errend
print(result.computed_value)| Condição | Tipo | Retentável |
|---|---|---|
| Falha de transcodificação | errors.INTERNAL | não |
| Resultado não e valor Lua valido | errors.INTERNAL | não |
Veja Error Handling para trabalhar com erros.