diff --git a/examples/message_demo/src/message_demo.rs b/examples/message_demo/src/message_demo.rs index 183adfe84..1f7949216 100644 --- a/examples/message_demo/src/message_demo.rs +++ b/examples/message_demo/src/message_demo.rs @@ -1,7 +1,7 @@ -use anyhow::{Error, Result}; use std::convert::TryInto; use std::env; +use anyhow::{Error, Result}; use rosidl_runtime_rs::{seq, BoundedSequence, Message, Sequence}; fn check_default_values() { diff --git a/examples/minimal_client_service/src/minimal_client.rs b/examples/minimal_client_service/src/minimal_client.rs index 5f0858426..685dbf6a9 100644 --- a/examples/minimal_client_service/src/minimal_client.rs +++ b/examples/minimal_client_service/src/minimal_client.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + fn main() -> Result<(), Error> { let context = rclrs::Context::new(env::args())?; diff --git a/examples/minimal_client_service/src/minimal_client_async.rs b/examples/minimal_client_service/src/minimal_client_async.rs index 603a60d5b..38f55f122 100644 --- a/examples/minimal_client_service/src/minimal_client_async.rs +++ b/examples/minimal_client_service/src/minimal_client_async.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + #[tokio::main] async fn main() -> Result<(), Error> { let context = rclrs::Context::new(env::args())?; diff --git a/examples/minimal_client_service/src/minimal_service.rs b/examples/minimal_client_service/src/minimal_service.rs index d4c067042..0150aeaa5 100644 --- a/examples/minimal_client_service/src/minimal_service.rs +++ b/examples/minimal_client_service/src/minimal_service.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + fn handle_service( _request_header: &rclrs::rmw_request_id_t, request: example_interfaces::srv::AddTwoInts_Request, diff --git a/examples/minimal_pub_sub/src/minimal_publisher.rs b/examples/minimal_pub_sub/src/minimal_publisher.rs index c19087a25..720086917 100644 --- a/examples/minimal_pub_sub/src/minimal_publisher.rs +++ b/examples/minimal_pub_sub/src/minimal_publisher.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + fn main() -> Result<(), Error> { let context = rclrs::Context::new(env::args())?; diff --git a/examples/minimal_pub_sub/src/minimal_subscriber.rs b/examples/minimal_pub_sub/src/minimal_subscriber.rs index 8de3baa97..eb34a91bc 100644 --- a/examples/minimal_pub_sub/src/minimal_subscriber.rs +++ b/examples/minimal_pub_sub/src/minimal_subscriber.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + fn main() -> Result<(), Error> { let context = rclrs::Context::new(env::args())?; diff --git a/examples/minimal_pub_sub/src/zero_copy_publisher.rs b/examples/minimal_pub_sub/src/zero_copy_publisher.rs index b6034ab75..5e73b5de7 100644 --- a/examples/minimal_pub_sub/src/zero_copy_publisher.rs +++ b/examples/minimal_pub_sub/src/zero_copy_publisher.rs @@ -1,6 +1,7 @@ -use anyhow::{Error, Result}; use std::env; +use anyhow::{Error, Result}; + fn main() -> Result<(), Error> { let context = rclrs::Context::new(env::args())?; diff --git a/rclrs/src/arguments.rs b/rclrs/src/arguments.rs index 721b01559..81c23420a 100644 --- a/rclrs/src/arguments.rs +++ b/rclrs/src/arguments.rs @@ -1,10 +1,12 @@ -use crate::error::*; -use crate::rcl_bindings::*; -use libc::c_void; use std::ffi::CString; use std::os::raw::c_char; use std::ptr::null_mut; +use libc::c_void; + +use crate::error::*; +use crate::rcl_bindings::*; + /// Extract non-ROS arguments from program's input arguments. /// /// `args` is expected to be the input arguments of the program (e.g. [`std::env::args()`]), diff --git a/rclrs/src/client.rs b/rclrs/src/client.rs index 08d5f6577..bb3cd4e57 100644 --- a/rclrs/src/client.rs +++ b/rclrs/src/client.rs @@ -1,17 +1,17 @@ -use futures::channel::oneshot; use std::boxed::Box; use std::collections::HashMap; use std::ffi::CString; use std::sync::atomic::AtomicBool; use std::sync::{Arc, Mutex, MutexGuard}; +use futures::channel::oneshot; +use rosidl_runtime_rs::Message; + use crate::error::{RclReturnCode, ToResult}; use crate::MessageCow; use crate::Node; use crate::{rcl_bindings::*, RclrsError}; -use rosidl_runtime_rs::Message; - // SAFETY: The functions accessing this type, including drop(), shouldn't care about the thread // they are running in. Therefore, this type can be safely sent to another thread. unsafe impl Send for rcl_client_t {} diff --git a/rclrs/src/context.rs b/rclrs/src/context.rs index b4f8b2110..83ef17c56 100644 --- a/rclrs/src/context.rs +++ b/rclrs/src/context.rs @@ -1,12 +1,12 @@ -use crate::rcl_bindings::*; -use crate::{RclrsError, ToResult}; - use std::ffi::CString; use std::os::raw::c_char; use std::string::String; use std::sync::{Arc, Mutex}; use std::vec::Vec; +use crate::rcl_bindings::*; +use crate::{RclrsError, ToResult}; + impl Drop for rcl_context_t { fn drop(&mut self) { unsafe { diff --git a/rclrs/src/error.rs b/rclrs/src/error.rs index 218a6d392..b84f4d4d3 100644 --- a/rclrs/src/error.rs +++ b/rclrs/src/error.rs @@ -1,8 +1,9 @@ -use crate::rcl_bindings::*; use std::error::Error; use std::ffi::{CStr, NulError}; use std::fmt::{self, Display}; +use crate::rcl_bindings::*; + /// The main error type. #[derive(Debug, PartialEq, Eq)] pub enum RclrsError { diff --git a/rclrs/src/lib.rs b/rclrs/src/lib.rs index b8ea36bed..74c04647d 100644 --- a/rclrs/src/lib.rs +++ b/rclrs/src/lib.rs @@ -19,6 +19,8 @@ mod wait; mod rcl_bindings; +use std::time::Duration; + pub use arguments::*; pub use client::*; pub use context::*; @@ -27,15 +29,12 @@ pub use node::*; pub use parameter::*; pub use publisher::*; pub use qos::*; +use rcl_bindings::rcl_context_is_valid; +pub use rcl_bindings::rmw_request_id_t; pub use service::*; pub use subscription::*; pub use wait::*; -use rcl_bindings::rcl_context_is_valid; -use std::time::Duration; - -pub use rcl_bindings::rmw_request_id_t; - /// Polls the node for new messages and executes the corresponding callbacks. /// /// See [`WaitSet::wait`] for the meaning of the `timeout` parameter. diff --git a/rclrs/src/node.rs b/rclrs/src/node.rs index 8e51184be..323c3623b 100644 --- a/rclrs/src/node.rs +++ b/rclrs/src/node.rs @@ -1,15 +1,5 @@ mod builder; mod graph; -pub use self::builder::*; -pub use self::graph::*; - -use crate::rcl_bindings::*; -use crate::{ - Client, ClientBase, Context, GuardCondition, ParameterOverrideMap, Publisher, QoSProfile, - RclrsError, Service, ServiceBase, Subscription, SubscriptionBase, SubscriptionCallback, - ToResult, -}; - use std::cmp::PartialEq; use std::ffi::CStr; use std::fmt; @@ -19,6 +9,15 @@ use std::vec::Vec; use libc::c_char; use rosidl_runtime_rs::Message; +pub use self::builder::*; +pub use self::graph::*; +use crate::rcl_bindings::*; +use crate::{ + Client, ClientBase, Context, GuardCondition, ParameterOverrideMap, Publisher, QoSProfile, + RclrsError, Service, ServiceBase, Subscription, SubscriptionBase, SubscriptionCallback, + ToResult, +}; + impl Drop for rcl_node_t { fn drop(&mut self) { // SAFETY: No preconditions for this function diff --git a/rclrs/src/node/builder.rs b/rclrs/src/node/builder.rs index 563b76d6e..91cd6fbe3 100644 --- a/rclrs/src/node/builder.rs +++ b/rclrs/src/node/builder.rs @@ -1,12 +1,12 @@ +use std::ffi::CString; +use std::sync::{Arc, Mutex}; + use crate::rcl_bindings::*; use crate::{ node::call_string_getter_with_handle, resolve_parameter_overrides, Context, Node, RclrsError, ToResult, }; -use std::ffi::CString; -use std::sync::{Arc, Mutex}; - /// A builder for creating a [`Node`][1]. /// /// The builder pattern allows selectively setting some fields, and leaving all others at their default values. diff --git a/rclrs/src/parameter/override_map.rs b/rclrs/src/parameter/override_map.rs index 13f13c6f0..3311e6c76 100644 --- a/rclrs/src/parameter/override_map.rs +++ b/rclrs/src/parameter/override_map.rs @@ -1,9 +1,11 @@ -use crate::rcl_bindings::*; -use crate::{ParameterValue, RclrsError, ToResult}; -use libc::c_char; use std::collections::BTreeMap; use std::ffi::CStr; +use libc::c_char; + +use crate::rcl_bindings::*; +use crate::{ParameterValue, RclrsError, ToResult}; + // Internal helper struct, iterator for rcl_params_t struct RclParamsIter<'a> { node_name_ptrs: &'a [*mut c_char], @@ -137,12 +139,14 @@ pub(crate) unsafe fn resolve_parameter_overrides( #[cfg(test)] mod tests { - use super::*; use std::error::Error; use std::ffi::CString; use std::io::Write; + use tempfile::NamedTempFile; + use super::*; + // These files have values for every possible four-bit number, with the four bits being // * `/**` global params // * named global params diff --git a/rclrs/src/parameter/value.rs b/rclrs/src/parameter/value.rs index f0d69652b..04b64322a 100644 --- a/rclrs/src/parameter/value.rs +++ b/rclrs/src/parameter/value.rs @@ -1,6 +1,7 @@ -use crate::rcl_bindings::*; use std::ffi::CStr; +use crate::rcl_bindings::*; + /// A parameter value. /// /// Such a value can be specified in YAML format on the command line, or in a parameter file. diff --git a/rclrs/src/publisher.rs b/rclrs/src/publisher.rs index 07ee26adc..631c231f9 100644 --- a/rclrs/src/publisher.rs +++ b/rclrs/src/publisher.rs @@ -1,8 +1,3 @@ -use crate::error::{RclrsError, ToResult}; -use crate::qos::QoSProfile; -use crate::rcl_bindings::*; -use crate::Node; - use std::borrow::Cow; use std::ffi::CStr; use std::ffi::CString; @@ -11,6 +6,11 @@ use std::sync::{Arc, Mutex}; use rosidl_runtime_rs::{Message, RmwMessage}; +use crate::error::{RclrsError, ToResult}; +use crate::qos::QoSProfile; +use crate::rcl_bindings::*; +use crate::Node; + mod loaned_message; pub use loaned_message::*; diff --git a/rclrs/src/publisher/loaned_message.rs b/rclrs/src/publisher/loaned_message.rs index b82eaea09..c9b06f1a2 100644 --- a/rclrs/src/publisher/loaned_message.rs +++ b/rclrs/src/publisher/loaned_message.rs @@ -1,9 +1,9 @@ -use crate::rcl_bindings::*; -use crate::{Publisher, RclrsError, ToResult}; +use std::ops::{Deref, DerefMut}; use rosidl_runtime_rs::RmwMessage; -use std::ops::{Deref, DerefMut}; +use crate::rcl_bindings::*; +use crate::{Publisher, RclrsError, ToResult}; /// A message that is owned by the middleware, loaned for publishing. /// diff --git a/rclrs/src/qos.rs b/rclrs/src/qos.rs index bb7b1540f..b4904262b 100644 --- a/rclrs/src/qos.rs +++ b/rclrs/src/qos.rs @@ -1,7 +1,7 @@ -use crate::rcl_bindings::*; - use std::time::Duration; +use crate::rcl_bindings::*; + /// The `HISTORY` DDS QoS policy. /// /// A subscription internally maintains a queue of messages (called "samples" in DDS) that have not diff --git a/rclrs/src/service.rs b/rclrs/src/service.rs index bd81650a3..ec7f0ad91 100644 --- a/rclrs/src/service.rs +++ b/rclrs/src/service.rs @@ -3,11 +3,11 @@ use std::ffi::CString; use std::sync::atomic::AtomicBool; use std::sync::{Arc, Mutex, MutexGuard}; +use rosidl_runtime_rs::Message; + use crate::error::{RclReturnCode, ToResult}; use crate::{rcl_bindings::*, MessageCow, Node, RclrsError}; -use rosidl_runtime_rs::Message; - // SAFETY: The functions accessing this type, including drop(), shouldn't care about the thread // they are running in. Therefore, this type can be safely sent to another thread. unsafe impl Send for rcl_service_t {} diff --git a/rclrs/src/subscription.rs b/rclrs/src/subscription.rs index ee922c6d6..5a55c5f85 100644 --- a/rclrs/src/subscription.rs +++ b/rclrs/src/subscription.rs @@ -1,8 +1,3 @@ -use crate::error::{RclReturnCode, ToResult}; -use crate::qos::QoSProfile; -use crate::Node; -use crate::{rcl_bindings::*, RclrsError}; - use std::ffi::CStr; use std::ffi::CString; use std::marker::PhantomData; @@ -11,6 +6,11 @@ use std::sync::{Arc, Mutex, MutexGuard}; use rosidl_runtime_rs::{Message, RmwMessage}; +use crate::error::{RclReturnCode, ToResult}; +use crate::qos::QoSProfile; +use crate::Node; +use crate::{rcl_bindings::*, RclrsError}; + mod callback; mod message_info; mod readonly_loaned_message; diff --git a/rclrs/src/subscription/callback.rs b/rclrs/src/subscription/callback.rs index 35f665ff9..9c2931470 100644 --- a/rclrs/src/subscription/callback.rs +++ b/rclrs/src/subscription/callback.rs @@ -1,8 +1,8 @@ +use rosidl_runtime_rs::Message; + use super::MessageInfo; use crate::ReadOnlyLoanedMessage; -use rosidl_runtime_rs::Message; - /// A trait for allowed callbacks for subscriptions. /// /// See [`AnySubscriptionCallback`] for a list of possible callback signatures. diff --git a/rclrs/src/subscription/message_info.rs b/rclrs/src/subscription/message_info.rs index d1dcedd54..b1dae04cb 100644 --- a/rclrs/src/subscription/message_info.rs +++ b/rclrs/src/subscription/message_info.rs @@ -1,7 +1,7 @@ -use crate::rcl_bindings::*; - use std::time::{Duration, SystemTime}; +use crate::rcl_bindings::*; + /// An identifier for a publisher in the local context. /// /// To quote the `rmw` documentation: diff --git a/rclrs/src/subscription/readonly_loaned_message.rs b/rclrs/src/subscription/readonly_loaned_message.rs index 55e422e2a..7a3e6b550 100644 --- a/rclrs/src/subscription/readonly_loaned_message.rs +++ b/rclrs/src/subscription/readonly_loaned_message.rs @@ -1,9 +1,9 @@ -use crate::rcl_bindings::*; -use crate::{Subscription, ToResult}; +use std::ops::Deref; use rosidl_runtime_rs::Message; -use std::ops::Deref; +use crate::rcl_bindings::*; +use crate::{Subscription, ToResult}; /// A message that is owned by the middleware, loaned out for reading. /// diff --git a/rclrs/src/wait.rs b/rclrs/src/wait.rs index 6bb0c471c..5b3c63e14 100644 --- a/rclrs/src/wait.rs +++ b/rclrs/src/wait.rs @@ -15,14 +15,14 @@ // DISTRIBUTION A. Approved for public release; distribution unlimited. // OPSEC #4584. -use crate::error::{to_rclrs_result, RclReturnCode, RclrsError, ToResult}; -use crate::rcl_bindings::*; -use crate::{ClientBase, Context, ServiceBase, SubscriptionBase}; - use std::sync::{Arc, Mutex}; use std::time::Duration; use std::vec::Vec; +use crate::error::{to_rclrs_result, RclReturnCode, RclrsError, ToResult}; +use crate::rcl_bindings::*; +use crate::{ClientBase, Context, ServiceBase, SubscriptionBase}; + mod exclusivity_guard; mod guard_condition; use exclusivity_guard::*; diff --git a/rclrs/src/wait/exclusivity_guard.rs b/rclrs/src/wait/exclusivity_guard.rs index 7ed4ec9e0..94ba00c29 100644 --- a/rclrs/src/wait/exclusivity_guard.rs +++ b/rclrs/src/wait/exclusivity_guard.rs @@ -37,10 +37,11 @@ impl ExclusivityGuard { #[cfg(test)] mod tests { - use super::*; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; + use super::*; + #[test] fn test_exclusivity_guard() { let atomic = Arc::new(AtomicBool::new(false)); diff --git a/rclrs/src/wait/guard_condition.rs b/rclrs/src/wait/guard_condition.rs index 5b14c1f0c..2bc9ebf64 100644 --- a/rclrs/src/wait/guard_condition.rs +++ b/rclrs/src/wait/guard_condition.rs @@ -1,8 +1,8 @@ +use std::sync::{atomic::AtomicBool, Arc, Mutex}; + use crate::rcl_bindings::*; use crate::{Context, RclrsError, ToResult}; -use std::sync::{atomic::AtomicBool, Arc, Mutex}; - /// A waitable entity used for waking up a wait set manually. /// /// If a wait set that is currently waiting on events should be interrupted from a separate thread, this can be done @@ -135,9 +135,10 @@ impl GuardCondition { #[cfg(test)] mod tests { + use std::sync::atomic::Ordering; + use super::*; use crate::WaitSet; - use std::sync::atomic::Ordering; #[test] fn test_guard_condition() -> Result<(), RclrsError> { diff --git a/rclrs_tests/src/graph_tests.rs b/rclrs_tests/src/graph_tests.rs index 9599b668f..add431fce 100644 --- a/rclrs_tests/src/graph_tests.rs +++ b/rclrs_tests/src/graph_tests.rs @@ -1,7 +1,6 @@ use rclrs::{ Context, Node, NodeBuilder, RclrsError, TopicNamesAndTypes, QOS_PROFILE_SYSTEM_DEFAULT, }; - use test_msgs::{msg, srv}; struct TestGraph { diff --git a/rosidl_runtime_rs/src/sequence.rs b/rosidl_runtime_rs/src/sequence.rs index dd4c7c859..acef78691 100644 --- a/rosidl_runtime_rs/src/sequence.rs +++ b/rosidl_runtime_rs/src/sequence.rs @@ -681,9 +681,10 @@ macro_rules! seq { #[cfg(test)] mod tests { - use super::*; use quickcheck::{quickcheck, Arbitrary, Gen}; + use super::*; + impl Arbitrary for Sequence { fn arbitrary(g: &mut Gen) -> Self { Vec::arbitrary(g).into() diff --git a/rosidl_runtime_rs/src/sequence/serde.rs b/rosidl_runtime_rs/src/sequence/serde.rs index 367bd078f..f3af605c6 100644 --- a/rosidl_runtime_rs/src/sequence/serde.rs +++ b/rosidl_runtime_rs/src/sequence/serde.rs @@ -49,9 +49,10 @@ impl Serialize for BoundedSequence #[cfg(test)] mod tests { - use crate::{BoundedSequence, Sequence}; use quickcheck::quickcheck; + use crate::{BoundedSequence, Sequence}; + quickcheck! { fn test_json_roundtrip_sequence(xs: Sequence) -> bool { let value = serde_json::to_value(xs.clone()).unwrap(); diff --git a/rosidl_runtime_rs/src/string.rs b/rosidl_runtime_rs/src/string.rs index fc8590755..e3f5ab6b7 100644 --- a/rosidl_runtime_rs/src/string.rs +++ b/rosidl_runtime_rs/src/string.rs @@ -467,9 +467,10 @@ impl std::error::Error for StringExceedsBoundsError {} #[cfg(test)] mod tests { - use super::*; use quickcheck::{Arbitrary, Gen}; + use super::*; + impl Arbitrary for String { fn arbitrary(g: &mut Gen) -> Self { std::string::String::arbitrary(g).as_str().into() diff --git a/rosidl_runtime_rs/src/string/serde.rs b/rosidl_runtime_rs/src/string/serde.rs index 36f3b1eba..2df52d58f 100644 --- a/rosidl_runtime_rs/src/string/serde.rs +++ b/rosidl_runtime_rs/src/string/serde.rs @@ -86,9 +86,10 @@ impl Serialize for BoundedWString { #[cfg(test)] mod tests { - use crate::{BoundedString, BoundedWString, String, WString}; use quickcheck::quickcheck; + use crate::{BoundedString, BoundedWString, String, WString}; + quickcheck! { fn test_json_roundtrip_string(s: String) -> bool { let value = serde_json::to_value(s.clone()).unwrap();