diff --git a/src/preserves.nim b/src/preserves.nim index 6ad3862..22a845e 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -650,7 +650,9 @@ template preservesLiteral*(value: typed) {.pragma.} template unpreservable*() {.pragma.} ## Pragma to forbid a type from being converted by ``toPreserve``. - ## See ``toPreserve``. + ## Useful for preventing an embeded type from being encoded + ## as its native type. + ## Unpreservability is asserted at runtime. proc toPreserve*[T](x: T; E = void): Preserve[E] = ## Serializes ``x`` to Preserves. Can be customized by defining @@ -704,7 +706,8 @@ proc toPreserve*[T](x: T; E = void): Preserve[E] = cast[Preserve[E]](lit) else: toPreserve(val, E) - when T.hasCustomPragma(unpreservable): {.fatal: "unpreservable type".} + when T.hasCustomPragma(unpreservable): + raiseAssert($T & " is unpreservable") elif T.hasCustomPragma(preservesOr): var hasKind, hasVariant: bool for k, v in x.fieldPairs: @@ -891,7 +894,8 @@ proc fromPreserve*[T, E](v: var T; pr: Preserve[E]): bool = pr == lit else: fromPreserve(val, pr) - when T.hasCustomPragma(unpreservable): {.fatal: "unpreservable type " & $T.} + when T.hasCustomPragma(unpreservable): + raiseAssert($T & " is unpreservable") elif T.hasCustomPragma(preservesRecord): if pr.isRecord and pr.label.isSymbol(T.getCustomPragmaVal(preservesRecord)): result = true