| 90 | } |
| 91 | |
| 92 | bool send(const dap::TypeInfo* requestTypeInfo, |
| 93 | const dap::TypeInfo* responseTypeInfo, |
| 94 | const void* request, |
| 95 | const GenericResponseHandler& responseHandler) override { |
| 96 | int seq = nextSeq++; |
| 97 | |
| 98 | handlers.put(seq, responseTypeInfo, responseHandler); |
| 99 | |
| 100 | dap::json::Serializer s; |
| 101 | if (!s.object([&](dap::FieldSerializer* fs) { |
| 102 | return fs->field("seq", dap::integer(seq)) && |
| 103 | fs->field("type", "request") && |
| 104 | fs->field("command", requestTypeInfo->name()) && |
| 105 | fs->field("arguments", [&](dap::Serializer* s) { |
| 106 | return requestTypeInfo->serialize(s, request); |
| 107 | }); |
| 108 | })) { |
| 109 | return false; |
| 110 | } |
| 111 | return send(s.dump()); |
| 112 | } |
| 113 | |
| 114 | bool send(const dap::TypeInfo* typeinfo, const void* event) override { |
| 115 | dap::json::Serializer s; |