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) = proc addPreserves*(spry: Interpreter) =
nimFunc("parsePreserves"): nimFunc("parsePreserves"):
let str = StringVal(evalArg(spry)).value let node = evalArg(spry)
PreservesNode(preserve: parsePreserves(str)) 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"): nimFunc("fromPreserves"):
let node = evalArg(spry) let node = evalArg(spry)
if node of PreservesNode: if node of PreservesNode:
let pr = PreservesNode(node).preserve let pr = PreservesNode(node).preserve
return toSpry(pr, spry) return toSpry(pr, spry)
nimMeth("toPreserves"): nimMeth("toPreserves"):
let node = evalArgInfix(spry) let node = evalArgInfix(spry)
PreservesNode(preserve: node.toPreserve) PreservesNode(preserve: node.toPreserve)
nimMeth("arity"): nimMeth("arity"):
let node = evalArgInfix(spry) let node = evalArgInfix(spry)
if node of RecordNode: if node of RecordNode:
return newValue(pred SeqComposite(node).nodes.len) return newValue(pred SeqComposite(node).nodes.len)
nimMeth("label"): nimMeth("label"):
let node = evalArgInfix(spry) let node = evalArgInfix(spry)
if node of RecordNode: if node of RecordNode: