Move jsonhooks check to runnableExamples

This commit is contained in:
Emery Hemingway 2023-04-10 17:51:14 -05:00
parent a74b28cc6f
commit 335d1b61cc
3 changed files with 14 additions and 13 deletions

View File

@ -1,6 +1,6 @@
# Package
version = "20230403"
version = "20230410"
author = "Emery Hemingway"
description = "data model and serialization format"
license = "Unlicense"

View File

@ -1,2 +1,3 @@
include_rules
: foreach preserves_schema_nim.nim schemac.nim |> !nim |> $(BIN_DIR)/%B | $(BIN_DIR)/<%B>
: foreach *hooks.nim |> !nim_check |>

View File

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2021 ☭ Emery Hemingway
# SPDX-FileCopyrightText: ☭ Emery Hemingway
# SPDX-License-Identifier: Unlicense
import std/[json, tables]
@ -28,7 +28,14 @@ proc toPreserveHook*(js: JsonNode; E: typedesc): Preserve[E] =
for i, e in js.elems:
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:
of pkBoolean:
js = newJBool(prs.bool)
@ -54,14 +61,14 @@ proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
js = newJArray()
js.elems.setLen(prs.sequence.len)
for i, val in prs.sequence:
if not fromPreserve(js.elems[i], val):
if not fromPreserveHook(js.elems[i], val):
return false
of pkSet:
js = newJArray()
js.elems.setLen(prs.set.len)
var i: int
for val in prs.set:
if not fromPreserve(js.elems[i], val):
if not fromPreserveHook(js.elems[i], val):
return false
inc i
of pkDictionary:
@ -70,7 +77,7 @@ proc fromPreserveHook*[E](js: var JsonNode; prs: Preserve[E]): bool =
if key.kind != pkString:
return false
var jsVal: JsonNode
if not fromPreserve(jsVal, val): return false
if not fromPreserveHook(jsVal, val): return false
js[key.string] = jsVal
else: return false
true
@ -81,10 +88,3 @@ proc toJsonHook*[E](pr: Preserve[E]): JsonNode =
proc fromJsonHook*[E](pr: var Preserve[E]; js: JsonNode) =
pr = toPreserveHook(js, E)
when isMainModule:
var js = JsonNode()
var pr = js.toPreserveHook(void)
assert fromPreserveHook(js, pr)
fromJsonHook(pr, js)
js = toJsonHook(pr)