mirror of
https://github.com/status-im/nim-json-serialization.git
synced 2025-02-19 13:34:19 +00:00
Implement support for normal and ordered tables
This commit is contained in:
parent
342a272281
commit
e49b8bdb43
@ -110,6 +110,7 @@ proc allocPtr[T](p: var ptr T) =
|
||||
proc allocPtr[T](p: var ref T) =
|
||||
p = new(T)
|
||||
|
||||
|
||||
iterator readArray*(r: var JsonReader, ElemType: typedesc): ElemType =
|
||||
mixin readValue
|
||||
|
||||
@ -123,6 +124,23 @@ iterator readArray*(r: var JsonReader, ElemType: typedesc): ElemType =
|
||||
r.lexer.next()
|
||||
r.skipToken tkBracketRi
|
||||
|
||||
iterator readObject*(r: var JsonReader, KeyType: typedesc, ValueType: typedesc): (KeyType, ValueType) =
|
||||
mixin readValue
|
||||
|
||||
r.skipToken tkCurlyLe
|
||||
if r.lexer.tok != tkCurlyRi:
|
||||
while true:
|
||||
var key: KeyType
|
||||
var value: ValueType
|
||||
readValue(r, key)
|
||||
if r.lexer.tok != tkColon: break
|
||||
r.lexer.next()
|
||||
readValue(r, value)
|
||||
yield (key, value)
|
||||
if r.lexer.tok != tkComma: break
|
||||
r.lexer.next()
|
||||
r.skipToken tkCurlyRi
|
||||
|
||||
proc readValue*(r: var JsonReader, value: var auto) =
|
||||
mixin readValue
|
||||
|
||||
|
20
json_serialization/std/tables.nim
Normal file
20
json_serialization/std/tables.nim
Normal file
@ -0,0 +1,20 @@
|
||||
import stew/shims/tables, ../../json_serialization/[reader, writer, lexer]
|
||||
export tables
|
||||
|
||||
type
|
||||
TableType = OrderedTable | Table
|
||||
|
||||
proc writeValue*(writer: var JsonWriter, value: TableType) =
|
||||
writer.beginRecord()
|
||||
for key, val in value:
|
||||
writer.writeField key, val
|
||||
writer.endRecord()
|
||||
|
||||
proc readValue*(reader: var JsonReader, value: var TableType) =
|
||||
type KeyType = type(value.keys)
|
||||
type ValueType = type(value.values)
|
||||
value = init TableType
|
||||
for (key, val) in readObject(reader, KeyType, ValueType):
|
||||
value[key] = val
|
||||
|
||||
|
@ -3,7 +3,7 @@ import
|
||||
serialization/object_serialization,
|
||||
serialization/testing/generic_suite,
|
||||
../json_serialization, ./utils,
|
||||
../json_serialization/std/[options, sets]
|
||||
../json_serialization/std/[options, sets, tables]
|
||||
|
||||
type
|
||||
Foo = object
|
||||
|
Loading…
x
Reference in New Issue
Block a user