mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-06-14 18:09:27 +00:00
26 lines
738 B
Nim
26 lines
738 B
Nim
import std/[json, macros]
|
|
|
|
type JsonEvent*[T] = ref object
|
|
eventType*: string
|
|
payload*: T
|
|
|
|
macro toFlatJson*(event: JsonEvent): JsonNode =
|
|
## Serialize JsonEvent[T] to flat JSON: eventType first, then T's payload fields.
|
|
result = quote:
|
|
var jsonObj = newJObject()
|
|
jsonObj["eventType"] = %`event`.eventType
|
|
|
|
# Flatten payload fields into the same object.
|
|
let payloadJson = %`event`.payload
|
|
for key, val in payloadJson.pairs:
|
|
jsonObj[key] = val
|
|
|
|
jsonObj
|
|
|
|
proc `$`*[T](event: JsonEvent[T]): string =
|
|
$toFlatJson(event)
|
|
|
|
proc newJsonEvent*[T](eventType: string, payload: T): JsonEvent[T] =
|
|
## New JsonEvent with the given eventType and payload.
|
|
JsonEvent[T](eventType: eventType, payload: payload)
|