I am trying to use JsonNode in macro, but failed... let exampleData = %*{ "name": "John Doe", "age": 30, "city": "New York" } macro genType*(name: untyped, fields: JsonNode): untyped = result = newStmtList() var fieldsAst = nnkRecList.newTree() for k, v in fields.pairs: fieldsAst.add( newTree(nnkIdentDefs, newTree(nnkPostfix, newIdentNode("*"), newIdentNode(k), newIdentNode("string"), # use v.kind mapping later newEmptyNode() ) ) ) # Generate the base type let baseType = newTree(nnkTypeSection, newTree(nnkTypeDef, newTree(nnkPostfix, newIdentNode("*"), newTree(nnkAccQuoted, name) ), newEmptyNode(), newTree(nnkObjectTy, newEmptyNode(), newEmptyNode(), # # Replace the specific AST with a generic one : fieldsAst ) ) ) result.add(baseType) Run
test macro # run this macro with exampleData genTable(Person, exampleData) Run `error` Error: type mismatch Expression: newIdentNode(k) [1] k: int Expected one of (first mismatch at [position]): [1] proc newIdentNode(i: NimIdent): NimNode [1] proc newIdentNode(i: string): NimNode Run