Compare commits

...

2 Commits

Author SHA1 Message Date
Tomoya Fujita
b0b2218f88 update docstring.
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
2025-03-29 14:40:04 -07:00
Tomoya Fujita
804ae9d007 Harden rclcpp_action::convert().
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
2025-03-28 15:16:31 -07:00
3 changed files with 20 additions and 2 deletions

View File

@@ -39,12 +39,22 @@ RCLCPP_ACTION_PUBLIC
std::string
to_string(const GoalUUID & goal_id);
// Convert C++ GoalID to rcl_action_goal_info_t
/// Convert C++ GoalID to rcl_action_goal_info_t
/**
* \param[in] goal_id C++ GoalUUID reference to be converted.
* \param[inout] info rcl_action_goal_info_t structure to be filled.
* \throws std::runtime_error if info is null.
*/
RCLCPP_ACTION_PUBLIC
void
convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info);
// Convert rcl_action_goal_info_t to C++ GoalID
/// Convert rcl_action_goal_info_t to C++ GoalID
/**
* \param[in] info rcl_action_goal_info_t reference to be converted.
* \param[inout] goal_id C++ GoalUUID structure to be filled.
* \throws std::runtime_error if goal_id is null.
*/
RCLCPP_ACTION_PUBLIC
void
convert(const rcl_action_goal_info_t & info, GoalUUID * goal_id);

View File

@@ -41,6 +41,9 @@ to_string(const GoalUUID & goal_id)
void
convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info)
{
if (info == nullptr) {
throw std::invalid_argument("info is nullptr");
}
for (size_t i = 0; i < UUID_SIZE; ++i) {
info->goal_id.uuid[i] = goal_id[i];
}
@@ -49,6 +52,9 @@ convert(const GoalUUID & goal_id, rcl_action_goal_info_t * info)
void
convert(const rcl_action_goal_info_t & info, GoalUUID * goal_id)
{
if (goal_id == nullptr) {
throw std::invalid_argument("goal_id is nullptr");
}
for (size_t i = 0; i < UUID_SIZE; ++i) {
(*goal_id)[i] = info.goal_id.uuid[i];
}

View File

@@ -41,6 +41,7 @@ TEST(TestActionTypes, goal_uuid_to_rcl_action_goal_info) {
for (uint8_t i = 0; i < UUID_SIZE; ++i) {
goal_id[i] = i;
}
ASSERT_THROW(rclcpp_action::convert(goal_id, nullptr), std::invalid_argument);
rcl_action_goal_info_t goal_info = rcl_action_get_zero_initialized_goal_info();
rclcpp_action::convert(goal_id, &goal_info);
for (uint8_t i = 0; i < UUID_SIZE; ++i) {
@@ -54,6 +55,7 @@ TEST(TestActionTypes, rcl_action_goal_info_to_goal_uuid) {
goal_info.goal_id.uuid[i] = i;
}
ASSERT_THROW(rclcpp_action::convert(goal_info, nullptr), std::invalid_argument);
rclcpp_action::GoalUUID goal_id;
rclcpp_action::convert(goal_info, &goal_id);
for (uint8_t i = 0; i < UUID_SIZE; ++i) {