Mercurial > hg > piper-cpp
comparison utilities/vampipe-convert.cpp @ 25:5b9690d18241
Pull up type determination into VampJson
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 24 May 2016 10:43:34 +0100 |
parents | 533ca5ca3404 |
children | cc85c2851605 |
comparison
equal
deleted
inserted
replaced
24:533ca5ca3404 | 25:5b9690d18241 |
---|---|
60 { | 60 { |
61 public: | 61 public: |
62 enum Direction { | 62 enum Direction { |
63 Request, Response | 63 Request, Response |
64 }; | 64 }; |
65 enum Type { | |
66 List, Load, Configure, Process, Finish, Eof | |
67 }; | |
68 | |
69 static Type typeForName(string name) { | |
70 if (name == "list") return List; | |
71 else if (name == "load") return Load; | |
72 else if (name == "configure") return Configure; | |
73 else if (name == "process") return Process; | |
74 else if (name == "finish") return Finish; | |
75 else if (name == "eof") return Eof; | |
76 else { | |
77 throw runtime_error("unknown or unexpected request/response type \"" + | |
78 name + "\""); | |
79 } | |
80 } | |
81 | 65 |
82 RequestOrResponse() : // nothing by default | 66 RequestOrResponse() : // nothing by default |
83 direction(Request), | 67 direction(Request), |
84 type(Eof), | 68 type(RRType::NotValid), |
85 success(false), | 69 success(false), |
86 finishPlugin(0) { } | 70 finishPlugin(0) { } |
87 | 71 |
88 Direction direction; | 72 Direction direction; |
89 Type type; | 73 RRType type; |
90 bool success; | 74 bool success; |
91 string errorText; | 75 string errorText; |
92 | 76 |
93 PreservingPluginHandleMapper mapper; | 77 PreservingPluginHandleMapper mapper; |
94 | 78 |
149 RequestOrResponse rr; | 133 RequestOrResponse rr; |
150 rr.direction = RequestOrResponse::Request; | 134 rr.direction = RequestOrResponse::Request; |
151 | 135 |
152 string input; | 136 string input; |
153 if (!getline(cin, input)) { | 137 if (!getline(cin, input)) { |
154 rr.type = RequestOrResponse::Eof; | 138 rr.type = RRType::NotValid; |
155 return rr; | 139 return rr; |
156 } | 140 } |
157 | 141 |
158 Json j = convertRequestJson(input); | 142 Json j = convertRequestJson(input); |
159 string type = j["type"].string_value(); | 143 rr.type = VampJson::getRequestResponseType(j); |
160 rr.type = RequestOrResponse::typeForName(type); | 144 |
161 | 145 if (rr.type == RRType::Load) { |
162 if (rr.type == RequestOrResponse::Load) { | |
163 rr.loadRequest = VampJson::toVampRequest_Load(j); | 146 rr.loadRequest = VampJson::toVampRequest_Load(j); |
164 | 147 |
165 } else if (rr.type == RequestOrResponse::Configure) { | 148 } else if (rr.type == RRType::Configure) { |
166 rr.configurationRequest = VampJson::toVampRequest_Configure(j, rr.mapper); | 149 rr.configurationRequest = VampJson::toVampRequest_Configure(j, rr.mapper); |
167 | 150 |
168 } else if (rr.type == RequestOrResponse::Process) { | 151 } else if (rr.type == RRType::Process) { |
169 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper); | 152 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper); |
170 | 153 |
171 } else if (rr.type == RequestOrResponse::Finish) { | 154 } else if (rr.type == RRType::Finish) { |
172 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper); | 155 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper); |
173 } | 156 } |
174 | 157 |
175 return rr; | 158 return rr; |
176 } | 159 } |
178 void | 161 void |
179 writeRequestJson(RequestOrResponse &rr) | 162 writeRequestJson(RequestOrResponse &rr) |
180 { | 163 { |
181 Json j; | 164 Json j; |
182 | 165 |
183 if (rr.type == RequestOrResponse::List) { | 166 if (rr.type == RRType::List) { |
184 j = VampJson::fromVampRequest_List(); | 167 j = VampJson::fromVampRequest_List(); |
185 | 168 |
186 } else if (rr.type == RequestOrResponse::Load) { | 169 } else if (rr.type == RRType::Load) { |
187 j = VampJson::fromVampRequest_Load(rr.loadRequest); | 170 j = VampJson::fromVampRequest_Load(rr.loadRequest); |
188 | 171 |
189 } else if (rr.type == RequestOrResponse::Configure) { | 172 } else if (rr.type == RRType::Configure) { |
190 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, rr.mapper); | 173 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, rr.mapper); |
191 | 174 |
192 } else if (rr.type == RequestOrResponse::Process) { | 175 } else if (rr.type == RRType::Process) { |
193 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper); | 176 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper); |
194 | 177 |
195 } else if (rr.type == RequestOrResponse::Finish) { | 178 } else if (rr.type == RRType::Finish) { |
196 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper); | 179 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper); |
197 } | 180 } |
198 | 181 |
199 cout << j.dump() << endl; | 182 cout << j.dump() << endl; |
200 } | 183 } |
205 RequestOrResponse rr; | 188 RequestOrResponse rr; |
206 rr.direction = RequestOrResponse::Response; | 189 rr.direction = RequestOrResponse::Response; |
207 | 190 |
208 string input; | 191 string input; |
209 if (!getline(cin, input)) { | 192 if (!getline(cin, input)) { |
210 rr.type = RequestOrResponse::Eof; | 193 rr.type = RRType::NotValid; |
211 return rr; | 194 return rr; |
212 } | 195 } |
213 | 196 |
214 Json j = convertResponseJson(input); | 197 Json j = convertResponseJson(input); |
215 string type = j["type"].string_value(); | 198 rr.type = VampJson::getRequestResponseType(j); |
216 rr.type = RequestOrResponse::typeForName(type); | 199 |
217 | 200 if (rr.type == RRType::List) { |
218 if (rr.type == RequestOrResponse::List) { | |
219 rr.listResponse = VampJson::toVampResponse_List(j); | 201 rr.listResponse = VampJson::toVampResponse_List(j); |
220 | 202 |
221 } else if (rr.type == RequestOrResponse::Load) { | 203 } else if (rr.type == RRType::Load) { |
222 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper); | 204 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper); |
223 | 205 |
224 } else if (rr.type == RequestOrResponse::Configure) { | 206 } else if (rr.type == RRType::Configure) { |
225 rr.configurationResponse = VampJson::toVampResponse_Configure(j); | 207 rr.configurationResponse = VampJson::toVampResponse_Configure(j); |
226 | 208 |
227 } else if (rr.type == RequestOrResponse::Process) { | 209 } else if (rr.type == RRType::Process) { |
228 rr.processResponse = VampJson::toVampResponse_Process(j); | 210 rr.processResponse = VampJson::toVampResponse_Process(j); |
229 | 211 |
230 } else if (rr.type == RequestOrResponse::Finish) { | 212 } else if (rr.type == RRType::Finish) { |
231 rr.finishResponse = VampJson::toVampResponse_Finish(j); | 213 rr.finishResponse = VampJson::toVampResponse_Finish(j); |
232 } | 214 } |
233 | 215 |
234 return rr; | 216 return rr; |
235 } | 217 } |
237 void | 219 void |
238 writeResponseJson(RequestOrResponse &rr) | 220 writeResponseJson(RequestOrResponse &rr) |
239 { | 221 { |
240 Json j; | 222 Json j; |
241 | 223 |
242 if (rr.type == RequestOrResponse::List) { | 224 if (rr.type == RRType::List) { |
243 j = VampJson::fromVampResponse_List("", rr.listResponse); | 225 j = VampJson::fromVampResponse_List("", rr.listResponse); |
244 | 226 |
245 } else if (rr.type == RequestOrResponse::Load) { | 227 } else if (rr.type == RRType::Load) { |
246 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper); | 228 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper); |
247 } | 229 } |
230 | |
231 //!!! | |
248 | 232 |
249 cout << j.dump() << endl; | 233 cout << j.dump() << endl; |
250 } | 234 } |
251 | 235 |
252 RequestOrResponse | 236 RequestOrResponse |
320 while (true) { | 304 while (true) { |
321 | 305 |
322 try { | 306 try { |
323 | 307 |
324 RequestOrResponse rr = readInput(informat, direction); | 308 RequestOrResponse rr = readInput(informat, direction); |
325 if (rr.type == RequestOrResponse::Eof) break; | 309 if (rr.type == RRType::NotValid) break; |
326 writeOutput(outformat, rr); | 310 writeOutput(outformat, rr); |
327 | 311 |
328 } catch (std::exception &e) { | 312 } catch (std::exception &e) { |
329 cerr << "Error: " << e.what() << endl; | 313 cerr << "Error: " << e.what() << endl; |
330 exit(1); | 314 exit(1); |