import std/typetraits, preserves type TimerExpired* {.preservesRecord: "timer-expired".} = object `label`*: Preserve[void] `msecs`*: float64 SetTimer* {.preservesRecord: "set-timer".} = object `label`*: Preserve[void] `msecs`*: float64 `kind`*: TimerKind `TimerKind`* {.preservesOr, pure.} = enum `relative`, `absolute`, `clear` LaterThan* {.preservesRecord: "later-than".} = object `msecs`*: float64 proc `$`*(x: TimerExpired | SetTimer | LaterThan): string = `$`(toPreserve(x)) proc encode*(x: TimerExpired | SetTimer | LaterThan): seq[byte] = encode(toPreserve(x))