Mercurial > repos > icfp2013
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 } |