From 3d04cbdf9302b142ece823906dfeb06b48cfdf6e Mon Sep 17 00:00:00 2001 From: Martin Dahl Date: Tue, 11 May 2021 16:30:38 +0200 Subject: [PATCH] Switch from failure to thiserror. Closes #2 --- .gitignore | 8 +--- Cargo.toml | 5 +- examples/client.rs | 3 +- examples/clock.rs | 4 +- examples/logging.rs | 3 +- examples/parameters.rs | 3 +- examples/publish_complex_msgs.rs | 3 +- examples/rostopic_echo.rs | 3 +- examples/rostopic_list.rs | 3 +- examples/service.rs | 4 +- examples/subscriber.rs | 3 +- examples/subscriber_with_thread.rs | 3 +- examples/wall_timer.rs | 3 +- src/error.rs | 75 +++++++++++++++--------------- src/lib.rs | 1 - tests/threads.rs | 3 +- 16 files changed, 53 insertions(+), 74 deletions(-) diff --git a/.gitignore b/.gitignore index 96b8a87..d1d04ef 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,4 @@ Cargo.lock -# code generation -msg_gen/src/introspection_functions.rs -msg_gen/src/msg_bindings.rs -msg_gen/src/msg_includes.h -rcl/src/rcl_bindings.rs -rcl/src/rcl_wrapper.h -src/generated_msgs.rs +.envrc diff --git a/Cargo.toml b/Cargo.toml index d24a787..ec80080 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "r2r" -version = "0.0.7" +version = "0.0.8" authors = ["Martin Dahl "] description = "Minimal ros2 bindings." license = "Apache-2.0/MIT" @@ -10,8 +10,7 @@ edition = "2018" [dependencies] serde = { version = "1.0.123", features = ["derive"] } serde_json = "1.0.62" -failure = "0.1.8" -failure_derive = "0.1.8" +thiserror = "1.0" lazy_static = "1.4.0" common = { path = "common", version = "0.0.3" } rcl = { path = "rcl", version = "0.0.3" } diff --git a/examples/client.rs b/examples/client.rs index 29aff6b..616a926 100644 --- a/examples/client.rs +++ b/examples/client.rs @@ -1,9 +1,8 @@ use r2r; -use failure::Error; use r2r::example_interfaces::srv::AddTwoInts; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; let client = node.create_client::("/add_two_ints")?; diff --git a/examples/clock.rs b/examples/clock.rs index aaafcf6..1b64a81 100644 --- a/examples/clock.rs +++ b/examples/clock.rs @@ -1,8 +1,6 @@ use r2r; -use failure::Error; - -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { { let mut clock = r2r::Clock::create(r2r::ClockType::RosTime)?; let now = clock.get_now()?; diff --git a/examples/logging.rs b/examples/logging.rs index 0d7236e..1734a9f 100644 --- a/examples/logging.rs +++ b/examples/logging.rs @@ -1,11 +1,10 @@ use r2r; -use failure::Error; /// try to run like this /// cargo run --example logging -- --ros-args --log-level DEBUG /// The logs produced with the node logger should show up in /rosout -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { r2r::log_debug!("before_init", "debug msg"); let ctx = r2r::Context::create()?; let node = r2r::Node::create(ctx, "logger_node", "")?; diff --git a/examples/parameters.rs b/examples/parameters.rs index d7bf5e5..439b130 100644 --- a/examples/parameters.rs +++ b/examples/parameters.rs @@ -1,10 +1,9 @@ use r2r; -use failure::Error; // try to run like this // cargo run --example parameters -- --ros-args -p param_key:=[hej,hopp] -p key2:=5.5 key2=true -r __ns:=/demo -r __node:=my_node -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let node = r2r::Node::create(ctx, "testnode", "")?; diff --git a/examples/publish_complex_msgs.rs b/examples/publish_complex_msgs.rs index 2ac0df9..4233250 100644 --- a/examples/publish_complex_msgs.rs +++ b/examples/publish_complex_msgs.rs @@ -2,9 +2,8 @@ use r2r; use r2r::builtin_interfaces::msg::Duration; use r2r::trajectory_msgs::msg::*; use r2r::std_msgs::msg::Int32; -use failure::Error; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; let publisher = node.create_publisher::("/hej")?; diff --git a/examples/rostopic_echo.rs b/examples/rostopic_echo.rs index c0cf3c2..663443d 100644 --- a/examples/rostopic_echo.rs +++ b/examples/rostopic_echo.rs @@ -2,9 +2,8 @@ use r2r; use std::thread; use std::env; use std::collections::HashMap; -use failure::Error; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "echo", "")?; diff --git a/examples/rostopic_list.rs b/examples/rostopic_list.rs index 8cd04e7..19fd066 100644 --- a/examples/rostopic_list.rs +++ b/examples/rostopic_list.rs @@ -1,9 +1,8 @@ use r2r; use std::thread; use std::time::Duration; -use failure::Error; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let node = r2r::Node::create(ctx, "testnode", "")?; diff --git a/examples/service.rs b/examples/service.rs index 8d990a4..5bbef69 100644 --- a/examples/service.rs +++ b/examples/service.rs @@ -1,6 +1,4 @@ use r2r; -use failure::Error; - use r2r::example_interfaces::srv::AddTwoInts; fn handle_service(request: AddTwoInts::Request) -> AddTwoInts::Response { @@ -10,7 +8,7 @@ fn handle_service(request: AddTwoInts::Request) -> AddTwoInts::Response { } } -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; node.create_service::("/add_two_ints", Box::new(handle_service))?; diff --git a/examples/subscriber.rs b/examples/subscriber.rs index d21410a..e6ee96c 100644 --- a/examples/subscriber.rs +++ b/examples/subscriber.rs @@ -1,9 +1,8 @@ use r2r; use std::sync::mpsc; use std::thread; -use failure::Error; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let th = { diff --git a/examples/subscriber_with_thread.rs b/examples/subscriber_with_thread.rs index 9874dc7..7375d11 100644 --- a/examples/subscriber_with_thread.rs +++ b/examples/subscriber_with_thread.rs @@ -1,11 +1,10 @@ use std::sync::mpsc; use std::thread; -use failure::Error; use r2r; use r2r::std_msgs; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; diff --git a/examples/wall_timer.rs b/examples/wall_timer.rs index 34761bf..05645da 100644 --- a/examples/wall_timer.rs +++ b/examples/wall_timer.rs @@ -1,7 +1,6 @@ use r2r; -use failure::Error; -fn main() -> Result<(), Error> { +fn main() -> Result<(), Box> { let ctx = r2r::Context::create()?; let mut node = r2r::Node::create(ctx, "testnode", "")?; diff --git a/src/error.rs b/src/error.rs index a2be80c..3082221 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,84 +1,85 @@ #![allow(non_camel_case_types)] use rcl::*; +use thiserror::Error; // TODO -#[derive(Debug, Fail)] +#[derive(Error, Debug)] pub enum Error { // Copied from the generated bindgen - #[fail(display = "RCL_RET_OK")] + #[error("RCL_RET_OK")] RCL_RET_OK, - #[fail(display = "RCL_RET_ERROR")] + #[error("RCL_RET_ERROR")] RCL_RET_ERROR, - #[fail(display = "RCL_RET_TIMEOUT")] + #[error("RCL_RET_TIMEOUT")] RCL_RET_TIMEOUT, - #[fail(display = "RCL_RET_BAD_ALLOC")] + #[error("RCL_RET_BAD_ALLOC")] RCL_RET_BAD_ALLOC, - #[fail(display = "RCL_RET_INVALID_ARGUMENT")] + #[error("RCL_RET_INVALID_ARGUMENT")] RCL_RET_INVALID_ARGUMENT, - #[fail(display = "RCL_RET_UNSUPPORTED")] + #[error("RCL_RET_UNSUPPORTED")] RCL_RET_UNSUPPORTED, - #[fail(display = "RCL_RET_ALREADY_INIT")] + #[error("RCL_RET_ALREADY_INIT")] RCL_RET_ALREADY_INIT, - #[fail(display = "RCL_RET_NOT_INIT")] + #[error("RCL_RET_NOT_INIT")] RCL_RET_NOT_INIT, - #[fail(display = "RCL_RET_MISMATCHED_RMW_ID")] + #[error("RCL_RET_MISMATCHED_RMW_ID")] RCL_RET_MISMATCHED_RMW_ID, - #[fail(display = "RCL_RET_TOPIC_NAME_INVALID")] + #[error("RCL_RET_TOPIC_NAME_INVALID")] RCL_RET_TOPIC_NAME_INVALID, - #[fail(display = "RCL_RET_SERVICE_NAME_INVALID")] + #[error("RCL_RET_SERVICE_NAME_INVALID")] RCL_RET_SERVICE_NAME_INVALID, - #[fail(display = "RCL_RET_UNKNOWN_SUBSTITUTION")] + #[error("RCL_RET_UNKNOWN_SUBSTITUTION")] RCL_RET_UNKNOWN_SUBSTITUTION, - #[fail(display = "RCL_RET_ALREADY_SHUTDOWN")] + #[error("RCL_RET_ALREADY_SHUTDOWN")] RCL_RET_ALREADY_SHUTDOWN, - #[fail(display = "RCL_RET_NODE_INVALID")] + #[error("RCL_RET_NODE_INVALID")] RCL_RET_NODE_INVALID, - #[fail(display = "RCL_RET_NODE_INVALID_NAME")] + #[error("RCL_RET_NODE_INVALID_NAME")] RCL_RET_NODE_INVALID_NAME, - #[fail(display = "RCL_RET_NODE_INVALID_NAMESPACE")] + #[error("RCL_RET_NODE_INVALID_NAMESPACE")] RCL_RET_NODE_INVALID_NAMESPACE, - #[fail(display = "RCL_RET_PUBLISHER_INVALID")] + #[error("RCL_RET_PUBLISHER_INVALID")] RCL_RET_PUBLISHER_INVALID, - #[fail(display = "RCL_RET_SUBSCRIPTION_INVALID")] + #[error("RCL_RET_SUBSCRIPTION_INVALID")] RCL_RET_SUBSCRIPTION_INVALID, - #[fail(display = "RCL_RET_SUBSCRIPTION_TAKE_FAILED")] + #[error("RCL_RET_SUBSCRIPTION_TAKE_FAILED")] RCL_RET_SUBSCRIPTION_TAKE_FAILED, - #[fail(display = "RCL_RET_CLIENT_INVALID")] + #[error("RCL_RET_CLIENT_INVALID")] RCL_RET_CLIENT_INVALID, - #[fail(display = "RCL_RET_CLIENT_TAKE_FAILED")] + #[error("RCL_RET_CLIENT_TAKE_FAILED")] RCL_RET_CLIENT_TAKE_FAILED, - #[fail(display = "RCL_RET_SERVICE_INVALID")] + #[error("RCL_RET_SERVICE_INVALID")] RCL_RET_SERVICE_INVALID, - #[fail(display = "RCL_RET_SERVICE_TAKE_FAILED")] + #[error("RCL_RET_SERVICE_TAKE_FAILED")] RCL_RET_SERVICE_TAKE_FAILED, - #[fail(display = "RCL_RET_TIMER_INVALID")] + #[error("RCL_RET_TIMER_INVALID")] RCL_RET_TIMER_INVALID, - #[fail(display = "RCL_RET_TIMER_CANCELED")] + #[error("RCL_RET_TIMER_CANCELED")] RCL_RET_TIMER_CANCELED, - #[fail(display = "RCL_RET_WAIT_SET_INVALID")] + #[error("RCL_RET_WAIT_SET_INVALID")] RCL_RET_WAIT_SET_INVALID, - #[fail(display = "RCL_RET_WAIT_SET_EMPTY")] + #[error("RCL_RET_WAIT_SET_EMPTY")] RCL_RET_WAIT_SET_EMPTY, - #[fail(display = "RCL_RET_WAIT_SET_FULL")] + #[error("RCL_RET_WAIT_SET_FULL")] RCL_RET_WAIT_SET_FULL, - #[fail(display = "RCL_RET_INVALID_REMAP_RULE")] + #[error("RCL_RET_INVALID_REMAP_RULE")] RCL_RET_INVALID_REMAP_RULE, - #[fail(display = "RCL_RET_WRONG_LEXEME")] + #[error("RCL_RET_WRONG_LEXEME")] RCL_RET_WRONG_LEXEME, - #[fail(display = "RCL_RET_INVALID_PARAM_RULE")] + #[error("RCL_RET_INVALID_PARAM_RULE")] RCL_RET_INVALID_PARAM_RULE, - #[fail(display = "RCL_RET_INVALID_LOG_LEVEL_RULE")] + #[error("RCL_RET_INVALID_LOG_LEVEL_RULE")] RCL_RET_INVALID_LOG_LEVEL_RULE, - #[fail(display = "RCL_RET_EVENT_INVALID")] + #[error("RCL_RET_EVENT_INVALID")] RCL_RET_EVENT_INVALID, - #[fail(display = "RCL_RET_EVENT_TAKE_FAILED")] + #[error("RCL_RET_EVENT_TAKE_FAILED")] RCL_RET_EVENT_TAKE_FAILED, // Our own errors - #[fail(display = "No typesupport build for the message type: {}", msgtype)] + #[error("No typesupport built for the message type: {}", msgtype)] InvalidMessageType { msgtype: String }, - #[fail(display = "Serde error: {}", err)] + #[error("Serde error: {}", err)] SerdeError { err: String }, } diff --git a/src/lib.rs b/src/lib.rs index 9db0726..088eb3b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,6 @@ include!(concat!(env!("OUT_DIR"), "/_r2r_generated_msgs.rs")); include!(concat!(env!("OUT_DIR"), "/_r2r_generated_untyped_helper.rs")); -#[macro_use] extern crate failure_derive; use serde::{Deserialize, Serialize}; use std::ffi::{CString,CStr}; use std::mem::MaybeUninit; diff --git a/tests/threads.rs b/tests/threads.rs index b293a80..ad47e6b 100644 --- a/tests/threads.rs +++ b/tests/threads.rs @@ -1,12 +1,11 @@ use std::thread; use std::time::Duration; -use failure::Error; use r2r; #[test] // Let's create and drop a lot of node and publishers for a while to see that we can cope. -fn doesnt_crash() -> Result<(), Error> { +fn doesnt_crash() -> Result<(), Box> { // a global shared context. let ctx = r2r::Context::create()?;