diff --git a/lib/pure/json.nim b/lib/pure/json.nim index cde6c5713d..b3fc477498 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -1421,7 +1421,6 @@ proc processElseBranch(recCaseNode, elseBranch, jsonNode, kindType, ## RecList ## Sym "other" result = @[] - # TODO: Remove duplication between processOfBranch let getEnumCall = createGetEnumCall(kindJsonNode, kindType) # We need to build up a list of conditions from each ``of`` branch so that @@ -1525,6 +1524,13 @@ proc processType(typeName: NimNode, obj: NimNode, for field in obj[2]: let nodes = processObjField(field, jsonNode) result.add(nodes) + of nnkEnumTy: + let instType = toIdentNode(getTypeInst(typeName)) + let getEnumCall = createGetEnumCall(jsonNode, instType) + result = quote do: + ( + `getEnumCall` + ) of nnkSym: case ($typeName).normalize of "float": diff --git a/tests/stdlib/tjsonmacro.nim b/tests/stdlib/tjsonmacro.nim index 345c5a2fcb..74b0d4dc31 100644 --- a/tests/stdlib/tjsonmacro.nim +++ b/tests/stdlib/tjsonmacro.nim @@ -166,4 +166,20 @@ when isMainModule: var data = to(jsonNode, Data) doAssert data.person.name == "Nimmer" doAssert data.person.age == 21 - doAssert data.list == @[1, 2, 3, 4] \ No newline at end of file + doAssert data.list == @[1, 2, 3, 4] + + # Test non-variant enum fields. + block: + type + EnumType = enum + Foo, Bar + + TestEnum = object + field: EnumType + + var node = %{ + "field": %"Bar" + } + + var result = to(node, TestEnum) + doAssert result.field == Bar \ No newline at end of file