diff --git a/examples/client/main.cpp b/examples/client/main.cpp index fe43de1..6e5abaa 100644 --- a/examples/client/main.cpp +++ b/examples/client/main.cpp @@ -338,16 +338,14 @@ void test_callback() { return; } - req_result result(data); - auto str = result.as(); + auto str = as(data); std::cout << "echo " << str << '\n'; }, test); std::string test1 = "test" + std::to_string(i + 2); //zero means no timeout check, no param means using default timeout(5s) client.async_call<0>("echo", [](const boost::system::error_code & ec, string_view data) { - req_result result(data); - auto str = result.as(); + auto str = as(data); std::cout << "echo " << str << '\n'; }, test1); } diff --git a/include/client_util.hpp b/include/client_util.hpp index 1df0a4a..5afc72d 100644 --- a/include/client_util.hpp +++ b/include/client_util.hpp @@ -30,7 +30,16 @@ namespace rest_rpc { template inline T get_result(string_view result) { rpc_service::msgpack_codec codec; - auto err_tp = codec.unpack>(result.data(), result.size()); - return std::get<1>(err_tp); + auto tp = codec.unpack>(result.data(), result.size()); + return std::get<1>(tp); + } + + template + inline T as(string_view result) { + if (has_error(result)) { + throw std::logic_error("rpc error"); + } + + return get_result(result); } } \ No newline at end of file