From c74f5c2c639c148c0538e2ca62f54b733e8dc0ce Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 3 Nov 2021 19:17:04 +0100 Subject: [PATCH] Spry: binary encoding and decoding --- src/preserves/sprypreserves.nim | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) 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: