Payload-Kodierung
Payload-Kodierung
Abschnitt betitelt „Payload-Kodierung“Konvertieren Sie Daten zwischen Formaten einschließlich JSON, MessagePack und Binär. Behandeln Sie typisierte Payloads für Inter-Service-Kommunikation und Workflow-Datenübergabe.
Globaler Namespace. Kein require erforderlich.
payload.new(...) -- direkter ZugriffFormat-Konstanten
Abschnitt betitelt „Format-Konstanten“Format-Identifikatoren für Payload-Typen:
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"Payloads erstellen
Abschnitt betitelt „Payloads erstellen“Erstellen Sie ein neues Payload aus einem Lua-Wert:
-- Aus Tabellelocal p = payload.new({ user_id = 123, name = "Alice", roles = {"admin", "user"}})
-- Aus Stringlocal str_p = payload.new("Hello, World!")
-- Aus Zahllocal num_p = payload.new(42.5)
-- Aus Booleanlocal bool_p = payload.new(true)
-- Aus nillocal nil_p = payload.new(nil)
-- Aus Fehlerlocal err_p = payload.new(errors.new("something failed"))| Parameter | Typ | Beschreibung |
|---|---|---|
value | any | Lua-Wert (string, number, boolean, table, nil oder error) |
Gibt zurück: Payload
Format abrufen
Abschnitt betitelt „Format abrufen“Payload-Format abrufen:
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"Gibt zurück: string - eine der payload.format.* Konstanten
Daten extrahieren
Abschnitt betitelt „Daten extrahieren“Extrahieren Sie den Lua-Wert aus dem Payload (transkodiert bei Bedarf):
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]) -- 1Gibt zurück: any, error
Payloads transkodieren
Abschnitt betitelt „Payloads transkodieren“Payload in ein anderes Format transkodieren:
local p = payload.new({ name = "test", value = 123})
-- Zu JSON konvertierenlocal json_p, err = p:transcode(payload.format.JSON)if err then return nil, errendprint(json_p:get_format()) -- "json/plain"
-- Zu MessagePack konvertieren (kompaktes Binar)local msgpack_p, err = p:transcode(payload.format.MSGPACK)if err then return nil, errend
-- Zu YAML konvertierenlocal yaml_p, err = p:transcode(payload.format.YAML)| Parameter | Typ | Beschreibung |
|---|---|---|
format | string | Zielformat aus payload.format.* |
Gibt zurück: Payload, error
Unmarshalling
Abschnitt betitelt „Unmarshalling“Erzwingt die Dekodierung eines Payloads zu einem Lua-Wert, unabhängig vom Quellformat:
local data, err = p:unmarshal()unmarshal() transkodiert immer in das Lua-Format und gibt den resultierenden Lua-Wert zurück. Im Gegensatz zu data(), das den rohen zugrunde liegenden Wert zurückgibt (möglicherweise ein Go-Objekt für Nicht-Lua-Formate), garantiert unmarshal() einen vollständig dekodierten Lua-Wert.
Gibt zurück: any, error
Async-Ergebnisse
Abschnitt betitelt „Async-Ergebnisse“Payloads werden häufig von asynchronen Funktionsaufrufen empfangen:
local funcs = require("funcs")
local future, err = funcs.async("app.process:compute", input_data)if err then return nil, errend
-- Auf Ergebnis wartenlocal ch = future:response()local result_payload, ok = ch:receive()if not ok then return nil, errors.new("channel closed")end
-- Daten aus Payload extrahierenlocal result, err = result_payload:data()if err then return nil, errend
print(result.computed_value)| Bedingung | Art | Wiederholbar |
|---|---|---|
| Transkodierung fehlgeschlagen | errors.INTERNAL | nein |
| Ergebnis ist kein gültiger Lua-Wert | errors.INTERNAL | nein |
Siehe Fehlerbehandlung für die Arbeit mit Fehlern.