Skip to content

Commit

Permalink
jsonutils: fromJson forward opt param fix (#16612)
Browse files Browse the repository at this point in the history
  • Loading branch information
inv2004 authored Jan 6, 2021
1 parent 58b9191 commit 0d5cab7
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
8 changes: 4 additions & 4 deletions lib/std/jsonutils.nim
Original file line number Diff line number Diff line change
Expand Up @@ -201,17 +201,17 @@ proc fromJson*[T](a: var T, b: JsonNode, opt = Joptions()) =
if b.kind == JNull: a = nil
else:
a = T()
fromJson(a[], b)
fromJson(a[], b, opt)
elif T is array:
checkJson a.len == b.len, $(a.len, b.len, $T)
var i = 0
for ai in mitems(a):
fromJson(ai, b[i])
fromJson(ai, b[i], opt)
i.inc
elif T is seq:
a.setLen b.len
for i, val in b.getElems:
fromJson(a[i], val)
fromJson(a[i], val, opt)
elif T is object:
template fun(key, typ): untyped {.used.} =
if b.hasKey key:
Expand All @@ -237,7 +237,7 @@ proc fromJson*[T](a: var T, b: JsonNode, opt = Joptions()) =
checkJson b.kind == JArray, $(b.kind) # we could customize whether to allow JNull
var i = 0
for val in fields(a):
fromJson(val, b[i])
fromJson(val, b[i], opt)
i.inc
checkJson b.len == i, $(b.len, i, $T, b) # could customize
else:
Expand Down
14 changes: 14 additions & 0 deletions tests/stdlib/tjsonutils.nim
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,20 @@ template fn() =
testRoundtrip(Foo[int](t1: false, z2: 7)): """{"t1":false,"z2":7}"""
# pending https://github.com/nim-lang/Nim/issues/14698, test with `type Foo[T] = ref object`

block: # bug: pass opt params in fromJson
type Foo = object
a: int
b: string
c: float
var f: seq[Foo]
try:
fromJson(f, parseJson """[{"b": "bbb"}]""")
doAssert false
except ValueError:
doAssert true
fromJson(f, parseJson """[{"b": "bbb"}]""", Joptions(allowExtraKeys: true, allowMissingKeys: true))
doAssert f == @[Foo(a: 0, b: "bbb", c: 0.0)]

block testHashSet:
testRoundtrip(HashSet[string]()): "[]"
testRoundtrip([""].toHashSet): """[""]"""
Expand Down

0 comments on commit 0d5cab7

Please sign in to comment.