1- use std:: {
2- env,
3- sync:: {
4- atomic:: { AtomicU32 , Ordering } ,
5- Arc , Mutex ,
6- } ,
1+ use rclrs:: * ;
2+ use std:: sync:: {
3+ atomic:: { AtomicU32 , Ordering } ,
4+ Arc , Mutex ,
75} ;
86
97use anyhow:: { Error , Result } ;
108
119struct MinimalSubscriber {
1210 num_messages : AtomicU32 ,
13- node : Arc < rclrs :: Node > ,
14- subscription : Mutex < Option < Arc < rclrs :: Subscription < std_msgs:: msg:: String > > > > ,
11+ node : Arc < Node > ,
12+ subscription : Mutex < Option < Arc < Subscription < std_msgs:: msg:: String > > > > ,
1513}
1614
1715impl MinimalSubscriber {
18- pub fn new ( name : & str , topic : & str ) -> Result < Arc < Self > , rclrs:: RclrsError > {
19- let context = rclrs:: Context :: new ( env:: args ( ) ) ?;
20- let node = rclrs:: create_node ( & context, name) ?;
16+ pub fn new ( executor : & Executor , name : & str , topic : & str ) -> Result < Arc < Self > , RclrsError > {
17+ let node = executor. create_node ( name) ?;
2118 let minimal_subscriber = Arc :: new ( MinimalSubscriber {
2219 num_messages : 0 . into ( ) ,
2320 node,
@@ -29,7 +26,7 @@ impl MinimalSubscriber {
2926 . node
3027 . create_subscription :: < std_msgs:: msg:: String , _ > (
3128 topic,
32- rclrs :: QOS_PROFILE_DEFAULT ,
29+ QOS_PROFILE_DEFAULT ,
3330 move |msg : std_msgs:: msg:: String | {
3431 minimal_subscriber_aux. callback ( msg) ;
3532 } ,
@@ -50,16 +47,18 @@ impl MinimalSubscriber {
5047}
5148
5249fn main ( ) -> Result < ( ) , Error > {
53- let publisher_context = rclrs :: Context :: new ( env :: args ( ) ) ? ;
54- let publisher_node = rclrs :: create_node ( & publisher_context , "minimal_publisher" ) ?;
50+ let mut executor = Context :: default_from_env ( ) ? . create_basic_executor ( ) ;
51+ let publisher_node = executor . create_node ( "minimal_publisher" ) ?;
5552
56- let subscriber_node_one = MinimalSubscriber :: new ( "minimal_subscriber_one" , "topic" ) ?;
57- let subscriber_node_two = MinimalSubscriber :: new ( "minimal_subscriber_two" , "topic" ) ?;
53+ let _subscriber_node_one =
54+ MinimalSubscriber :: new ( & executor, "minimal_subscriber_one" , "topic" ) ?;
55+ let _subscriber_node_two =
56+ MinimalSubscriber :: new ( & executor, "minimal_subscriber_two" , "topic" ) ?;
5857
59- let publisher = publisher_node
60- . create_publisher :: < std_msgs:: msg:: String > ( "topic" , rclrs :: QOS_PROFILE_DEFAULT ) ?;
58+ let publisher =
59+ publisher_node . create_publisher :: < std_msgs:: msg:: String > ( "topic" , QOS_PROFILE_DEFAULT ) ?;
6160
62- std:: thread:: spawn ( move || -> Result < ( ) , rclrs :: RclrsError > {
61+ std:: thread:: spawn ( move || -> Result < ( ) , RclrsError > {
6362 let mut message = std_msgs:: msg:: String :: default ( ) ;
6463 let mut publish_count: u32 = 1 ;
6564 loop {
@@ -71,11 +70,8 @@ fn main() -> Result<(), Error> {
7170 }
7271 } ) ;
7372
74- let executor = rclrs:: SingleThreadedExecutor :: new ( ) ;
75-
76- executor. add_node ( & publisher_node) ?;
77- executor. add_node ( & subscriber_node_one. node ) ?;
78- executor. add_node ( & subscriber_node_two. node ) ?;
79-
80- executor. spin ( ) . map_err ( |err| err. into ( ) )
73+ executor
74+ . spin ( SpinOptions :: default ( ) )
75+ . first_error ( )
76+ . map_err ( |err| err. into ( ) )
8177}
0 commit comments