comparison utilities/vampipe-convert.cpp @ 27:cc85c2851605

Wire up Cap'n Proto reading, plus some build and arg processing fixes
author Chris Cannam <c.cannam@qmul.ac.uk>
date Tue, 24 May 2016 12:00:38 +0100
parents 5b9690d18241
children 7062a3bebaa3
comparison
equal deleted inserted replaced
26:13393bdfc7ef 27:cc85c2851605
138 rr.type = RRType::NotValid; 138 rr.type = RRType::NotValid;
139 return rr; 139 return rr;
140 } 140 }
141 141
142 Json j = convertRequestJson(input); 142 Json j = convertRequestJson(input);
143
143 rr.type = VampJson::getRequestResponseType(j); 144 rr.type = VampJson::getRequestResponseType(j);
144 145
145 if (rr.type == RRType::Load) { 146 switch (rr.type) {
147
148 case RRType::List:
149 VampJson::toVampRequest_List(j); // type check only
150 break;
151 case RRType::Load:
146 rr.loadRequest = VampJson::toVampRequest_Load(j); 152 rr.loadRequest = VampJson::toVampRequest_Load(j);
147 153 break;
148 } else if (rr.type == RRType::Configure) { 154 case RRType::Configure:
149 rr.configurationRequest = VampJson::toVampRequest_Configure(j, rr.mapper); 155 rr.configurationRequest =
150 156 VampJson::toVampRequest_Configure(j, rr.mapper);
151 } else if (rr.type == RRType::Process) { 157 break;
158 case RRType::Process:
152 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper); 159 rr.processRequest = VampJson::toVampRequest_Process(j, rr.mapper);
153 160 break;
154 } else if (rr.type == RRType::Finish) { 161 case RRType::Finish:
155 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper); 162 rr.finishPlugin = VampJson::toVampRequest_Finish(j, rr.mapper);
163 break;
164 case RRType::NotValid:
165 break;
156 } 166 }
157 167
158 return rr; 168 return rr;
159 } 169 }
160 170
161 void 171 void
162 writeRequestJson(RequestOrResponse &rr) 172 writeRequestJson(RequestOrResponse &rr)
163 { 173 {
164 Json j; 174 Json j;
165 175
166 if (rr.type == RRType::List) { 176 switch (rr.type) {
177
178 case RRType::List:
167 j = VampJson::fromVampRequest_List(); 179 j = VampJson::fromVampRequest_List();
168 180 break;
169 } else if (rr.type == RRType::Load) { 181 case RRType::Load:
170 j = VampJson::fromVampRequest_Load(rr.loadRequest); 182 j = VampJson::fromVampRequest_Load(rr.loadRequest);
171 183 break;
172 } else if (rr.type == RRType::Configure) { 184 case RRType::Configure:
173 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, rr.mapper); 185 j = VampJson::fromVampRequest_Configure(rr.configurationRequest,
174 186 rr.mapper);
175 } else if (rr.type == RRType::Process) { 187 break;
188 case RRType::Process:
176 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper); 189 j = VampJson::fromVampRequest_Process(rr.processRequest, rr.mapper);
177 190 break;
178 } else if (rr.type == RRType::Finish) { 191 case RRType::Finish:
179 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper); 192 j = VampJson::fromVampRequest_Finish(rr.finishPlugin, rr.mapper);
193 break;
194 case RRType::NotValid:
195 break;
180 } 196 }
181 197
182 cout << j.dump() << endl; 198 cout << j.dump() << endl;
183 } 199 }
184 200
193 rr.type = RRType::NotValid; 209 rr.type = RRType::NotValid;
194 return rr; 210 return rr;
195 } 211 }
196 212
197 Json j = convertResponseJson(input); 213 Json j = convertResponseJson(input);
214
198 rr.type = VampJson::getRequestResponseType(j); 215 rr.type = VampJson::getRequestResponseType(j);
199 216
200 if (rr.type == RRType::List) { 217 switch (rr.type) {
218
219 case RRType::List:
201 rr.listResponse = VampJson::toVampResponse_List(j); 220 rr.listResponse = VampJson::toVampResponse_List(j);
202 221 break;
203 } else if (rr.type == RRType::Load) { 222 case RRType::Load:
204 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper); 223 rr.loadResponse = VampJson::toVampResponse_Load(j, rr.mapper);
205 224 break;
206 } else if (rr.type == RRType::Configure) { 225 case RRType::Configure:
207 rr.configurationResponse = VampJson::toVampResponse_Configure(j); 226 rr.configurationResponse = VampJson::toVampResponse_Configure(j);
208 227 break;
209 } else if (rr.type == RRType::Process) { 228 case RRType::Process:
210 rr.processResponse = VampJson::toVampResponse_Process(j); 229 rr.processResponse = VampJson::toVampResponse_Process(j);
211 230 break;
212 } else if (rr.type == RRType::Finish) { 231 case RRType::Finish:
213 rr.finishResponse = VampJson::toVampResponse_Finish(j); 232 rr.finishResponse = VampJson::toVampResponse_Finish(j);
233 break;
234 case RRType::NotValid:
235 break;
214 } 236 }
215 237
216 return rr; 238 return rr;
217 } 239 }
218 240
219 void 241 void
220 writeResponseJson(RequestOrResponse &rr) 242 writeResponseJson(RequestOrResponse &rr)
221 { 243 {
222 Json j; 244 Json j;
223 245
224 if (rr.type == RRType::List) { 246 switch (rr.type) {
247
248 case RRType::List:
225 j = VampJson::fromVampResponse_List("", rr.listResponse); 249 j = VampJson::fromVampResponse_List("", rr.listResponse);
226 250 break;
227 } else if (rr.type == RRType::Load) { 251 case RRType::Load:
228 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper); 252 j = VampJson::fromVampResponse_Load(rr.loadResponse, rr.mapper);
229 } 253 break;
230 254 case RRType::Configure:
231 //!!! 255 j = VampJson::fromVampResponse_Configure(rr.configurationResponse);
256 break;
257 case RRType::Process:
258 j = VampJson::fromVampResponse_Process(rr.processResponse);
259 break;
260 case RRType::Finish:
261 j = VampJson::fromVampResponse_Finish(rr.finishResponse);
262 break;
263 case RRType::NotValid:
264 break;
265 }
232 266
233 cout << j.dump() << endl; 267 cout << j.dump() << endl;
268 }
269
270 RequestOrResponse
271 readRequestCapnp()
272 {
273 RequestOrResponse rr;
274 rr.direction = RequestOrResponse::Request;
275
276 ::capnp::PackedFdMessageReader message(0); // stdin
277 VampRequest::Reader reader = message.getRoot<VampRequest>();
278
279 rr.type = VampnProto::getRequestResponseType(reader);
280
281 switch (rr.type) {
282
283 case RRType::List:
284 VampnProto::readVampRequest_List(reader); // type check only
285 break;
286 case RRType::Load:
287 VampnProto::readVampRequest_Load(rr.loadRequest, reader);
288 break;
289 case RRType::Configure:
290 VampnProto::readVampRequest_Configure(rr.configurationRequest, reader,
291 rr.mapper);
292 break;
293 case RRType::Process:
294 VampnProto::readVampRequest_Process(rr.processRequest, reader,
295 rr.mapper);
296 break;
297 case RRType::Finish:
298 VampnProto::readVampRequest_Finish(rr.finishPlugin, reader,
299 rr.mapper);
300 break;
301 case RRType::NotValid:
302 break;
303 }
304
305 return rr;
306 }
307
308 RequestOrResponse
309 readResponseCapnp()
310 {
311 RequestOrResponse rr;
312 rr.direction = RequestOrResponse::Response;
313
314 ::capnp::PackedFdMessageReader message(0); // stdin
315 VampResponse::Reader reader = message.getRoot<VampResponse>();
316
317 rr.type = VampnProto::getRequestResponseType(reader);
318
319 switch (rr.type) {
320
321 case RRType::List:
322 VampnProto::readVampResponse_List(rr.listResponse, reader);
323 break;
324 case RRType::Load:
325 VampnProto::readVampResponse_Load(rr.loadResponse, reader, rr.mapper);
326 break;
327 case RRType::Configure:
328 VampnProto::readVampResponse_Configure(rr.configurationResponse,
329 reader);
330 break;
331 case RRType::Process:
332 VampnProto::readVampResponse_Process(rr.processResponse, reader);
333 break;
334 case RRType::Finish:
335 VampnProto::readVampResponse_Finish(rr.finishResponse, reader);
336 break;
337 case RRType::NotValid:
338 break;
339 }
340
341 return rr;
234 } 342 }
235 343
236 RequestOrResponse 344 RequestOrResponse
237 readInput(string format, RequestOrResponse::Direction direction) 345 readInput(string format, RequestOrResponse::Direction direction)
238 { 346 {
240 if (direction == RequestOrResponse::Request) { 348 if (direction == RequestOrResponse::Request) {
241 return readRequestJson(); 349 return readRequestJson();
242 } else { 350 } else {
243 return readResponseJson(); 351 return readResponseJson();
244 } 352 }
353 } else if (format == "capnp") {
354 if (direction == RequestOrResponse::Request) {
355 return readRequestCapnp();
356 } else {
357 return readResponseCapnp();
358 }
245 } else { 359 } else {
246 throw runtime_error("unknown or unimplemented format \"" + format + "\""); 360 throw runtime_error("unknown input format \"" + format + "\"");
247 } 361 }
248 } 362 }
249 363
250 void 364 void
251 writeOutput(string format, RequestOrResponse &rr) 365 writeOutput(string format, RequestOrResponse &rr)
255 writeRequestJson(rr); 369 writeRequestJson(rr);
256 } else { 370 } else {
257 writeResponseJson(rr); 371 writeResponseJson(rr);
258 } 372 }
259 } else { 373 } else {
260 throw runtime_error("unknown or unimplemented format \"" + format + "\""); 374 throw runtime_error("unknown output format \"" + format + "\"");
261 } 375 }
262 } 376 }
263 377
264 int main(int argc, char **argv) 378 int main(int argc, char **argv)
265 { 379 {
266 if (argc < 2) { 380 if (argc < 2) {
267 usage(); 381 usage();
268 } 382 }
269 383
270 string informat = "json", outformat = "json"; 384 string informat = "json", outformat = "json";
271 RequestOrResponse::Direction direction; 385 RequestOrResponse::Direction direction = RequestOrResponse::Request;
272 bool haveDirection = false; 386 bool haveDirection = false;
273 387
274 for (int i = 1; i < argc; ++i) { 388 for (int i = 1; i < argc; ++i) {
275 389
276 string arg = argv[i]; 390 string arg = argv[i];
277 bool final = (i + 1 == argc); 391 bool final = (i + 1 == argc);
278 392
279 if (arg == "-i") { 393 if (arg == "-i") {
280 if (informat != "" || final) usage(); 394 if (final) usage();
281 else informat = argv[++i]; 395 else informat = argv[++i];
282 396
283 } else if (arg == "-o") { 397 } else if (arg == "-o") {
284 if (outformat != "" || final) usage(); 398 if (final) usage();
285 else outformat = argv[++i]; 399 else outformat = argv[++i];
286 400
287 } else if (arg == "request") { 401 } else if (arg == "request") {
288 direction = RequestOrResponse::Request; 402 direction = RequestOrResponse::Request;
289 haveDirection = true; 403 haveDirection = true;