diff --git a/src/jsony.nim b/src/jsony.nim index 27f93ad..567d9d4 100644 --- a/src/jsony.nim +++ b/src/jsony.nim @@ -354,6 +354,9 @@ proc parseObject[T](s: string, i: var int, v: var T) = inc i else: break + when compiles(postHook(v)): + postHook(v) + eatChar(s, i, '}') proc parseHook*[T: tuple](s: string, i: var int, v: var T) = eatSpace(s, i) diff --git a/tests/test_tuples.nim b/tests/test_tuples.nim index df5b436..884b022 100644 --- a/tests/test_tuples.nim +++ b/tests/test_tuples.nim @@ -46,4 +46,27 @@ block: doAssert v[2] == 13.5 doAssert v.id == 134 doAssert v.name == "red" + +block: + type Entry = tuple[id: int, name: string, dist: float32] + var s = """[{"id": 134, "name": "red", "dist": 13.5}]""" + var entries = s.fromJson(seq[Entry]) + doAssert entries.len == 1 + var v = entries[0] + doAssert v.dist == 13.5 + doAssert v[0] == 134 + doAssert v[1] == "red" + doAssert v[2] == 13.5 + doAssert v.id == 134 + doAssert v.name == "red" doAssert v.dist == 13.5 + +type EntryForHook = tuple[id: int, name: string] +proc postHook(entry: var EntryForHook) = + entry.id = 42 + +block: + var s = """{"id": 6, "name": "red"}""" + var v = s.fromJson(EntryForHook) + doAssert v.id == 42 + doAssert v.name == "red"