diff --git a/src/preserves.nim b/src/preserves.nim index ab41690..270700a 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -1189,6 +1189,17 @@ proc mapEmbeds*[A, B](pr: sink Preserve[A]; op: proc (v: A): B): Preserve[B] = of pkEmbedded: result = embed op(pr.embed) +proc getOrDefault*[T, V](pr: Preserve[T]; key: string; default: V): V = + ## Retrieves the value of `pr[key]` if `pr` is a dictionary containing `key` + ## or returns the `default` value. + var sym = toSymbol(key, T) + if pr.kind == pkDictionary: + for (k, v) in pr.dict: + if sym == k: + if fromPreserve(result, v): return + else: break + default + proc writeText*[E](stream: Stream; pr: Preserve[E]) = ## Encode Preserves to a `Stream` as text. if pr.embedded: write(stream, "#!")