Skip to content

Commit d45163b

Browse files
authored
Merge pull request #4 from guzba/master
ref array support
2 parents 35d9fa6 + 050d17c commit d45163b

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/jsony.nim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T])
1717
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T])
1818
proc parseHook*[T: tuple](s: string, i: var int, v: var T)
1919
proc parseHook*[T: array](s: string, i: var int, v: var T)
20+
proc parseHook*[T: ref array](s: string, i: var int, v: var T)
2021
proc parseHook*(s: string, i: var int, v: var JsonNode)
2122
proc parseHook*(s: string, i: var int, v: var char)
2223

@@ -202,6 +203,14 @@ proc parseHook*[T: array](s: string, i: var int, v: var T) =
202203
inc i
203204
eatChar(s, i, ']')
204205

206+
proc parseHook*[T: ref array](s: string, i: var int, v: var T) =
207+
eatSpace(s, i)
208+
if i + 3 < s.len and s[i+0] == 'n' and s[i+1] == 'u' and s[i+2] == 'l' and s[i+3] == 'l':
209+
i += 4
210+
return
211+
new(v)
212+
parseHook(s, i, v[])
213+
205214
proc skipValue(s: string, i: var int) =
206215
## Used to skip values of extra fields.
207216
eatSpace(s, i)

tests/test_arrays.nim

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,14 @@ block:
1919
var v = s.fromJson(array[2, string])
2020
doAssert v[0] == "no"
2121
doAssert v[1] == "yes"
22+
23+
block:
24+
var s = """["no", "yes"]"""
25+
var v = s.fromJson(ref array[2, string])
26+
doAssert v[0] == "no"
27+
doAssert v[1] == "yes"
28+
29+
block:
30+
var s = "null"
31+
var v = s.fromJson(ref array[2, string])
32+
doAssert v == nil

0 commit comments

Comments
 (0)