do_not_use_testing_rclrs/lib.rs
1#![warn(missing_docs)]
2//! Rust client library for ROS 2.
3//!
4//! For getting started, see the [README][1].
5//!
6//! [1]: https://github.com/ros2-rust/ros2_rust/blob/main/README.md
7
8mod arguments;
9mod client;
10mod clock;
11mod context;
12mod error;
13mod executor;
14mod node;
15mod parameter;
16mod publisher;
17mod qos;
18mod service;
19mod subscription;
20mod time;
21mod time_source;
22mod vendor;
23mod wait;
24
25mod rcl_bindings;
26
27#[cfg(feature = "dyn_msg")]
28pub mod dynamic_message;
29
30use std::sync::Arc;
31use std::time::Duration;
32
33pub use arguments::*;
34pub use client::*;
35pub use clock::*;
36pub use context::*;
37pub use error::*;
38pub use executor::*;
39pub use node::*;
40pub use parameter::*;
41pub use publisher::*;
42pub use qos::*;
43pub use rcl_bindings::rmw_request_id_t;
44pub use service::*;
45pub use subscription::*;
46pub use time::*;
47use time_source::*;
48pub use wait::*;
49
50/// Polls the node for new messages and executes the corresponding callbacks.
51///
52/// See [`WaitSet::wait`] for the meaning of the `timeout` parameter.
53///
54/// This may under some circumstances return
55/// [`SubscriptionTakeFailed`][1], [`ClientTakeFailed`][1], [`ServiceTakeFailed`][1] when the wait
56/// set spuriously wakes up.
57/// This can usually be ignored.
58///
59/// [1]: crate::RclReturnCode
60pub fn spin_once(node: Arc<Node>, timeout: Option<Duration>) -> Result<(), RclrsError> {
61 let executor = SingleThreadedExecutor::new();
62 executor.add_node(&node)?;
63 executor.spin_once(timeout)
64}
65
66/// Convenience function for calling [`spin_once`] in a loop.
67pub fn spin(node: Arc<Node>) -> Result<(), RclrsError> {
68 let executor = SingleThreadedExecutor::new();
69 executor.add_node(&node)?;
70 executor.spin()
71}
72
73/// Creates a new node in the empty namespace.
74///
75/// Convenience function equivalent to [`Node::new`][1].
76/// Please see that function's documentation.
77///
78/// [1]: crate::Node::new
79///
80/// # Example
81/// ```
82/// # use rclrs::{Context, RclrsError};
83/// let ctx = Context::new([])?;
84/// let node = rclrs::create_node(&ctx, "my_node");
85/// assert!(node.is_ok());
86/// # Ok::<(), RclrsError>(())
87/// ```
88pub fn create_node(context: &Context, node_name: &str) -> Result<Arc<Node>, RclrsError> {
89 Node::new(context, node_name)
90}
91
92/// Creates a [`NodeBuilder`][1].
93///
94/// Convenience function equivalent to [`NodeBuilder::new()`][2] and [`Node::builder()`][3].
95/// Please see that function's documentation.
96///
97/// [1]: crate::NodeBuilder
98/// [2]: crate::NodeBuilder::new
99/// [3]: crate::Node::builder
100///
101/// # Example
102/// ```
103/// # use rclrs::{Context, RclrsError};
104/// let context = Context::new([])?;
105/// let node_builder = rclrs::create_node_builder(&context, "my_node");
106/// let node = node_builder.build()?;
107/// assert_eq!(node.name(), "my_node");
108/// # Ok::<(), RclrsError>(())
109/// ```
110pub fn create_node_builder(context: &Context, node_name: &str) -> NodeBuilder {
111 Node::builder(context, node_name)
112}