From f3d8f822bddf1135233b82bd0f9b0f6495ce64ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mamy=20Andr=C3=A9-Ratsimbazafy?= Date: Tue, 28 May 2019 17:42:18 +0200 Subject: [PATCH] Handle reserved keyword `type` as field name --- json_serialization/reader.nim | 3 +-- tests/test_serialization.nim | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) 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)