# HG changeset patch # User William Morgan # Date 1376130710 25200 # Node ID a4837071b73dd6ddb5021f76cf605a406216bfb7 # Parent a4ac42c69285a1e0f58c1307c83ed90c38d3bfb2 some attempts at parsing an eval response diff -r a4ac42c69285 -r a4837071b73d src/requests.tp --- a/src/requests.tp Fri Aug 09 15:53:53 2013 -0700 +++ b/src/requests.tp Sat Aug 10 03:31:50 2013 -0700 @@ -37,8 +37,120 @@ } } + + + + + + expect:in <- :target input { + input find: target else: { + print: "expected " . target . "!\n" + -1 + //exit, it's all fucked now + } + } + + quotedVal <- :str { + str find: "\"" else: { + "expected + } + } + + jsonVal:in <- :target input { + idx <- expect: target in: input + nextQuoteIdx <- idx + + quotedVal: idx + } + + evalResponse <- :str { + str find: "status" else: {print: missing} + statIdx <- expect: "status" in: str + status <- requireK + + #{ + status <- + outputs <- parseArray(input) + message <- + } + } + + + println: str { + print: str . "\n" + } + + readObject <- :str { + expect "{" + readObjectContents: + expect "}" + } + + readObject <- :str { + innerStr <- readEnclosed: "{" "}" + elems <- split: "," + } + + evalResponse <- :str { + status <- readValForKey: "status" str + if status = "error" { + + } else { + if status = "ok" { + #{ + readEvalOutputs: + } + } + } + + } + + expect:in:else <- :target src doElse { + src find: target else: { + print: "parse error: expected " . target . "!\n" + doElse: + } + } + + getStrForKey:from:else <- :key :src :doElse { + idx <- expect: "\"" in: src else: doElse + idx + (key length): + } + + getEval:else <- :str :fail { + statusRest <- getStrForKey: "status" from: str else: fail + if (statusRest value) = 0 { + outputsRest <- getOutputs: (statusRest rest) else: fail + #{ + value <- #{ + status <- statusRest.value + outputs <- outputsRest.value + } + rest <- outputsRest.rest + } + } else { + print: "Status was error, message: " . message + #{ + message <- getStrForKey: "message" from: (statusRest rest) else: fail + value <- #{ + status <- statusRest.value + message <- outputsRest.value + } + rest <- outputsRest.rest + } + } + } + + + main <- { print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n" print: ((guessRequest: "someId" "someProg") string) . "\n" + + exampleEvalResponse <- "{\"status\":\"ok\",\"outputs\":[\"0x0000000000000002\",\"0x01DFFFFFFFFFFFFE\"]}" + resp <- getEval: exampleEvalResponse else: { + println: "failed to parse response." + } + println: ((resp value) status) } + }