5#include "api/datatype.pb.h"
19std::optional<T> parse_protobuf_message(zmq::message_t message) {
20 static_assert(std::is_base_of<google::protobuf::Message, T>::value,
21 "T must be a protobuf message type");
22 if (message.size() == 0) {
29 bool success = output.ParseFromArray(message.data(),
static_cast<int>(message.size()));
47zmq::message_t protobuf_to_zmq_message(
const T& message) {
48 static_assert(std::is_base_of<google::protobuf::Message, T>::value,
49 "T must be a protobuf message type");
50 const size_t message_size = message.ByteSizeLong();
51 zmq::message_t out_message(message_size);
52 if (!message.SerializeToArray(out_message.data(), message_size)) {
53 return zmq::message_t(0);
67std::string pack_tensor_data(
const std::vector<T>& data) {
68 static_assert(std::is_arithmetic_v<T>,
"Only arithmetic types are supported");
74 result.resize(data.size() *
sizeof(T));
75 std::memcpy(result.data(), data.data(), result.size());
88std::string pack_tensor_data(std::initializer_list<T> data) {
89 return pack_tensor_data(std::vector<T>(data));