Fix encoding and decoding of embedded values

This commit is contained in:
Emery Hemingway 2022-10-16 15:29:27 -05:00
parent 5b6f673951
commit 918d4d3e2e
2 changed files with 5 additions and 7 deletions

View File

@ -1,6 +1,6 @@
# Package
version = "20221013"
version = "20221016"
author = "Emery Hemingway"
description = "data model and serialization format"
license = "Unlicense"

View File

@ -528,16 +528,14 @@ proc write*[E](str: Stream; pr: Preserve[E]) =
str.write(value)
str.write(0x84'u8)
of pkEmbedded:
when not E is void:
str.write(0x86'u8)
str.write(pr.embed.toPreserve)
str.write(0x86'u8)
str.write(pr.embed.toPreserve)
proc encode*[E](pr: Preserve[E]): seq[byte] =
## Return the binary-encoding of a Preserves value.
let s = newStringStream()
s.write pr
s.setPosition 0
result = cast[seq[byte]](s.readAll)
result = cast[seq[byte]](move s.data)
proc decodePreserves*(s: Stream; E = void): Preserve[E] =
## Decode a Preserves value from a binary-encoded stream.
@ -735,7 +733,7 @@ proc toPreserve*[T](x: T; E = void): Preserve[E] =
else:
toPreserve(val, E)
when T.hasCustomPragma(unpreservable):
{.error: $T & " is unpreservable".}
raiseAssert($T & " is unpreservable")
elif T.hasCustomPragma(preservesOr):
var hasKind, hasVariant: bool
for k, v in x.fieldPairs: