rclcpp  master
C++ ROS Client Library API
exceptions.hpp
Go to the documentation of this file.
1 // Copyright 2016 Open Source Robotics Foundation, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef RCLCPP__EXCEPTIONS_HPP_
16 #define RCLCPP__EXCEPTIONS_HPP_
17 
18 #include <stdexcept>
19 #include <string>
20 
21 #include "rcl/error_handling.h"
22 #include "rcl/types.h"
24 
25 namespace rclcpp
26 {
27 namespace exceptions
28 {
29 
31 class InvalidNodeError : public std::runtime_error
32 {
33 public:
35  : std::runtime_error("node is invalid") {}
36 };
37 
39 class NameValidationError : public std::invalid_argument
40 {
41 public:
43  const char * name_type_,
44  const char * name_,
45  const char * error_msg_,
46  size_t invalid_index_)
47  : std::invalid_argument(format_error(name_type_, name_, error_msg_, invalid_index_)),
48  name_type(name_type_), name(name_), error_msg(error_msg_), invalid_index(invalid_index_)
49  {}
50 
51  static std::string
52  format_error(
53  const char * name_type,
54  const char * name,
55  const char * error_msg,
56  size_t invalid_index);
57 
58  const std::string name_type;
59  const std::string name;
60  const std::string error_msg;
61  const size_t invalid_index;
62 };
63 
66 {
67 public:
68  InvalidNodeNameError(const char * node_name, const char * error_msg, size_t invalid_index)
69  : NameValidationError("node name", node_name, error_msg, invalid_index)
70  {}
71 };
72 
75 {
76 public:
77  InvalidNamespaceError(const char * namespace_, const char * error_msg, size_t invalid_index)
78  : NameValidationError("namespace", namespace_, error_msg, invalid_index)
79  {}
80 };
81 
84 {
85 public:
86  InvalidTopicNameError(const char * namespace_, const char * error_msg, size_t invalid_index)
87  : NameValidationError("topic name", namespace_, error_msg, invalid_index)
88  {}
89 };
90 
93 {
94 public:
95  InvalidServiceNameError(const char * namespace_, const char * error_msg, size_t invalid_index)
96  : NameValidationError("service name", namespace_, error_msg, invalid_index)
97  {}
98 };
99 
101 
114 void
116  rcl_ret_t ret,
117  const std::string & prefix = "",
118  const rcl_error_state_t * error_state = nullptr,
119  void (* reset_error)() = rcl_reset_error);
120 
122 {
123 public:
125  RCLErrorBase(rcl_ret_t ret, const rcl_error_state_t * error_state);
126  virtual ~RCLErrorBase() {}
127 
129  std::string message;
130  std::string file;
131  size_t line;
132  std::string formatted_message;
133 };
134 
136 class RCLError : public RCLErrorBase, public std::runtime_error
137 {
138 public:
140  RCLError(rcl_ret_t ret, const rcl_error_state_t * error_state, const std::string & prefix);
142  RCLError(const RCLErrorBase & base_exc, const std::string & prefix);
143 };
144 
146 class RCLBadAlloc : public RCLErrorBase, public std::bad_alloc
147 {
148 public:
150  RCLBadAlloc(rcl_ret_t ret, const rcl_error_state_t * error_state);
152  explicit RCLBadAlloc(const RCLErrorBase & base_exc);
153 };
154 
156 class RCLInvalidArgument : public RCLErrorBase, public std::invalid_argument
157 {
158 public:
161  rcl_ret_t ret,
162  const rcl_error_state_t * error_state,
163  const std::string & prefix);
165  RCLInvalidArgument(const RCLErrorBase & base_exc, const std::string & prefix);
166 };
167 
169 class InvalidEventError : public std::runtime_error
170 {
171 public:
173  : std::runtime_error("event is invalid") {}
174 };
175 
177 class EventNotRegisteredError : public std::runtime_error
178 {
179 public:
181  : std::runtime_error("event already registered") {}
182 };
183 
184 } // namespace exceptions
185 } // namespace rclcpp
186 
187 #endif // RCLCPP__EXCEPTIONS_HPP_
Created when the return code does not match one of the other specialized exceptions.
Definition: exceptions.hpp:136
Created when the ret is RCL_RET_INVALID_ARGUMENT.
Definition: exceptions.hpp:156
InvalidNodeError()
Definition: exceptions.hpp:34
Thrown when a any kind of name (node, namespace, topic, etc.) is invalid.
Definition: exceptions.hpp:39
#define rcl_reset_error
rmw_ret_t rcl_ret_t
Thrown when a topic name is invalid.
Definition: exceptions.hpp:83
EventNotRegisteredError()
Definition: exceptions.hpp:180
Thrown when an unregistered rclcpp::Event is encountered where a registered one was expected...
Definition: exceptions.hpp:177
Thrown when an invalid rclcpp::Event object or SharedPtr is encountered.
Definition: exceptions.hpp:169
Thrown when a service name is invalid.
Definition: exceptions.hpp:92
InvalidEventError()
Definition: exceptions.hpp:172
Definition: allocator_common.hpp:24
Definition: parameter.hpp:235
std::string file
Definition: exceptions.hpp:130
InvalidNodeNameError(const char *node_name, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:68
Thrown when a method is trying to use a node, but it is invalid.
Definition: exceptions.hpp:31
rcl_ret_t ret
Definition: exceptions.hpp:128
void throw_from_rcl_error(rcl_ret_t ret, const std::string &prefix="", const rcl_error_state_t *error_state=nullptr, void(*reset_error)()=rcl_reset_error)
Throw a C++ std::exception which was created based on an rcl error.
InvalidNamespaceError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:77
Definition: exceptions.hpp:121
const std::string name_type
Definition: exceptions.hpp:58
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
const size_t invalid_index
Definition: exceptions.hpp:61
const std::string error_msg
Definition: exceptions.hpp:60
InvalidTopicNameError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:86
std::string message
Definition: exceptions.hpp:129
Created when the ret is RCL_RET_BAD_ALLOC.
Definition: exceptions.hpp:146
Thrown when a node namespace is invalid.
Definition: exceptions.hpp:74
NameValidationError(const char *name_type_, const char *name_, const char *error_msg_, size_t invalid_index_)
Definition: exceptions.hpp:42
InvalidServiceNameError(const char *namespace_, const char *error_msg, size_t invalid_index)
Definition: exceptions.hpp:95
size_t line
Definition: exceptions.hpp:131
std::string formatted_message
Definition: exceptions.hpp:132
const std::string name
Definition: exceptions.hpp:59
virtual ~RCLErrorBase()
Definition: exceptions.hpp:126
Thrown when a node name is invalid.
Definition: exceptions.hpp:65