This commit is contained in:
2026-03-05 17:32:20 +07:00
parent 060c68cd05
commit ae0f24ccb2
13 changed files with 4018 additions and 6364 deletions

View File

@@ -279,42 +279,38 @@ function envelope_to_json(env::msg_envelope_v1)
"broker_url" => env.broker_url
)
if !isempty(env.metadata) # Only include metadata if it exists and is not empty
obj["metadata"] = Dict(String(k) => v for (k, v) in env.metadata)
end
obj["metadata"] = Dict(String(k) => v for (k, v) in env.metadata)
# Convert payloads to JSON array
if !isempty(env.payloads)
payloads_json = []
for payload in env.payloads
payload_obj = Dict{String, Any}(
"id" => payload.id,
"dataname" => payload.dataname,
"payload_type" => payload.payload_type,
"transport" => payload.transport,
"encoding" => payload.encoding,
"size" => payload.size,
)
# Include data based on transport type
if payload.transport == "direct" && payload.data !== nothing
if payload.encoding == "base64" || payload.encoding == "json"
payload_obj["data"] = payload.data
else
# For other encodings, use base64
payload_bytes = _get_payload_bytes(payload.data)
payload_obj["data"] = Base64.base64encode(payload_bytes)
end
elseif payload.transport == "link" && payload.data !== nothing
# For link transport, data is a URL string - include directly
payloads_json = []
for payload in env.payloads
payload_obj = Dict{String, Any}(
"id" => payload.id,
"dataname" => payload.dataname,
"payload_type" => payload.payload_type,
"transport" => payload.transport,
"encoding" => payload.encoding,
"size" => payload.size,
)
# Include data based on transport type
if payload.transport == "direct" && payload.data !== nothing
if payload.encoding == "base64" || payload.encoding == "json"
payload_obj["data"] = payload.data
else
# For other encodings, use base64
payload_bytes = _get_payload_bytes(payload.data)
payload_obj["data"] = Base64.base64encode(payload_bytes)
end
if !isempty(payload.metadata)
payload_obj["metadata"] = Dict(String(k) => v for (k, v) in payload.metadata)
elseif payload.transport == "link" && payload.data !== nothing
# For link transport, data is a URL string - include directly
payload_obj["data"] = payload.data
end
push!(payloads_json, payload_obj)
if !isempty(payload.metadata)
payload_obj["metadata"] = Dict(String(k) => v for (k, v) in payload.metadata)
end
obj["payloads"] = payloads_json
push!(payloads_json, payload_obj)
end
obj["payloads"] = payloads_json
JSON.json(obj)
end