{.experimental.}
type K = enum
ka,kb
type A = object
case kind: K
of ka: innerAdata:int
of kb: innerBdata:string
proc a():A = A(kind:ka)
var an = a()
proc `.=`[T](m:var A, field:string, val:T) =
echo "Dot operator assignment overload called!", field
if field == "adata":
if m.kind != ka:
m.reset
m.kind = ka
m.innerAdata = val
#elif bdata ...
proc `.`(m:var A, field:string):int =
echo "Dot operator access overload called!", field
if field == "adata":
result = m.innerAdata
an.adata = 5
echo an.kind, an.adata
an.adata = 6
echo an.kind, an.adata
#an.bdata = "hello"
#echo an.kind, an.bdata