diff --git a/src/preserves.nim b/src/preserves.nim index 5488671..7e0fe09 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -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