From 6c07b0a1f8daf96078ae68b83ead1d48675969d7 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Sun, 17 Jan 2021 02:37:06 -0800 Subject: [PATCH] jsonutils.jsonTo: support opt (#16739) --- changelog.md | 6 ++++-- lib/std/jsonutils.nim | 4 ++-- tests/stdlib/tjsonutils.nim | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index a67233ee0d690..5f3db3dfb368f 100644 --- a/changelog.md +++ b/changelog.md @@ -22,6 +22,10 @@ literals remain in the "raw" string form so that client code can easily treat small and large numbers uniformly. +- Added `BackwardsIndex` overload for `JsonNode`. + +- added `jsonutils.jsonTo` overload with `opt = Joptions()` param. + - Added an overload for the `collect` macro that inferes the container type based on the syntax of the last expression. Works with std seqs, tables and sets. @@ -89,8 +93,6 @@ - Added `posix_utils.osReleaseFile` to get system identification from `os-release` file on Linux and the BSDs. https://www.freedesktop.org/software/systemd/man/os-release.html -- Added `BackwardsIndex` overload for `JsonNode`. - - `math.round` now is rounded "away from zero" in JS backend which is consistent with other backends. see #9125. Use `-d:nimLegacyJsRound` for previous behavior. - Added `socketstream` module that wraps sockets in the stream interface diff --git a/lib/std/jsonutils.nim b/lib/std/jsonutils.nim index b9e47bd709697..50a38aa9cc27c 100644 --- a/lib/std/jsonutils.nim +++ b/lib/std/jsonutils.nim @@ -244,9 +244,9 @@ proc fromJson*[T](a: var T, b: JsonNode, opt = Joptions()) = # checkJson not appropriate here static: doAssert false, "not yet implemented: " & $T -proc jsonTo*(b: JsonNode, T: typedesc): T = +proc jsonTo*(b: JsonNode, T: typedesc, opt = Joptions()): T = ## reverse of `toJson` - fromJson(result, b) + fromJson(result, b, opt) proc toJson*[T](a: T): JsonNode = ## serializes `a` to json; uses `toJsonHook(a: T)` if it's in scope to diff --git a/tests/stdlib/tjsonutils.nim b/tests/stdlib/tjsonutils.nim index 06d01a9fba5a6..24bc9a3cd56f4 100644 --- a/tests/stdlib/tjsonutils.nim +++ b/tests/stdlib/tjsonutils.nim @@ -137,6 +137,9 @@ template fn() = var b: Bar fromJson(b, parseJson """{"foo": {"b": "bbb"}}""", Joptions(allowExtraKeys: true, allowMissingKeys: true)) doAssert b == Bar(foo: Foo(a: 0, b: "bbb", c: 0.0)) + block: # jsonTo with `opt` + let b2 = """{"foo": {"b": "bbb"}}""".parseJson.jsonTo(Bar, Joptions(allowExtraKeys: true, allowMissingKeys: true)) + doAssert b2 == Bar(foo: Foo(a: 0, b: "bbb", c: 0.0)) block testHashSet: testRoundtrip(HashSet[string]()): "[]"