mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
Implement support for enum fields in JSON macro.
This commit is contained in:
@@ -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":
|
||||
|
||||
@@ -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]
|
||||
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
|
||||
Reference in New Issue
Block a user