mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
* fixes #21638; `fromJson` should supports empty objects
* complete the logic
(cherry picked from commit 5e016e4466)
This commit is contained in:
@@ -89,19 +89,24 @@ macro getDiscriminants(a: typedesc): seq[string] =
|
||||
let sym = a[1]
|
||||
let t = sym.getTypeImpl
|
||||
let t2 = t[2]
|
||||
doAssert t2.kind == nnkRecList
|
||||
result = newTree(nnkBracket)
|
||||
for ti in t2:
|
||||
if ti.kind == nnkRecCase:
|
||||
let key = ti[0][0]
|
||||
let typ = ti[0][1]
|
||||
result.add newLit key.strVal
|
||||
if result.len > 0:
|
||||
case t2.kind
|
||||
of nnkEmpty: # allow empty objects
|
||||
result = quote do:
|
||||
@`result`
|
||||
seq[string].default
|
||||
of nnkRecList:
|
||||
result = newTree(nnkBracket)
|
||||
for ti in t2:
|
||||
if ti.kind == nnkRecCase:
|
||||
let key = ti[0][0]
|
||||
result.add newLit key.strVal
|
||||
if result.len > 0:
|
||||
result = quote do:
|
||||
@`result`
|
||||
else:
|
||||
result = quote do:
|
||||
seq[string].default
|
||||
else:
|
||||
result = quote do:
|
||||
seq[string].default
|
||||
doAssert false, "unexpected kind: " & $t2.kind
|
||||
|
||||
macro initCaseObject(T: typedesc, fun: untyped): untyped =
|
||||
## does the minimum to construct a valid case object, only initializing
|
||||
|
||||
Reference in New Issue
Block a user