It's probably better to have the API hide s and i in
|
proc parseHook*[T](s: string, i: var int, v: var seq[T]) |
|
proc parseHook*[T: enum](s: string, i: var int, v: var T) |
|
proc parseHook*[T: object|ref object](s: string, i: var int, v: var T) |
|
proc parseHook*[T](s: string, i: var int, v: var SomeTable[string, T]) |
|
proc parseHook*[T](s: string, i: var int, v: var SomeSet[T]) |
|
proc parseHook*[T: tuple](s: string, i: var int, v: var T) |
|
proc parseHook*[T: array](s: string, i: var int, v: var T) |
|
proc parseHook*[T: ref array](s: string, i: var int, v: var T) |
|
proc parseHook*(s: string, i: var int, v: var JsonNode) |
|
proc parseHook*(s: string, i: var int, v: var char) |
This can be done with a lightweight parser object
type JsonParser = object
view: openarray[char]
pos: int
proc parseHook*[T](p: var JsonParser, v: var seq[T])
proc parseHook*[T: enum](p: var JsonParser, v: var T)
proc parseHook*[T: object|ref object](p: var JsonParser, v: var T)
proc parseHook*[T](p: var JsonParser, v: var SomeTable[string, T])
proc parseHook*[T](p: var JsonParser, v: var SomeSet[T])
proc parseHook*[T: tuple](p: var JsonParser, v: var T)
proc parseHook*[T: array](p: var JsonParser, v: var T)
proc parseHook*[T: ref array](p: var JsonParser, v: var T)
proc parseHook*(p: var JsonParser, v: var JsonNode)
proc parseHook*(p: var JsonParser, v: var char)
The API would be clearer instead of the user asking themself what that i parameter does and whether it was important or not.
It also gives you the ability to evolve the internals to add new functionality like a File field #5 or mmap support for large json files.
It's probably better to have the API hide
sandiinjsony/src/jsony.nim
Lines 13 to 22 in d45163b
This can be done with a lightweight parser object
The API would be clearer instead of the user asking themself what that i parameter does and whether it was important or not.
It also gives you the ability to evolve the internals to add new functionality like a File field #5 or mmap support for large json files.