I have a union type ContentNode can be either a P, Br, or Text. The P can have children of type ContentNode:
type
ContentNodeKind* = enum
P,
Br,
Text
ContentNode* = object
case kind*: ContentNodeKind
of P: pChildren*: seq[ContentNode]
of Br: nil
of Text: textStr*: string
Now I can serialize it using the json module just fine, but when I try to deserialize it with the to() proc it just ignores the children of my P node:
let mynode = ContentNode(kind: P, pChildren: @[
ContentNode(kind: Text, textStr: "mychild"),
ContentNode(kind: Br)
])
echo "Original: " & $mynode
let serialized = $(%*mynode)
echo "Serialized: " & serialized
let deserialized = parseJson(serialized).to(ContentNode)
echo "Deserialized: " & $deserialized
#Original: (kind: P, pChildren: @[(kind: Text, textStr: "mychild"), (kind: Br)])
#Serialized: {"kind":"P","pChildren":[{"kind":"Text","textStr":"mychild"},{"kind":"Br"}]}
#Deserialized: (kind: P, pChildren: @[])
So what am I doing wrong? Am I not supposed to use to() for arbitrarily nested structures?