MCPcopy Create free account
hub / github.com/Kitware/CMake / processRequest

Method processRequest

Utilities/cmcppdap/src/session.cpp:319–389  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 14

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

Tested by

no test coverage detected