mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 21:40:32 +00:00
Implement support for JsonNode in json.to.
This commit is contained in:
committed by
Dominik Picheta
parent
8187e83645
commit
8d61262372
@@ -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.
|
||||
Reference in New Issue
Block a user