diff options
author | narimiran <narimiran@disroot.org> | 2019-03-11 16:51:06 +0100 |
---|---|---|
committer | narimiran <narimiran@disroot.org> | 2019-03-11 16:51:06 +0100 |
commit | 863848ad568c32340f489a08753ff60230858d98 (patch) | |
tree | b6d130fc0f190b5afbc26097372d19497347e967 /lib/pure | |
parent | 06f23572d0299883b55d44872da51d07e876072e (diff) | |
download | Nim-863848ad568c32340f489a08753ff60230858d98.tar.gz |
simplify json.% for tuples and objects
Diffstat (limited to 'lib/pure')
-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: |