Move jsonhooks check to runnableExamples
This commit is contained in:
parent
a74b28cc6f
commit
335d1b61cc
|
@ -1,6 +1,6 @@
|
||||||
# Package
|
# Package
|
||||||
|
|
||||||
version = "20230403"
|
version = "20230410"
|
||||||
author = "Emery Hemingway"
|
author = "Emery Hemingway"
|
||||||
description = "data model and serialization format"
|
description = "data model and serialization format"
|
||||||
license = "Unlicense"
|
license = "Unlicense"
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
include_rules
|
include_rules
|
||||||
: foreach preserves_schema_nim.nim schemac.nim |> !nim |> $(BIN_DIR)/%B | $(BIN_DIR)/<%B>
|
: foreach preserves_schema_nim.nim schemac.nim |> !nim |> $(BIN_DIR)/%B | $(BIN_DIR)/<%B>
|
||||||
|
: foreach *hooks.nim |> !nim_check |>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-FileCopyrightText: 2021 ☭ Emery Hemingway
|
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||||
# SPDX-License-Identifier: Unlicense
|
# SPDX-License-Identifier: Unlicense
|
||||||
|
|
||||||
import std/[json, tables]
|
import std/[json, tables]
|
||||||
|
@ -28,7 +28,14 @@ proc toPreserveHook*(js: JsonNode; E: typedesc): Preserve[E] =
|
||||||
for i, e in js.elems:
|
for i, e in js.elems:
|
||||||
result.sequence[i] = toPreserveHook(e, E)
|
result.sequence[i] = toPreserveHook(e, E)
|
||||||
|
|
||||||
proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
|
proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool {.gcsafe.} =
|
||||||
|
runnableExamples:
|
||||||
|
import std/json
|
||||||
|
var js = JsonNode()
|
||||||
|
var pr = js.toPreserveHook(void)
|
||||||
|
assert fromPreserveHook(js, pr)
|
||||||
|
fromJsonHook(pr, js)
|
||||||
|
js = toJsonHook(pr)
|
||||||
case prs.kind:
|
case prs.kind:
|
||||||
of pkBoolean:
|
of pkBoolean:
|
||||||
js = newJBool(prs.bool)
|
js = newJBool(prs.bool)
|
||||||
|
@ -54,14 +61,14 @@ proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
|
||||||
js = newJArray()
|
js = newJArray()
|
||||||
js.elems.setLen(prs.sequence.len)
|
js.elems.setLen(prs.sequence.len)
|
||||||
for i, val in prs.sequence:
|
for i, val in prs.sequence:
|
||||||
if not fromPreserve(js.elems[i], val):
|
if not fromPreserveHook(js.elems[i], val):
|
||||||
return false
|
return false
|
||||||
of pkSet:
|
of pkSet:
|
||||||
js = newJArray()
|
js = newJArray()
|
||||||
js.elems.setLen(prs.set.len)
|
js.elems.setLen(prs.set.len)
|
||||||
var i: int
|
var i: int
|
||||||
for val in prs.set:
|
for val in prs.set:
|
||||||
if not fromPreserve(js.elems[i], val):
|
if not fromPreserveHook(js.elems[i], val):
|
||||||
return false
|
return false
|
||||||
inc i
|
inc i
|
||||||
of pkDictionary:
|
of pkDictionary:
|
||||||
|
@ -70,7 +77,7 @@ proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
|
||||||
if key.kind != pkString:
|
if key.kind != pkString:
|
||||||
return false
|
return false
|
||||||
var jsVal: JsonNode
|
var jsVal: JsonNode
|
||||||
if not fromPreserve(jsVal, val): return false
|
if not fromPreserveHook(jsVal, val): return false
|
||||||
js[key.string] = jsVal
|
js[key.string] = jsVal
|
||||||
else: return false
|
else: return false
|
||||||
true
|
true
|
||||||
|
@ -81,10 +88,3 @@ proc toJsonHook*[E](pr: Preserve[E]): JsonNode =
|
||||||
|
|
||||||
proc fromJsonHook*[E](pr: var Preserve[E]; js: JsonNode) =
|
proc fromJsonHook*[E](pr: var Preserve[E]; js: JsonNode) =
|
||||||
pr = toPreserveHook(js, E)
|
pr = toPreserveHook(js, E)
|
||||||
|
|
||||||
when isMainModule:
|
|
||||||
var js = JsonNode()
|
|
||||||
var pr = js.toPreserveHook(void)
|
|
||||||
assert fromPreserveHook(js, pr)
|
|
||||||
fromJsonHook(pr, js)
|
|
||||||
js = toJsonHook(pr)
|
|
||||||
|
|
Loading…
Reference in New Issue