f
Size: a a a
f
f
f
f
{.push requiresinit.}
type A = object
var a: Af
import std/macros
macro reqi(a: untyped): untyped = echo a.treeRepr()
{.push reqi.}
type
A = object
f: string
var a: A
/usercode/in.nim(3, 7) Hint: 'reqi' is declared but not used [XDeclaredButNotUsed] (т.е. ни разу не использовано, и ничего не печатало при работе), при попытке приписать свою прагму на поле дает ошибку /usercode/in.nim(4, 8) Error: invalid pragma: reqiG
G
g
f
G
{.derive(Serialize).}, впихнуть его перед type нельзя, остается только к типу, но из такой прагмы ты не можешь вернуть например список новых функцийf
proc loadXml*[T: not enum](reader: var HXmlParser, obj: var T, tag: string) =
mixin loadXml
genXmlLoader(T, obj, reader, tag)
genXmlLoader получает все через тип обхекта (typedesc)f
.Attr. и так далееf
genXmlLoader уже такая логикаfor field in iterateFields(impl):
if not(field.isExported) or
field.isMarkedWith("Skip", "IO") or
field.name in ignored:
discard
f
Serialize, и это плохоG
f
.Attr. и так далееf
XmlLoader в прагме для типа и выдавать ошибку если этого нет, просто потомучто я не очень люблю совершенно неявный кодогенG
.Attr., впервые вижу?f
G
{.des, ser.}, потом решил перейти на концепты, а они не работают, и уже месяц ничего не делаю