20 lines
460 B
Nim
20 lines
460 B
Nim
|
|
import
|
|
std/typetraits, preserves, sturdy
|
|
|
|
type
|
|
Bind*[Cap] {.preservesRecord: "bind".} = object
|
|
`oid`*: Preserve[Cap]
|
|
`key`*: seq[byte]
|
|
`target`*: Cap
|
|
|
|
Resolve*[Cap] {.preservesRecord: "resolve".} = ref object
|
|
`sturdyref`*: sturdy.SturdyRef[Cap]
|
|
`observer`*: Cap
|
|
|
|
proc `$`*[Cap](x: Bind[Cap] | Resolve[Cap]): string =
|
|
`$`(toPreserve(x, Cap))
|
|
|
|
proc encode*[Cap](x: Bind[Cap] | Resolve[Cap]): seq[byte] =
|
|
encode(toPreserve(x, Cap))
|