Spry: binary encoding and decoding

This commit is contained in:
Emery Hemingway 2021-11-03 19:17:04 +01:00
parent a8373e37c6
commit c74f5c2c63
1 changed files with 20 additions and 2 deletions

View File

@ -116,20 +116,38 @@ when isMainModule:
proc addPreserves*(spry: Interpreter) =
nimFunc("parsePreserves"):
let str = StringVal(evalArg(spry)).value
PreservesNode(preserve: parsePreserves(str))
let node = evalArg(spry)
if node of StringVal:
let str = StringVal(node).value
result = PreservesNode(preserve: parsePreserves(str))
nimFunc("decodePreserves"):
let node = evalArg(spry)
if node of StringVal:
let str = StringVal(node).value
result = PreservesNode(preserve: decodePreserves(cast[seq[byte]](str)))
nimMeth("encodePreserves"):
let node = evalArgInfix(spry)
if node of PreservesNode:
var bin = encode PreservesNode(node).preserve
result = newValue(cast[string](bin))
nimFunc("fromPreserves"):
let node = evalArg(spry)
if node of PreservesNode:
let pr = PreservesNode(node).preserve
return toSpry(pr, spry)
nimMeth("toPreserves"):
let node = evalArgInfix(spry)
PreservesNode(preserve: node.toPreserve)
nimMeth("arity"):
let node = evalArgInfix(spry)
if node of RecordNode:
return newValue(pred SeqComposite(node).nodes.len)
nimMeth("label"):
let node = evalArgInfix(spry)
if node of RecordNode: