32 auto wrapped = std::make_tuple(
std::move(command));
35 msgpack::sbuffer send_buffer;
36 msgpack::pack(send_buffer, wrapped);
39 constexpr uint64_t timeout_ns = 30'000'000'000ULL;
40 if (!
client_->send(send_buffer.data(), send_buffer.size(), timeout_ns)) {
41 throw std::runtime_error(
"Failed to send command to server");
45 auto response_span =
client_->receive(timeout_ns);
46 if (response_span.empty()) {
47 throw std::runtime_error(
"Empty response from server");
51 auto unpacked = msgpack::unpack(
reinterpret_cast<const char*
>(response_span.data()), response_span.size());
52 auto response_obj = unpacked.get();
55 response_obj.convert(response);
58 client_->release(response_span.size());
61 return std::move(response).
visit([](
auto&& resp) ->
typename Cmd::Response {
65 throw std::runtime_error(
"Server error: " + resp.message);
69 throw std::runtime_error(
"Unexpected response type from server");