Preserve JSON object keys as symbols
This commit is contained in:
parent
5fa72cd25b
commit
e65dc2271f
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "20230723"
|
||||
version = "20230801"
|
||||
author = "Emery Hemingway"
|
||||
description = "data model and serialization format"
|
||||
license = "Unlicense"
|
||||
|
|
|
@ -264,7 +264,7 @@ proc `[]`*(pr: Preserve; i: int): Preserve =
|
|||
of pkRecord: pr.record[i]
|
||||
of pkSequence: pr.sequence[i]
|
||||
else:
|
||||
raise newException(ValueError, "`Preserves value is not indexable")
|
||||
raise newException(ValueError, "Preserves value is not indexable")
|
||||
|
||||
proc `[]=`*(pr: var Preserve; i: Natural; val: Preserve) =
|
||||
## Assign an indexed value into ``pr``.
|
||||
|
|
|
@ -21,7 +21,7 @@ proc toPreserveHook*(js: JsonNode; E: typedesc): Preserve[E] =
|
|||
of JObject:
|
||||
result = Preserve[E](kind: pkDictionary)
|
||||
for key, val in js.fields.pairs:
|
||||
result[Preserve[E](kind: pkString, string: key)] = toPreserveHook(val, E)
|
||||
result[Preserve[E](kind: pkSymbol, symbol: Symbol key)] = toPreserveHook(val, E)
|
||||
of JArray:
|
||||
result = Preserve[E](kind: pkSequence,
|
||||
sequence: newSeq[Preserve[E]](js.elems.len))
|
||||
|
@ -74,11 +74,17 @@ proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool {.gcsafe.} =
|
|||
of pkDictionary:
|
||||
js = newJObject()
|
||||
for (key, val) in prs.dict.items:
|
||||
if key.kind != pkString:
|
||||
case key.kind
|
||||
of pkSymbol:
|
||||
var jsVal: JsonNode
|
||||
if not fromPreserveHook(jsVal, val): return false
|
||||
js[string key.symbol] = jsVal
|
||||
of pkString:
|
||||
var jsVal: JsonNode
|
||||
if not fromPreserveHook(jsVal, val): return false
|
||||
js[key.string] = jsVal
|
||||
else:
|
||||
return false
|
||||
var jsVal: JsonNode
|
||||
if not fromPreserveHook(jsVal, val): return false
|
||||
js[key.string] = jsVal
|
||||
else: return false
|
||||
true
|
||||
|
||||
|
|
Loading…
Reference in New Issue