Implement support for JsonNode in json.to.
This commit is contained in:
parent
8187e83645
commit
8d61262372
2 changed files with 23 additions and 1 deletions
|
|
@ -1744,6 +1744,11 @@ proc createConstructor(typeSym, jsonNode: NimNode): NimNode =
|
|||
let obj = getType(typeSym)
|
||||
result = processType(typeSym, obj, jsonNode, false)
|
||||
of nnkSym:
|
||||
# Handle JsonNode.
|
||||
if ($typeSym).cmpIgnoreStyle("jsonnode") == 0:
|
||||
return jsonNode
|
||||
|
||||
# Handle all other types.
|
||||
let obj = getType(typeSym)
|
||||
if obj.kind == nnkBracketExpr:
|
||||
# When `Sym "Foo"` turns out to be a `ref object`.
|
||||
|
|
|
|||
|
|
@ -339,4 +339,21 @@ when isMainModule:
|
|||
doAssert dataDeser.friends["John"].age == 35
|
||||
doAssert dataDeser.friends["Elizabeth"].age == 23
|
||||
|
||||
# TODO: JsonNode support
|
||||
# JsonNode support
|
||||
block:
|
||||
type
|
||||
Test = object
|
||||
name: string
|
||||
fallback: JsonNode
|
||||
|
||||
let data = """
|
||||
{"name": "FooBar", "fallback": 56.42}
|
||||
"""
|
||||
|
||||
let dataParsed = parseJson(data)
|
||||
let dataDeser = to(dataParsed, Test)
|
||||
doAssert dataDeser.name == "FooBar"
|
||||
doAssert dataDeser.fallback.kind == JFloat
|
||||
doAssert dataDeser.fallback.getFloat() == 56.42
|
||||
|
||||
# TODO: Cycles lead to infinite loops.
|
||||
Loading…
Add table
Add a link
Reference in a new issue