diff --git a/libuavcan/include/uavcan/service_client.hpp b/libuavcan/include/uavcan/service_client.hpp index 093a120cb2..bc42b5eff6 100644 --- a/libuavcan/include/uavcan/service_client.hpp +++ b/libuavcan/include/uavcan/service_client.hpp @@ -40,6 +40,19 @@ struct ServiceCallResult bool isSuccessful() const { return status == Success; } }; +template +static Stream& operator<<(Stream& s, const ServiceCallResult& scr) +{ + s << "# Service call result [" << DataType::getDataTypeFullName() << "] " + << (scr.isSuccessful() ? "OK" : "FAILURE") + << " server_node_id=" << int(scr.server_node_id.get()) << "\n"; + if (scr.isSuccessful()) + s << scr.response; + else + s << "# (no data)"; + return s; +} + template &)> class ServiceClient : diff --git a/libuavcan/test/service_client.cpp b/libuavcan/test/service_client.cpp index 461650864a..8a851be423 100644 --- a/libuavcan/test/service_client.cpp +++ b/libuavcan/test/service_client.cpp @@ -22,11 +22,7 @@ struct ServiceCallResultHandler void handleResponse(const uavcan::ServiceCallResult& result) { - // TODO: stream uavcan::ServiceCallResult<> directly - std::cout << "Service call result [" << DataType::getDataTypeFullName() << "], success=" - << result.isSuccessful() << ":\n"; - std::cout << result.response << std::endl; - + std::cout << result << std::endl; last_status = result.status; last_response = result.response; last_server_node_id = result.server_node_id;