Add items iterator

Iterates over all child items in a Preserve.
This commit is contained in:
Emery Hemingway 2021-07-09 12:24:18 +02:00
parent be8ad62f99
commit 8985060055
1 changed files with 15 additions and 0 deletions

View File

@ -224,6 +224,21 @@ proc `$`*(prs: Preserve): string =
of pkEmbedded:
result.add(prs.embedded.repr)
iterator items*(prs: Preserve): Preserve =
case prs.kind
of pkRecord:
for i in 0..prs.record.high.pred:
yield prs.record[i]
of pkSequence:
for e in prs.sequence.items: yield e
of pkSet:
for e in prs.set.items: yield e
of pkDictionary:
for k, v in prs.dict.pairs:
yield k # key can be an arbitrary Preserve
yield v
else: discard
func isRecord*(prs: Preserve): bool =
if prs.kind == pkRecord:
result = true