diff options
author | LemonBoy <LemonBoy@users.noreply.github.com> | 2019-01-28 09:51:54 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-01-28 09:51:54 +0100 |
commit | db2a4d230dcc9fe31d4184ad65e369b846cb5dd2 (patch) | |
tree | c897156756eed823b978f1b20166a94eff784200 /lib | |
parent | dfa5faea0fa5ef8cd33b16233828ebaa03192f1e (diff) | |
download | Nim-db2a4d230dcc9fe31d4184ad65e369b846cb5dd2.tar.gz |
Add logic to deserialize tyRange fields from json (#10469)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/json.nim | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim index ab7cabed6..ffb8f4f35 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -1328,6 +1328,12 @@ proc createConstructor(typeSym, jsonNode: NimNode): NimNode = let obj = getType(typeSym[1]) result = processType(newIdentNode(typeName), obj, jsonNode, true) + of "range": + let typeNode = typeSym + # Deduce the base type from one of the endpoints + let baseType = getType(typeNode[1]) + + result = createConstructor(baseType, jsonNode) of "seq": let seqT = typeSym[1] let forLoopI = genSym(nskForVar, "i") @@ -1721,3 +1727,21 @@ when isMainModule: foo = js.to Foo doAssert(foo.b == "abc") + + # Generate constructors for range[T] types + block: + type + Q1 = range[0..10] + Q2 = range[0'i8..10'i8] + Q3 = range[0'u16..10'u16] + X = object + m1: Q1 + m2: Q2 + m3: Q3 + + let + obj = X(m1: 1, m2: 2'i8, m3: 3'u16) + jsonObj = %obj + desObj = to(jsonObj, type(obj)) + + doAssert(desObj == obj) |