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