1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/// Enumeration of all errors that can be returned.
#[derive(thiserror::Error, Debug)]
pub enum Error {
/// Message doesn't have a valid format.
///
/// Message names must follow the `package_name/MessageName` format.
///
/// Packages must follow [REP 144](https://www.ros.org/reps/rep-0144.html) rules.
#[error("message path `{name}` is invalid, {reason}")]
InvalidMessagePath {
/// Full name of the message we are trying to parse.
name: String,
/// Reason for the failure.
reason: String,
},
/// Field in the `msg` or `srv` file has a name that doesn't fit any data type category.
#[error("data type `{name}` is invalid, {reason}")]
UnsupportedDataType {
/// Full name of the data type we are trying to parse.
name: String,
/// Reason for the failure.
reason: String,
},
/// The `msg` or `srv` file being parsed has invalid content.
#[error("bad content in message: `{0}`")]
BadMessageContent(String),
/// Certain operations on a `msg` or `srv` file require first handling all messages it depends upon.
///
/// For example, to calculate an MD5 sum for a message, you first need to calculate it for
/// all messages it depends upon, and passing them into the calculation call.
#[error("message dependency missing: {package}/{name}")]
MessageDependencyMissing {
/// Package that the message is located in.
package: String,
/// Name of the missing message.
name: String,
},
/// Passed in constant value is not parsable as its data type.
#[error("bad constant value `{value}` of type {datatype} in field {name}")]
BadConstant {
/// Name of the constant.
name: String,
/// Type of the invalid value.
datatype: String,
/// The invalid value provided.
value: String,
},
}
/// Convenience type for shorter return value syntax of this crate's errors.
pub type Result<T> = std::result::Result<T, Error>;