summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authornarimiran <narimiran@disroot.org>2019-03-11 16:51:06 +0100
committernarimiran <narimiran@disroot.org>2019-03-11 16:51:06 +0100
commit863848ad568c32340f489a08753ff60230858d98 (patch)
treeb6d130fc0f190b5afbc26097372d19497347e967 /lib/pure
parent06f23572d0299883b55d44872da51d07e876072e (diff)
downloadNim-863848ad568c32340f489a08753ff60230858d98.tar.gz
simplify json.% for tuples and objects
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/json.nim20
1 files changed, 7 insertions, 13 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index bebeaf084..b033b6316 100644
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
@@ -390,25 +390,19 @@ proc `[]=`*(obj: JsonNode, key: string, val: JsonNode) {.inline.} =
   assert(obj.kind == JObject)
   obj.fields[key] = val
 
-#[
-Note: could use simply:
-proc `%`*(o: object|tuple): JsonNode
-but blocked by https://github.com/nim-lang/Nim/issues/10019
-]#
-proc `%`*(o: tuple): JsonNode =
-  ## Generic constructor for JSON data. Creates a new `JObject JsonNode`
-  when isNamedTuple(type(o)):
+proc `%`*[T: tuple|object](o: T): JsonNode =
+  ## Construct JsonNode from tuples and objects.
+  ##
+  ## If passed an anonymous tuple, creates `JArray JsonNode`,
+  ## otherwise (named tuples and objects) `JObject JsonNode`.
+  const isNamed = T is object or isNamedTuple(T)
+  when isNamed:
     result = newJObject()
     for k, v in o.fieldPairs: result[k] = %v
   else:
     result = newJArray()
     for a in o.fields: result.add(%a)
 
-proc `%`*(o: object): JsonNode =
-  ## Generic constructor for JSON data. Creates a new `JObject JsonNode`
-  result = newJObject()
-  for k, v in o.fieldPairs: result[k] = %v
-
 proc `%`*(o: ref object): JsonNode =
   ## Generic constructor for JSON data. Creates a new `JObject JsonNode`
   if o.isNil: