From 863848ad568c32340f489a08753ff60230858d98 Mon Sep 17 00:00:00 2001 From: narimiran Date: Mon, 11 Mar 2019 16:51:06 +0100 Subject: simplify json.% for tuples and objects --- lib/pure/json.nim | 20 +++++++------------- 1 file 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: -- cgit 1.4.1-2-gfad0