diff --git a/src/preserves/sprypreserves.nim b/src/preserves/sprypreserves.nim index f2e9cc0..f2c9314 100644 --- a/src/preserves/sprypreserves.nim +++ b/src/preserves/sprypreserves.nim @@ -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: