C++ YASMIN (Yet Another State MachINe)
Loading...
Searching...
No Matches
interface_serialization.hpp
Go to the documentation of this file.
1// Copyright (C) 2026 Maik Knof
2//
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU General Public License as published by
5// the Free Software Foundation, either version 3 of the License, or
6// (at your option) any later version.
7//
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU General Public License for more details.
12//
13// You should have received a copy of the GNU General Public License
14// along with this program. If not, see <https://www.gnu.org/licenses/>.
15
16#ifndef YASMIN_ROS__INTERFACE_SERIALIZATION_HPP_
17#define YASMIN_ROS__INTERFACE_SERIALIZATION_HPP_
18
19#include <cstring>
20#include <stdexcept>
21#include <string>
22#include <vector>
23
24#include <rclcpp/serialization.hpp>
25#include <rclcpp/serialized_message.hpp>
26
27namespace yasmin_ros {
28
37template <typename InterfaceT>
38std::vector<uint8_t> serialize_interface(const InterfaceT &interface_value) {
39 rclcpp::Serialization<InterfaceT> serializer;
40 rclcpp::SerializedMessage serialized_message;
41 serializer.serialize_message(&interface_value, &serialized_message);
42
43 const auto &rcl_serialized_message =
44 serialized_message.get_rcl_serialized_message();
45
46 return std::vector<uint8_t>(rcl_serialized_message.buffer,
47 rcl_serialized_message.buffer +
48 rcl_serialized_message.buffer_length);
49}
50
59template <typename InterfaceT>
60InterfaceT deserialize_interface(const std::vector<uint8_t> &serialized_data) {
61 rclcpp::Serialization<InterfaceT> serializer;
62 rclcpp::SerializedMessage serialized_message(serialized_data.size());
63
64 auto &rcl_serialized_message =
65 serialized_message.get_rcl_serialized_message();
66
67 if (!serialized_data.empty()) {
68 std::memcpy(rcl_serialized_message.buffer, serialized_data.data(),
69 serialized_data.size());
70 }
71
72 rcl_serialized_message.buffer_length = serialized_data.size();
73
74 InterfaceT interface_value;
75 serializer.deserialize_message(&serialized_message, &interface_value);
76
77 return interface_value;
78}
79
80} // namespace yasmin_ros
81
82#endif // YASMIN_ROS__INTERFACE_SERIALIZATION_HPP_
Definition action_state.hpp:37
InterfaceT deserialize_interface(const std::vector< uint8_t > &serialized_data)
Deserialize a ROS 2 interface instance from a byte array.
Definition interface_serialization.hpp:60
std::vector< uint8_t > serialize_interface(const InterfaceT &interface_value)
Serialize a ROS 2 interface instance to a byte array.
Definition interface_serialization.hpp:38