Mercurial > hg > piper-cpp
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; |