summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2019-03-11 21:38:42 +0000
committerGitHub <noreply@github.com>2019-03-11 21:38:42 +0000
commit3e04afda9f8d1797e63a70f90a969fa8f98823b3 (patch)
tree060dafe3ce08ce145c75b37844ca1bd05b9a8569
parent35aab357e2ad6ebe1d3b5196e592bba8a10bed83 (diff)
parent863848ad568c32340f489a08753ff60230858d98 (diff)
downloadNim-3e04afda9f8d1797e63a70f90a969fa8f98823b3.tar.gz
Merge pull request #10823 from narimiran/json-tuples
simplify json.% for tuples and objects
-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: