diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2019-03-11 21:38:42 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-11 21:38:42 +0000 |
commit | 3e04afda9f8d1797e63a70f90a969fa8f98823b3 (patch) | |
tree | 060dafe3ce08ce145c75b37844ca1bd05b9a8569 | |
parent | 35aab357e2ad6ebe1d3b5196e592bba8a10bed83 (diff) | |
parent | 863848ad568c32340f489a08753ff60230858d98 (diff) | |
download | Nim-3e04afda9f8d1797e63a70f90a969fa8f98823b3.tar.gz |
Merge pull request #10823 from narimiran/json-tuples
simplify json.% for tuples and objects
-rw-r--r-- | lib/pure/json.nim | 20 |
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: |