Skip to content

Commit 9445e96

Browse files
committed
Add support for table constructors.
1 parent 651d13e commit 9445e96

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/jsony.nim

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,8 @@ proc dumpHook*(s: var string, v: string)
550550
proc dumpHook*(s: var string, v: char)
551551
proc dumpHook*(s: var string, v: tuple)
552552
proc dumpHook*(s: var string, v: enum)
553+
type t[T] = tuple[a:string, b:T]
554+
proc dumpHook*[N, T](s: var string, v: array[N, t[T]])
553555
proc dumpHook*[N, T](s: var string, v: array[N, T])
554556
proc dumpHook*[T](s: var string, v: seq[T])
555557
proc dumpHook*(s: var string, v: object)
@@ -749,6 +751,19 @@ proc dumpHook*(s: var string, v: object) =
749751
inc i
750752
s.add '}'
751753

754+
proc dumpHook*[N, T](s: var string, v: array[N, t[T]]) =
755+
s.add '{'
756+
var i = 0
757+
# Normal objects.
758+
for (k, e) in v:
759+
if i > 0:
760+
s.add ','
761+
s.dumpHook(k)
762+
s.add ':'
763+
s.dumpHook(e)
764+
inc i
765+
s.add '}'
766+
752767
proc dumpHook*(s: var string, v: ref) =
753768
if v == nil:
754769
s.add "null"

tests/test_tables.nim

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,13 @@ block:
4747
doAssert v["a"].color == "red"
4848
doAssert v["b"].color == "green"
4949
doAssert v["c"].color == "blue"
50+
51+
block:
52+
doAssert {"j":10,"s":20,"o":100,"n":5000}.toJson() ==
53+
"""{"j":10,"s":20,"o":100,"n":5000}"""
54+
55+
doAssert {"j":"a","s":"b","o":"c","n":"d"}.toJson() ==
56+
"""{"j":"a","s":"b","o":"c","n":"d"}"""
57+
58+
doAssert [{"j":"a"}].toJson() ==
59+
"""[{"j":"a"}]"""

0 commit comments

Comments
 (0)