How to do something like this?
type Data = object
value: int
macro genWrapper(T: typedesc): stmt =
# How to get field's name and type here?
for fName, fType in **T**:
# Generate some stuff
genWrapper(Data)
Is this what you need? Note: may need to be changed for other types.
import macros
type Data = object
value: int
fvalue: float
macro genWrapper(T: typedesc): stmt =
iterator objfields(t: typedesc): (NimNode, NimNode) =
# t.getType[1] gets the underlying type of the typedesc parameter.
# getType[1] of that value gets the object items.
let reclist = t.getType[1].getType[1]
for i in 0..len(reclist)-1:
yield (reclist[i], reclist[i].getType)
for fName, fType in objfields(T):
echo fname, ": ", fType.treeRepr
# dummy return
return quote do: discard
genWrapper(Data)