Skip to content

Commit eb8b14f

Browse files
authored
Merge pull request #40 from ire4ever1190/fix-named-tuple-seq
Fix seq[tuple] with named tuples
2 parents a1e9f97 + c845657 commit eb8b14f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/jsony.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,9 @@ proc parseObject[T](s: string, i: var int, v: var T) =
354354
inc i
355355
else:
356356
break
357+
when compiles(postHook(v)):
358+
postHook(v)
359+
eatChar(s, i, '}')
357360

358361
proc parseHook*[T: tuple](s: string, i: var int, v: var T) =
359362
eatSpace(s, i)

tests/test_tuples.nim

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,27 @@ block:
4646
doAssert v[2] == 13.5
4747
doAssert v.id == 134
4848
doAssert v.name == "red"
49+
50+
block:
51+
type Entry = tuple[id: int, name: string, dist: float32]
52+
var s = """[{"id": 134, "name": "red", "dist": 13.5}]"""
53+
var entries = s.fromJson(seq[Entry])
54+
doAssert entries.len == 1
55+
var v = entries[0]
56+
doAssert v.dist == 13.5
57+
doAssert v[0] == 134
58+
doAssert v[1] == "red"
59+
doAssert v[2] == 13.5
60+
doAssert v.id == 134
61+
doAssert v.name == "red"
4962
doAssert v.dist == 13.5
63+
64+
type EntryForHook = tuple[id: int, name: string]
65+
proc postHook(entry: var EntryForHook) =
66+
entry.id = 42
67+
68+
block:
69+
var s = """{"id": 6, "name": "red"}"""
70+
var v = s.fromJson(EntryForHook)
71+
doAssert v.id == 42
72+
doAssert v.name == "red"

0 commit comments

Comments
 (0)