Implement support for JsonNode in json.to.

This commit is contained in:
Dominik Picheta
2017-11-29 20:47:56 +00:00
committed by Dominik Picheta
parent 8187e83645
commit 8d61262372
2 changed files with 23 additions and 1 deletions

View File

@@ -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`.

View File

@@ -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.