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)
|
let obj = getType(typeSym)
|
||||||
result = processType(typeSym, obj, jsonNode, false)
|
result = processType(typeSym, obj, jsonNode, false)
|
||||||
of nnkSym:
|
of nnkSym:
|
||||||
|
# Handle JsonNode.
|
||||||
|
if ($typeSym).cmpIgnoreStyle("jsonnode") == 0:
|
||||||
|
return jsonNode
|
||||||
|
|
||||||
|
# Handle all other types.
|
||||||
let obj = getType(typeSym)
|
let obj = getType(typeSym)
|
||||||
if obj.kind == nnkBracketExpr:
|
if obj.kind == nnkBracketExpr:
|
||||||
# When `Sym "Foo"` turns out to be a `ref object`.
|
# 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["John"].age == 35
|
||||||
doAssert dataDeser.friends["Elizabeth"].age == 23
|
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