MCPcopy Create free account
hub / github.com/Codeya-IDE/deepin-ide / processRequest

Method processRequest

3rdparty/cppdap/src/session.cpp:325–397  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

323 }
324
325 Payload processRequest(dap::json::Deserializer* d, dap::integer sequence) {
326 dap::string command;
327 if (!d->field("command", &command)) {
328 handlers.error("Request missing string 'command' field");
329 return {};
330 }
331
332 const dap::TypeInfo* typeinfo;
333 GenericRequestHandler handler;
334 std::tie(typeinfo, handler) = handlers.request(command);
335 if (!typeinfo) {
336 handlers.error("No request handler registered for command '%s'",
337 command.c_str());
338 return {};
339 }
340
341 auto data = new uint8_t[typeinfo->size()];
342 typeinfo->construct(data);
343
344 if (!d->field("arguments", [&](dap::Deserializer* d) {
345 return typeinfo->deserialize(d, data);
346 })) {
347 handlers.error("Failed to deserialize request");
348 typeinfo->destruct(data);
349 delete[] data;
350 return {};
351 }
352
353 return [=] {
354 handler(
355 data,
356 [=](const dap::TypeInfo* typeinfo, const void* data) {
357 // onSuccess
358 dap::json::Serializer s;
359 s.object([&](dap::FieldSerializer* fs) {
360 return fs->field("seq", dap::integer(nextSeq++)) &&
361 fs->field("type", "response") &&
362 fs->field("request_seq", sequence) &&
363 fs->field("success", dap::boolean(true)) &&
364 fs->field("command", command) &&
365 fs->field("body", [&](dap::Serializer* s) {
366 return typeinfo->serialize(s, data);
367 });
368 });
369 //printf("%s\n", s.dump().c_str());
370 send(s.dump());
371
372 if (auto handler = handlers.responseSent(typeinfo)) {
373 handler(data, nullptr);
374 }
375 },
376 [=](const dap::TypeInfo* typeinfo, const dap::Error& error) {
377 // onError
378 dap::json::Serializer s;
379 s.object([&](dap::FieldSerializer* fs) {
380 return fs->field("seq", dap::integer(nextSeq++)) &&
381 fs->field("type", "response") &&
382 fs->field("request_seq", sequence) &&

Callers

nothing calls this directly

Calls 14

integerClass · 0.85
booleanClass · 0.85
errorMethod · 0.80
c_strMethod · 0.80
responseSentMethod · 0.80
fieldMethod · 0.45
requestMethod · 0.45
sizeMethod · 0.45
constructMethod · 0.45
deserializeMethod · 0.45
destructMethod · 0.45
objectMethod · 0.45

Tested by

no test coverage detected