jsonutils.jsonTo: support opt (#16739)

This commit is contained in:
Timothee Cour 2021-01-17 02:37:06 -08:00 • committed by GitHub
commit 6c07b0a1f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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 literals remain in the "raw" string form so that client code can easily treat
small and large numbers uniformly. 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 - 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. 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. - 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 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 - `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. with other backends. see #9125. Use `-d:nimLegacyJsRound` for previous behavior.
- Added `socketstream` module that wraps sockets in the stream interface - 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 # checkJson not appropriate here
static: doAssert false, "not yet implemented: " & $T 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` ## reverse of `toJson`
fromJson(result, b) fromJson(result, b, opt)
proc toJson*[T](a: T): JsonNode = proc toJson*[T](a: T): JsonNode =
## serializes `a` to json; uses `toJsonHook(a: T)` if it's in scope to ## 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 var b: Bar
fromJson(b, parseJson """{"foo": {"b": "bbb"}}""", Joptions(allowExtraKeys: true, allowMissingKeys: true)) fromJson(b, parseJson """{"foo": {"b": "bbb"}}""", Joptions(allowExtraKeys: true, allowMissingKeys: true))
doAssert b == Bar(foo: Foo(a: 0, b: "bbb", c: 0.0)) 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: block testHashSet:
testRoundtrip(HashSet[string]()): "[]" testRoundtrip(HashSet[string]()): "[]"