Improved assertion error messages on usage of JsonNode iterators on wrong kinds (#13389)

This commit is contained in:
Ico Doornekamp 2020-02-17 09:00:25 +01:00 • committed by GitHub
commit 73553621a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -739,33 +739,33 @@ proc `$`*(node: JsonNode): string =
iterator items*(node: JsonNode): JsonNode = iterator items*(node: JsonNode): JsonNode =
## Iterator for the items of `node`. `node` has to be a JArray. ## Iterator for the items of `node`. `node` has to be a JArray.
assert node.kind == JArray assert node.kind == JArray, ": items() can not iterate a JsonNode of kind " & $node.kind
for i in items(node.elems): for i in items(node.elems):
yield i yield i
iterator mitems*(node: var JsonNode): var JsonNode = iterator mitems*(node: var JsonNode): var JsonNode =
## Iterator for the items of `node`. `node` has to be a JArray. Items can be ## Iterator for the items of `node`. `node` has to be a JArray. Items can be
## modified. ## modified.
assert node.kind == JArray assert node.kind == JArray, ": mitems() can not iterate a JsonNode of kind " & $node.kind
for i in mitems(node.elems): for i in mitems(node.elems):
yield i yield i
iterator pairs*(node: JsonNode): tuple[key: string, val: JsonNode] = iterator pairs*(node: JsonNode): tuple[key: string, val: JsonNode] =
## Iterator for the child elements of `node`. `node` has to be a JObject. ## Iterator for the child elements of `node`. `node` has to be a JObject.
assert node.kind == JObject assert node.kind == JObject, ": pairs() can not iterate a JsonNode of kind " & $node.kind
for key, val in pairs(node.fields): for key, val in pairs(node.fields):
yield (key, val) yield (key, val)
iterator keys*(node: JsonNode): string = iterator keys*(node: JsonNode): string =
## Iterator for the keys in `node`. `node` has to be a JObject. ## Iterator for the keys in `node`. `node` has to be a JObject.
assert node.kind == JObject assert node.kind == JObject, ": keys() can not iterate a JsonNode of kind " & $node.kind
for key in node.fields.keys: for key in node.fields.keys:
yield key yield key
iterator mpairs*(node: var JsonNode): tuple[key: string, val: var JsonNode] = iterator mpairs*(node: var JsonNode): tuple[key: string, val: var JsonNode] =
## Iterator for the child elements of `node`. `node` has to be a JObject. ## Iterator for the child elements of `node`. `node` has to be a JObject.
## Values can be modified ## Values can be modified
assert node.kind == JObject assert node.kind == JObject, ": mpairs() can not iterate a JsonNode of kind " & $node.kind
for key, val in mpairs(node.fields): for key, val in mpairs(node.fields):
yield (key, val) yield (key, val)