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