diff --git a/json_serialization/reader.nim b/json_serialization/reader.nim index 82e1ab1..202f7f5 100644 --- a/json_serialization/reader.nim +++ b/json_serialization/reader.nim @@ -167,7 +167,7 @@ proc readValue*(r: var JsonReader, value: var auto) = r.skipToken tkBracketRi elif value is (object or tuple): - type T = value.type + type T = type(value) r.skipToken tkCurlyLe when T.totalSerializedFields > 0: @@ -192,4 +192,3 @@ proc readValue*(r: var JsonReader, value: var auto) = else: const typeName = typetraits.name(value.type) {.error: "Failed to convert to JSON an unsupported type: " & typeName.} - diff --git a/tests/test_serialization.nim b/tests/test_serialization.nim index 2d70a12..ec71155 100644 --- a/tests/test_serialization.nim +++ b/tests/test_serialization.nim @@ -28,6 +28,10 @@ type Invalid = object distance: Mile + Reserved = object + # Using Nim reserved keyword + `type`: string + template reject(code) = static: doAssert(not compiles(code)) @@ -102,3 +106,8 @@ suite "toJson tests": expect JsonReaderError: discard Json.decode(jsonValue, uint64, mode = Portable) + test "Using Nim reserved keyword `type`": + let r = Reserved(`type`: "uint8") + check: + r.toJSON == """{"type":"uint8"}""" + r == Json.decode("""{"type":"uint8"}""", Reserved)