Fix encoding and decoding of embedded values
This commit is contained in:
parent
5b6f673951
commit
918d4d3e2e
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "20221013"
|
||||
version = "20221016"
|
||||
author = "Emery Hemingway"
|
||||
description = "data model and serialization format"
|
||||
license = "Unlicense"
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue