comparison src/requests.tp @ 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
comparison
equal deleted inserted replaced
21:a4ac42c69285 22:a4837071b73d
35 "{" . idStr . "," . progStr . "}" 35 "{" . idStr . "," . progStr . "}"
36 } 36 }
37 } 37 }
38 } 38 }
39 39
40
41
42
43
44
45 expect:in <- :target input {
46 input find: target else: {
47 print: "expected " . target . "!\n"
48 -1
49 //exit, it's all fucked now
50 }
51 }
52
53 quotedVal <- :str {
54 str find: "\"" else: {
55 "expected
56 }
57 }
58
59 jsonVal:in <- :target input {
60 idx <- expect: target in: input
61 nextQuoteIdx <- idx +
62 quotedVal: idx
63 }
64
65 evalResponse <- :str {
66 str find: "status" else: {print: missing}
67 statIdx <- expect: "status" in: str
68 status <- requireK
69
70 #{
71 status <-
72 outputs <- parseArray(input)
73 message <-
74 }
75 }
76
77
78 println: str {
79 print: str . "\n"
80 }
81
82 readObject <- :str {
83 expect "{"
84 readObjectContents:
85 expect "}"
86 }
87
88 readObject <- :str {
89 innerStr <- readEnclosed: "{" "}"
90 elems <- split: ","
91 }
92
93 evalResponse <- :str {
94 status <- readValForKey: "status" str
95 if status = "error" {
96
97 } else {
98 if status = "ok" {
99 #{
100 readEvalOutputs:
101 }
102 }
103 }
104
105 }
106
107 expect:in:else <- :target src doElse {
108 src find: target else: {
109 print: "parse error: expected " . target . "!\n"
110 doElse:
111 }
112 }
113
114 getStrForKey:from:else <- :key :src :doElse {
115 idx <- expect: "\"" in: src else: doElse
116 idx + (key length):
117 }
118
119 getEval:else <- :str :fail {
120 statusRest <- getStrForKey: "status" from: str else: fail
121 if (statusRest value) = 0 {
122 outputsRest <- getOutputs: (statusRest rest) else: fail
123 #{
124 value <- #{
125 status <- statusRest.value
126 outputs <- outputsRest.value
127 }
128 rest <- outputsRest.rest
129 }
130 } else {
131 print: "Status was error, message: " . message
132 #{
133 message <- getStrForKey: "message" from: (statusRest rest) else: fail
134 value <- #{
135 status <- statusRest.value
136 message <- outputsRest.value
137 }
138 rest <- outputsRest.rest
139 }
140 }
141 }
142
143
144
40 main <- { 145 main <- {
41 print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n" 146 print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n"
42 print: ((guessRequest: "someId" "someProg") string) . "\n" 147 print: ((guessRequest: "someId" "someProg") string) . "\n"
148
149 exampleEvalResponse <- "{\"status\":\"ok\",\"outputs\":[\"0x0000000000000002\",\"0x01DFFFFFFFFFFFFE\"]}"
150 resp <- getEval: exampleEvalResponse else: {
151 println: "failed to parse response."
152 }
153 println: ((resp value) status)
43 } 154 }
155
44 } 156 }