Files
rest_rpc/include/client_util.hpp
T
qicosmos 6610d4e374 connection timeout seconds to milliseconds;
return exactly unpack error message.
2019-06-01 09:48:05 +08:00

47 lines
1.1 KiB
C++

#pragma once
#include <tuple>
#if __cplusplus > 201402L
#include <string_view>
using string_view = std::string_view;
#else
#ifdef ASIO_STANDALONE
#include "string_view.hpp"
using namespace nonstd;
#else
#include <boost/utility/string_view.hpp>
using string_view = boost::string_view;
#endif
#endif
#include "codec.h"
namespace rest_rpc {
inline bool has_error(string_view result) {
if (result.empty()) {
return true;
}
rpc_service::msgpack_codec codec;
auto tp = codec.unpack<std::tuple<int>>(result.data(), result.size());
return std::get<0>(tp) != 0;
}
template<typename T>
inline T get_result(string_view result) {
rpc_service::msgpack_codec codec;
auto tp = codec.unpack<std::tuple<int, T>>(result.data(), result.size());
return std::get<1>(tp);
}
template<typename T>
inline T as(string_view result) {
if (has_error(result)) {
rpc_service::msgpack_codec codec;
auto tp = codec.unpack<std::tuple<int, std::string>>(result.data(), result.size());
throw std::logic_error(std::get<1>(tp));
}
return get_result<T>(result);
}
}