comparison utilities/vampipe-convert.cpp @ 69:91fda9470ee2

Merge from branch jsonrpc
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 06 Oct 2016 14:33:12 +0100
parents a5ba837bca28
children 7bfc07576830
comparison
equal deleted inserted replaced
66:6f160dee1192 69:91fda9470ee2
44 err = "invalid json: " + err; 44 err = "invalid json: " + err;
45 return {}; 45 return {};
46 } 46 }
47 if (!j.is_object()) { 47 if (!j.is_object()) {
48 err = "object expected at top level"; 48 err = "object expected at top level";
49 } else if (!j["type"].is_string()) { 49 } else if (!j["method"].is_string()) {
50 err = "string expected for type field"; 50 err = "string expected for method field";
51 } else if (!j["content"].is_null() && !j["content"].is_object()) { 51 } else if (!j["params"].is_null() && !j["params"].is_object()) {
52 err = "object expected for content field"; 52 err = "object expected for params field";
53 } 53 }
54 return j; 54 return j;
55 } 55 }
56 56
57 Json 57 Json
62 err = "invalid json: " + err; 62 err = "invalid json: " + err;
63 return {}; 63 return {};
64 } 64 }
65 if (!j.is_object()) { 65 if (!j.is_object()) {
66 err = "object expected at top level"; 66 err = "object expected at top level";
67 } else if (!j["success"].is_bool()) { 67 } else {
68 err = "bool expected for success field"; 68 if (!j["result"].is_object()) {
69 } else if (!j["content"].is_object()) { 69 if (!j["error"].is_object()) {
70 err = "object expected for content field"; 70 err = "expected either result or error object";
71 }
72 }
71 } 73 }
72 return j; 74 return j;
73 } 75 }
74 76
75 //!!! Lots of potential for refactoring the conversion classes based 77 //!!! Lots of potential for refactoring the conversion classes based
100 VampJson::BufferSerialisation::Array; 102 VampJson::BufferSerialisation::Array;
101 103
102 switch (rr.type) { 104 switch (rr.type) {
103 105
104 case RRType::List: 106 case RRType::List:
105 VampJson::toVampRequest_List(j, err); // type check only 107 VampJson::toRpcRequest_List(j, err); // type check only
106 break; 108 break;
107 case RRType::Load: 109 case RRType::Load:
108 rr.loadRequest = VampJson::toVampRequest_Load(j, err); 110 rr.loadRequest = VampJson::toRpcRequest_Load(j, err);
109 break; 111 break;
110 case RRType::Configure: 112 case RRType::Configure:
111 rr.configurationRequest = VampJson::toVampRequest_Configure(j, mapper, err); 113 rr.configurationRequest = VampJson::toRpcRequest_Configure(j, mapper, err);
112 break; 114 break;
113 case RRType::Process: 115 case RRType::Process:
114 rr.processRequest = VampJson::toVampRequest_Process(j, mapper, serialisation, err); 116 rr.processRequest = VampJson::toRpcRequest_Process(j, mapper, serialisation, err);
115 break; 117 break;
116 case RRType::Finish: 118 case RRType::Finish:
117 rr.finishRequest = VampJson::toVampRequest_Finish(j, mapper, err); 119 rr.finishRequest = VampJson::toRpcRequest_Finish(j, mapper, err);
118 break; 120 break;
119 case RRType::NotValid: 121 case RRType::NotValid:
120 break; 122 break;
121 } 123 }
122 124
134 VampJson::BufferSerialisation::Array); 136 VampJson::BufferSerialisation::Array);
135 137
136 switch (rr.type) { 138 switch (rr.type) {
137 139
138 case RRType::List: 140 case RRType::List:
139 j = VampJson::fromVampRequest_List(); 141 j = VampJson::fromRpcRequest_List();
140 break; 142 break;
141 case RRType::Load: 143 case RRType::Load:
142 j = VampJson::fromVampRequest_Load(rr.loadRequest); 144 j = VampJson::fromRpcRequest_Load(rr.loadRequest);
143 break; 145 break;
144 case RRType::Configure: 146 case RRType::Configure:
145 j = VampJson::fromVampRequest_Configure(rr.configurationRequest, mapper); 147 j = VampJson::fromRpcRequest_Configure(rr.configurationRequest, mapper);
146 break; 148 break;
147 case RRType::Process: 149 case RRType::Process:
148 j = VampJson::fromVampRequest_Process 150 j = VampJson::fromRpcRequest_Process
149 (rr.processRequest, mapper, serialisation); 151 (rr.processRequest, mapper, serialisation);
150 break; 152 break;
151 case RRType::Finish: 153 case RRType::Finish:
152 j = VampJson::fromVampRequest_Finish(rr.finishRequest, mapper); 154 j = VampJson::fromRpcRequest_Finish(rr.finishRequest, mapper);
153 break; 155 break;
154 case RRType::NotValid: 156 case RRType::NotValid:
155 break; 157 break;
156 } 158 }
157 159
184 rr.errorText = j["errorText"].string_value(); 186 rr.errorText = j["errorText"].string_value();
185 187
186 switch (rr.type) { 188 switch (rr.type) {
187 189
188 case RRType::List: 190 case RRType::List:
189 rr.listResponse = VampJson::toVampResponse_List(j, err); 191 rr.listResponse = VampJson::toRpcResponse_List(j, err);
190 break; 192 break;
191 case RRType::Load: 193 case RRType::Load:
192 rr.loadResponse = VampJson::toVampResponse_Load(j, mapper, err); 194 rr.loadResponse = VampJson::toRpcResponse_Load(j, mapper, err);
193 break; 195 break;
194 case RRType::Configure: 196 case RRType::Configure:
195 rr.configurationResponse = VampJson::toVampResponse_Configure(j, mapper, err); 197 rr.configurationResponse = VampJson::toRpcResponse_Configure(j, mapper, err);
196 break; 198 break;
197 case RRType::Process: 199 case RRType::Process:
198 rr.processResponse = VampJson::toVampResponse_Process(j, mapper, serialisation, err); 200 rr.processResponse = VampJson::toRpcResponse_Process(j, mapper, serialisation, err);
199 break; 201 break;
200 case RRType::Finish: 202 case RRType::Finish:
201 rr.finishResponse = VampJson::toVampResponse_Finish(j, mapper, serialisation, err); 203 rr.finishResponse = VampJson::toRpcResponse_Finish(j, mapper, serialisation, err);
202 break; 204 break;
203 case RRType::NotValid: 205 case RRType::NotValid:
204 break; 206 break;
205 } 207 }
206 208
224 } else { 226 } else {
225 227
226 switch (rr.type) { 228 switch (rr.type) {
227 229
228 case RRType::List: 230 case RRType::List:
229 j = VampJson::fromVampResponse_List(rr.listResponse); 231 j = VampJson::fromRpcResponse_List(rr.listResponse);
230 break; 232 break;
231 case RRType::Load: 233 case RRType::Load:
232 j = VampJson::fromVampResponse_Load(rr.loadResponse, mapper); 234 j = VampJson::fromRpcResponse_Load(rr.loadResponse, mapper);
233 break; 235 break;
234 case RRType::Configure: 236 case RRType::Configure:
235 j = VampJson::fromVampResponse_Configure(rr.configurationResponse, 237 j = VampJson::fromRpcResponse_Configure(rr.configurationResponse,
236 mapper); 238 mapper);
237 break; 239 break;
238 case RRType::Process: 240 case RRType::Process:
239 j = VampJson::fromVampResponse_Process 241 j = VampJson::fromRpcResponse_Process
240 (rr.processResponse, mapper, serialisation); 242 (rr.processResponse, mapper, serialisation);
241 break; 243 break;
242 case RRType::Finish: 244 case RRType::Finish:
243 j = VampJson::fromVampResponse_Finish 245 j = VampJson::fromRpcResponse_Finish
244 (rr.finishResponse, mapper, serialisation); 246 (rr.finishResponse, mapper, serialisation);
245 break; 247 break;
246 case RRType::NotValid: 248 case RRType::NotValid:
247 break; 249 break;
248 } 250 }
256 { 258 {
257 RequestOrResponse rr; 259 RequestOrResponse rr;
258 rr.direction = RequestOrResponse::Request; 260 rr.direction = RequestOrResponse::Request;
259 261
260 ::capnp::InputStreamMessageReader message(buffered); 262 ::capnp::InputStreamMessageReader message(buffered);
261 VampRequest::Reader reader = message.getRoot<VampRequest>(); 263 RpcRequest::Reader reader = message.getRoot<RpcRequest>();
262 264
263 rr.type = VampnProto::getRequestResponseType(reader); 265 rr.type = VampnProto::getRequestResponseType(reader);
264 266
265 switch (rr.type) { 267 switch (rr.type) {
266 268
267 case RRType::List: 269 case RRType::List:
268 VampnProto::readVampRequest_List(reader); // type check only 270 VampnProto::readRpcRequest_List(reader); // type check only
269 break; 271 break;
270 case RRType::Load: 272 case RRType::Load:
271 VampnProto::readVampRequest_Load(rr.loadRequest, reader); 273 VampnProto::readRpcRequest_Load(rr.loadRequest, reader);
272 break; 274 break;
273 case RRType::Configure: 275 case RRType::Configure:
274 VampnProto::readVampRequest_Configure(rr.configurationRequest, 276 VampnProto::readRpcRequest_Configure(rr.configurationRequest,
275 reader, mapper); 277 reader, mapper);
276 break; 278 break;
277 case RRType::Process: 279 case RRType::Process:
278 VampnProto::readVampRequest_Process(rr.processRequest, reader, mapper); 280 VampnProto::readRpcRequest_Process(rr.processRequest, reader, mapper);
279 break; 281 break;
280 case RRType::Finish: 282 case RRType::Finish:
281 VampnProto::readVampRequest_Finish(rr.finishRequest, reader, mapper); 283 VampnProto::readRpcRequest_Finish(rr.finishRequest, reader, mapper);
282 break; 284 break;
283 case RRType::NotValid: 285 case RRType::NotValid:
284 break; 286 break;
285 } 287 }
286 288
289 291
290 void 292 void
291 writeRequestCapnp(RequestOrResponse &rr) 293 writeRequestCapnp(RequestOrResponse &rr)
292 { 294 {
293 ::capnp::MallocMessageBuilder message; 295 ::capnp::MallocMessageBuilder message;
294 VampRequest::Builder builder = message.initRoot<VampRequest>(); 296 RpcRequest::Builder builder = message.initRoot<RpcRequest>();
295 297
296 switch (rr.type) { 298 switch (rr.type) {
297 299
298 case RRType::List: 300 case RRType::List:
299 VampnProto::buildVampRequest_List(builder); 301 VampnProto::buildRpcRequest_List(builder);
300 break; 302 break;
301 case RRType::Load: 303 case RRType::Load:
302 VampnProto::buildVampRequest_Load(builder, rr.loadRequest); 304 VampnProto::buildRpcRequest_Load(builder, rr.loadRequest);
303 break; 305 break;
304 case RRType::Configure: 306 case RRType::Configure:
305 VampnProto::buildVampRequest_Configure(builder, 307 VampnProto::buildRpcRequest_Configure(builder,
306 rr.configurationRequest, mapper); 308 rr.configurationRequest, mapper);
307 break; 309 break;
308 case RRType::Process: 310 case RRType::Process:
309 VampnProto::buildVampRequest_Process(builder, rr.processRequest, mapper); 311 VampnProto::buildRpcRequest_Process(builder, rr.processRequest, mapper);
310 break; 312 break;
311 case RRType::Finish: 313 case RRType::Finish:
312 VampnProto::buildVampRequest_Finish(builder, rr.finishRequest, mapper); 314 VampnProto::buildRpcRequest_Finish(builder, rr.finishRequest, mapper);
313 break; 315 break;
314 case RRType::NotValid: 316 case RRType::NotValid:
315 break; 317 break;
316 } 318 }
317 319
323 { 325 {
324 RequestOrResponse rr; 326 RequestOrResponse rr;
325 rr.direction = RequestOrResponse::Response; 327 rr.direction = RequestOrResponse::Response;
326 328
327 ::capnp::InputStreamMessageReader message(buffered); 329 ::capnp::InputStreamMessageReader message(buffered);
328 VampResponse::Reader reader = message.getRoot<VampResponse>(); 330 RpcResponse::Reader reader = message.getRoot<RpcResponse>();
329 331
330 rr.type = VampnProto::getRequestResponseType(reader); 332 rr.type = VampnProto::getRequestResponseType(reader);
331 rr.success = reader.getSuccess(); 333 rr.success = true;
332 rr.errorText = reader.getErrorText(); 334 rr.errorText = "";
335 int errorCode = 0;
333 336
334 switch (rr.type) { 337 switch (rr.type) {
335 338
336 case RRType::List: 339 case RRType::List:
337 VampnProto::readVampResponse_List(rr.listResponse, reader); 340 VampnProto::readRpcResponse_List(rr.listResponse, reader);
338 break; 341 break;
339 case RRType::Load: 342 case RRType::Load:
340 VampnProto::readVampResponse_Load(rr.loadResponse, reader, mapper); 343 VampnProto::readRpcResponse_Load(rr.loadResponse, reader, mapper);
341 break; 344 break;
342 case RRType::Configure: 345 case RRType::Configure:
343 VampnProto::readVampResponse_Configure(rr.configurationResponse, 346 VampnProto::readRpcResponse_Configure(rr.configurationResponse,
344 reader, mapper); 347 reader, mapper);
345 break; 348 break;
346 case RRType::Process: 349 case RRType::Process:
347 VampnProto::readVampResponse_Process(rr.processResponse, reader, mapper); 350 VampnProto::readRpcResponse_Process(rr.processResponse, reader, mapper);
348 break; 351 break;
349 case RRType::Finish: 352 case RRType::Finish:
350 VampnProto::readVampResponse_Finish(rr.finishResponse, reader, mapper); 353 VampnProto::readRpcResponse_Finish(rr.finishResponse, reader, mapper);
351 break; 354 break;
352 case RRType::NotValid: 355 case RRType::NotValid:
356 // error
357 rr.success = false;
358 VampnProto::readRpcResponse_Error(errorCode, rr.errorText, reader);
353 break; 359 break;
354 } 360 }
355 361
356 return rr; 362 return rr;
357 } 363 }
358 364
359 void 365 void
360 writeResponseCapnp(RequestOrResponse &rr) 366 writeResponseCapnp(RequestOrResponse &rr)
361 { 367 {
362 ::capnp::MallocMessageBuilder message; 368 ::capnp::MallocMessageBuilder message;
363 VampResponse::Builder builder = message.initRoot<VampResponse>(); 369 RpcResponse::Builder builder = message.initRoot<RpcResponse>();
364 370
365 if (!rr.success) { 371 if (!rr.success) {
366 372
367 VampnProto::buildVampResponse_Error(builder, rr.errorText, rr.type); 373 VampnProto::buildRpcResponse_Error(builder, rr.errorText, rr.type);
368 374
369 } else { 375 } else {
370 376
371 switch (rr.type) { 377 switch (rr.type) {
372 378
373 case RRType::List: 379 case RRType::List:
374 VampnProto::buildVampResponse_List(builder, rr.listResponse); 380 VampnProto::buildRpcResponse_List(builder, rr.listResponse);
375 break; 381 break;
376 case RRType::Load: 382 case RRType::Load:
377 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper); 383 VampnProto::buildRpcResponse_Load(builder, rr.loadResponse, mapper);
378 break; 384 break;
379 case RRType::Configure: 385 case RRType::Configure:
380 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse, mapper); 386 VampnProto::buildRpcResponse_Configure(builder, rr.configurationResponse, mapper);
381 break; 387 break;
382 case RRType::Process: 388 case RRType::Process:
383 VampnProto::buildVampResponse_Process(builder, rr.processResponse, mapper); 389 VampnProto::buildRpcResponse_Process(builder, rr.processResponse, mapper);
384 break; 390 break;
385 case RRType::Finish: 391 case RRType::Finish:
386 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse, mapper); 392 VampnProto::buildRpcResponse_Finish(builder, rr.finishResponse, mapper);
387 break; 393 break;
388 case RRType::NotValid: 394 case RRType::NotValid:
389 break; 395 break;
390 } 396 }
391 } 397 }