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