From a40cd7e0a0f557c873bfa00527671fa127f44e4a Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 17 Jun 2024 18:22:17 -0400 Subject: [PATCH 1/2] Fix deserialization of objects with default field values --- src/jsony.nim | 1 + tests/test_objects.nim | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/jsony.nim b/src/jsony.nim index 0fcb67b..f607bc0 100644 --- a/src/jsony.nim +++ b/src/jsony.nim @@ -599,6 +599,7 @@ proc fromJson*[T](s: string, x: typedesc[T]): T = ## * Missing json fields keep their default values. ## * `proc newHook(foo: var ...)` Can be used to populate default values. var i = 0 + result = default(T) s.parseHook(i, result) eatSpace(s, i) if i != s.len: diff --git a/tests/test_objects.nim b/tests/test_objects.nim index 6c8c5e3..4c1caae 100644 --- a/tests/test_objects.nim +++ b/tests/test_objects.nim @@ -7,6 +7,15 @@ block: var v = s.fromJson(Entry1) doAssert v.color == "" +block: + type Frog = object + legs: int = 4 + + var s = "{}" + var f = s.fromJson(Frog) + # Make sure the default value is deserialized correctly. + doAssert f.legs == 4 + block: type Foo2 = ref object field: string From 4899985745407d40feceb1faaf655d0cf3e21c3d Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 17 Jun 2024 18:29:13 -0400 Subject: [PATCH 2/2] Fixed tests for Nim < 2.0 --- tests/test_objects.nim | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/test_objects.nim b/tests/test_objects.nim index 4c1caae..b6ff01d 100644 --- a/tests/test_objects.nim +++ b/tests/test_objects.nim @@ -7,14 +7,15 @@ block: var v = s.fromJson(Entry1) doAssert v.color == "" -block: - type Frog = object - legs: int = 4 +when NimMajor >= 2: # Default field values are only supported in Nim 2.0+ + block: + type Frog = object + legs: int = 4 - var s = "{}" - var f = s.fromJson(Frog) - # Make sure the default value is deserialized correctly. - doAssert f.legs == 4 + var s = "{}" + var f = s.fromJson(Frog) + # Make sure the default value is deserialized correctly. + doAssert f.legs == 4 block: type Foo2 = ref object