changeset 22:a4837071b73d

some attempts at parsing an eval response
author William Morgan <bill@mrgn.org>
date Sat, 10 Aug 2013 03:31:50 -0700
parents a4ac42c69285
children fcd7ae66a9ee
files src/requests.tp
diffstat 1 files changed, 112 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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)
 	}
+
 }