type Message1 = object name: string type Message2 = object import tables, macros var registered {.compileTime.}: Table[string, NimNode] macro register(name: static[string], x: typed) = registered[name] = x macro generate(): untyped = result = newStmtList() for name, value in registered: let valueStr = value.repr result.add quote do: echo `name`, ": ", `valueStr` register("route1", Message1) register("otherRoute", Message2) generate()