jsonutils.jsonTo: support opt (#16739)

This commit is contained in:
Timothee Cour
2021-01-17 02:37:06 -08:00
committed by GitHub
parent 44ceefa9fe
commit 6c07b0a1f8
3 changed files with 9 additions and 4 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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]()): "[]"