Skip to content

Commit e0dad8b

Browse files
authored
Move create_node and create_node_builder back to the rclrs module (#200)
* Move create_node and create_node_builder back to the rclrs module * Fix tests * Fix tests * Fix formatting
1 parent 346e2b5 commit e0dad8b

File tree

9 files changed

+68
-69
lines changed

9 files changed

+68
-69
lines changed

examples/message_demo/src/message_demo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ fn demonstrate_pubsub() -> Result<(), Error> {
132132
println!("================== Interoperability demo ==================");
133133
// Demonstrate interoperability between idiomatic and RMW-native message types
134134
let context = rclrs::Context::new(env::args())?;
135-
let mut node = context.create_node("message_demo")?;
135+
let mut node = rclrs::create_node(&context, "message_demo")?;
136136

137137
let idiomatic_publisher = node.create_publisher::<rclrs_example_msgs::msg::VariousTypes>(
138138
"topic",

examples/minimal_pub_sub/src/minimal_publisher.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::env;
44
fn main() -> Result<(), Error> {
55
let context = rclrs::Context::new(env::args())?;
66

7-
let node = context.create_node("minimal_publisher")?;
7+
let node = rclrs::create_node(&context, "minimal_publisher")?;
88

99
let publisher =
1010
node.create_publisher::<std_msgs::msg::String>("topic", rclrs::QOS_PROFILE_DEFAULT)?;

examples/minimal_pub_sub/src/minimal_subscriber.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use anyhow::{Error, Result};
55
fn main() -> Result<(), Error> {
66
let context = rclrs::Context::new(env::args())?;
77

8-
let mut node = context.create_node("minimal_subscriber")?;
8+
let mut node = rclrs::create_node(&context, "minimal_subscriber")?;
99

1010
let mut num_messages: usize = 0;
1111

rclrs/src/context.rs

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::rcl_bindings::*;
2-
use crate::{Node, NodeBuilder, RclrsError, ToResult};
2+
use crate::{RclrsError, ToResult};
33

44
use std::ffi::CString;
55
use std::os::raw::c_char;
@@ -105,47 +105,6 @@ impl Context {
105105
})
106106
}
107107

108-
/// Creates a new node in the empty namespace.
109-
///
110-
/// Convenience function equivalent to [`Node::new`][1].
111-
/// Please see that function's documentation.
112-
///
113-
/// [1]: crate::Node::new
114-
///
115-
/// # Example
116-
/// ```
117-
/// # use rclrs::{Context, RclrsError};
118-
/// let ctx = Context::new([])?;
119-
/// let node = ctx.create_node("my_node");
120-
/// assert!(node.is_ok());
121-
/// # Ok::<(), RclrsError>(())
122-
/// ```
123-
pub fn create_node(&self, node_name: &str) -> Result<Node, RclrsError> {
124-
Node::builder(self, node_name).build()
125-
}
126-
127-
/// Creates a [`NodeBuilder`][1].
128-
///
129-
/// Convenience function equivalent to [`NodeBuilder::new()`][2] and [`Node::builder()`][3].
130-
/// Please see that function's documentation.
131-
///
132-
/// [1]: crate::NodeBuilder
133-
/// [2]: crate::NodeBuilder::new
134-
/// [3]: crate::Node::builder
135-
///
136-
/// # Example
137-
/// ```
138-
/// # use rclrs::{Context, RclrsError};
139-
/// let context = Context::new([])?;
140-
/// let node_builder = context.create_node_builder("my_node");
141-
/// let node = node_builder.build()?;
142-
/// assert_eq!(node.name(), "my_node");
143-
/// # Ok::<(), RclrsError>(())
144-
/// ```
145-
pub fn create_node_builder(&self, node_name: &str) -> NodeBuilder {
146-
Node::builder(self, node_name)
147-
}
148-
149108
/// Checks if the context is still valid.
150109
///
151110
/// This will return `false` when a signal has caused the context to shut down (currently

rclrs/src/lib.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,47 @@ pub fn spin(node: &Node) -> Result<(), RclrsError> {
7878
Ok(())
7979
}
8080

81+
/// Creates a new node in the empty namespace.
82+
///
83+
/// Convenience function equivalent to [`Node::new`][1].
84+
/// Please see that function's documentation.
85+
///
86+
/// [1]: crate::Node::new
87+
///
88+
/// # Example
89+
/// ```
90+
/// # use rclrs::{Context, RclrsError};
91+
/// let ctx = Context::new([])?;
92+
/// let node = rclrs::create_node(&ctx, "my_node");
93+
/// assert!(node.is_ok());
94+
/// # Ok::<(), RclrsError>(())
95+
/// ```
96+
pub fn create_node(context: &Context, node_name: &str) -> Result<Node, RclrsError> {
97+
Node::builder(context, node_name).build()
98+
}
99+
100+
/// Creates a [`NodeBuilder`][1].
101+
///
102+
/// Convenience function equivalent to [`NodeBuilder::new()`][2] and [`Node::builder()`][3].
103+
/// Please see that function's documentation.
104+
///
105+
/// [1]: crate::NodeBuilder
106+
/// [2]: crate::NodeBuilder::new
107+
/// [3]: crate::Node::builder
108+
///
109+
/// # Example
110+
/// ```
111+
/// # use rclrs::{Context, RclrsError};
112+
/// let context = Context::new([])?;
113+
/// let node_builder = rclrs::create_node_builder(&context, "my_node");
114+
/// let node = node_builder.build()?;
115+
/// assert_eq!(node.name(), "my_node");
116+
/// # Ok::<(), RclrsError>(())
117+
/// ```
118+
pub fn create_node_builder(context: &Context, node_name: &str) -> NodeBuilder {
119+
Node::builder(context, node_name)
120+
}
121+
81122
#[cfg(test)]
82123
mod tests {
83124
use super::*;
@@ -87,7 +128,7 @@ mod tests {
87128
#[test]
88129
fn test_spin_once() -> Result<(), RclrsError> {
89130
let context = Context::new(vec![]).unwrap();
90-
let mut subscriber_node = context.create_node("minimal_subscriber")?;
131+
let mut subscriber_node = create_node(&context, "minimal_subscriber")?;
91132
let num_messages = Arc::new(Mutex::new(0));
92133
let received_msg = Arc::new(Mutex::new(String::new()));
93134
let n = num_messages.clone();

rclrs/src/node.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ impl Node {
107107
/// # use rclrs::{Context, RclrsError};
108108
/// // Without remapping
109109
/// let context = Context::new([])?;
110-
/// let node = context.create_node("my_node")?;
110+
/// let node = rclrs::create_node(&context, "my_node")?;
111111
/// assert_eq!(node.name(), "my_node");
112112
/// // With remapping
113113
/// let remapping = ["--ros-args", "-r", "__node:=your_node"].map(String::from);
114114
/// let context_r = Context::new(remapping)?;
115-
/// let node_r = context_r.create_node("my_node")?;
115+
/// let node_r = rclrs::create_node(&context_r, "my_node")?;
116116
/// assert_eq!(node_r.name(), "your_node");
117117
/// # Ok::<(), RclrsError>(())
118118
/// ```
@@ -130,15 +130,15 @@ impl Node {
130130
/// # use rclrs::{Context, RclrsError};
131131
/// // Without remapping
132132
/// let context = Context::new([])?;
133-
/// let node = context
134-
/// .create_node_builder("my_node")
133+
/// let node =
134+
/// rclrs::create_node_builder(&context, "my_node")
135135
/// .namespace("/my/namespace")
136136
/// .build()?;
137137
/// assert_eq!(node.namespace(), "/my/namespace");
138138
/// // With remapping
139139
/// let remapping = ["--ros-args", "-r", "__ns:=/your_namespace"].map(String::from);
140140
/// let context_r = Context::new(remapping)?;
141-
/// let node_r = context_r.create_node("my_node")?;
141+
/// let node_r = rclrs::create_node(&context_r, "my_node")?;
142142
/// assert_eq!(node_r.namespace(), "/your_namespace");
143143
/// # Ok::<(), RclrsError>(())
144144
/// ```
@@ -155,8 +155,8 @@ impl Node {
155155
/// ```
156156
/// # use rclrs::{Context, RclrsError};
157157
/// let context = Context::new([])?;
158-
/// let node = context
159-
/// .create_node_builder("my_node")
158+
/// let node =
159+
/// rclrs::create_node_builder(&context, "my_node")
160160
/// .namespace("/my/namespace")
161161
/// .build()?;
162162
/// assert_eq!(node.fully_qualified_name(), "/my/namespace/my_node");
@@ -230,7 +230,7 @@ impl Node {
230230
/// // Set default ROS domain ID to 10 here
231231
/// std::env::set_var("ROS_DOMAIN_ID", "10");
232232
/// let context = Context::new([])?;
233-
/// let node = context.create_node("domain_id_node")?;
233+
/// let node = rclrs::create_node(&context, "domain_id_node")?;
234234
/// let domain_id = node.domain_id();
235235
/// assert_eq!(domain_id, 10);
236236
/// # Ok::<(), RclrsError>(())
@@ -290,7 +290,7 @@ unsafe fn call_string_getter_with_handle(
290290
#[cfg(test)]
291291
mod tests {
292292
use super::*;
293-
use crate::{Context, Node, QOS_PROFILE_DEFAULT};
293+
use crate::{create_node, Context, Node, QOS_PROFILE_DEFAULT};
294294

295295
#[test]
296296
fn test_new() -> Result<(), RclrsError> {
@@ -305,7 +305,7 @@ mod tests {
305305
fn test_create_subscription() -> Result<(), RclrsError> {
306306
let context =
307307
Context::new(vec![]).expect("Context instantiation is expected to be a success");
308-
let mut node = context.create_node("test_create_subscription")?;
308+
let mut node = create_node(&context, "test_create_subscription")?;
309309
let _subscription = node.create_subscription::<std_msgs::msg::String, _>(
310310
"topic",
311311
QOS_PROFILE_DEFAULT,
@@ -318,7 +318,7 @@ mod tests {
318318
fn test_create_publisher() -> Result<(), RclrsError> {
319319
let context =
320320
Context::new(vec![]).expect("Context instantiation is expected to be a success");
321-
let node = context.create_node("test_create_publisher")?;
321+
let node = create_node(&context, "test_create_publisher")?;
322322
let _publisher =
323323
node.create_publisher::<std_msgs::msg::String>("topic", QOS_PROFILE_DEFAULT)?;
324324
Ok(())

rclrs/src/node/builder.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,14 @@ impl NodeBuilder {
162162
/// .map(String::from);
163163
/// let context = Context::new(context_args)?;
164164
/// // Ignore the global arguments:
165-
/// let node_without_global_args = context
166-
/// .create_node_builder("my_node")
165+
/// let node_without_global_args =
166+
/// rclrs::create_node_builder(&context, "my_node")
167167
/// .use_global_arguments(false)
168168
/// .build()?;
169169
/// assert_eq!(node_without_global_args.name(), "my_node");
170170
/// // Do not ignore the global arguments:
171-
/// let node_with_global_args = context
172-
/// .create_node_builder("my_other_node")
171+
/// let node_with_global_args =
172+
/// rclrs::create_node_builder(&context, "my_other_node")
173173
/// .use_global_arguments(true)
174174
/// .build()?;
175175
/// assert_eq!(node_with_global_args.name(), "your_node");
@@ -200,8 +200,8 @@ impl NodeBuilder {
200200
/// // But the node arguments will change it to "node_args_node":
201201
/// let node_args = ["--ros-args", "--remap", "my_node:__node:=node_args_node"]
202202
/// .map(String::from);
203-
/// let node = context
204-
/// .create_node_builder("my_node")
203+
/// let node =
204+
/// rclrs::create_node_builder(&context, "my_node")
205205
/// .arguments(node_args)
206206
/// .build()?;
207207
/// assert_eq!(node.name(), "node_args_node");

rclrs/src/node/publisher.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,13 @@ impl<'a, T: Message> MessageCow<'a, T> for &'a T {
167167
#[cfg(test)]
168168
mod tests {
169169
use super::*;
170-
use crate::{Context, Publisher, QOS_PROFILE_DEFAULT};
170+
use crate::{create_node, Context, Publisher, QOS_PROFILE_DEFAULT};
171171

172172
fn create_fixture(name: &str) -> (Context, Node) {
173173
let context =
174174
Context::new(vec![]).expect("Context instantiation is expected to be a success");
175-
let node = context
176-
.create_node(name)
177-
.expect("Node instantiation is expected to be a success");
175+
let node =
176+
create_node(&context, name).expect("Node instantiation is expected to be a success");
178177

179178
(context, node)
180179
}

rclrs/src/node/subscription.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,13 @@ where
210210
#[cfg(test)]
211211
mod tests {
212212
use super::*;
213-
use crate::{Context, Subscription, QOS_PROFILE_DEFAULT};
213+
use crate::{create_node, Context, Subscription, QOS_PROFILE_DEFAULT};
214214

215215
#[test]
216216
fn test_instantiate_subscriber() -> Result<(), RclrsError> {
217217
let context =
218218
Context::new(vec![]).expect("Context instantiation is expected to be a success");
219-
let node = context.create_node("test_new_subscriber")?;
219+
let node = create_node(&context, "test_new_subscriber")?;
220220
let _subscriber = Subscription::<std_msgs::msg::String>::new(
221221
&node,
222222
"test",

0 commit comments

Comments
 (0)