@@ -146,6 +146,20 @@ where
146
146
}
147
147
}
148
148
149
+ /// Returns the number of subscriptions of the publisher.
150
+ pub fn get_subscription_count ( & self ) -> Result < usize , RclrsError > {
151
+ let mut subscription_count = 0 ;
152
+ // SAFETY: No preconditions for the function called.
153
+ unsafe {
154
+ rcl_publisher_get_subscription_count (
155
+ & * self . handle . rcl_publisher . lock ( ) . unwrap ( ) ,
156
+ & mut subscription_count,
157
+ )
158
+ . ok ( ) ?
159
+ } ;
160
+ Ok ( subscription_count)
161
+ }
162
+
149
163
/// Publishes a message.
150
164
///
151
165
/// The [`MessageCow`] trait is implemented by any
@@ -327,6 +341,29 @@ mod tests {
327
341
expected_publishers_info
328
342
) ;
329
343
344
+ // Test get_subscription_count()
345
+ assert_eq ! ( node_1_empty_publisher. get_subscription_count( ) , Ok ( 0 ) ) ;
346
+ assert_eq ! ( node_1_basic_types_publisher. get_subscription_count( ) , Ok ( 0 ) ) ;
347
+ assert_eq ! ( node_2_default_publisher. get_subscription_count( ) , Ok ( 0 ) ) ;
348
+ let _node_1_empty_subscriber = graph. node1 . create_subscription (
349
+ "graph_test_topic_1" ,
350
+ QOS_PROFILE_SYSTEM_DEFAULT ,
351
+ |_msg : msg:: Empty | { } ,
352
+ ) ;
353
+ let _node_1_basic_types_subscriber = graph. node1 . create_subscription (
354
+ "graph_test_topic_2" ,
355
+ QOS_PROFILE_SYSTEM_DEFAULT ,
356
+ |_msg : msg:: BasicTypes | { } ,
357
+ ) ;
358
+ let _node_2_default_subscriber = graph. node2 . create_subscription (
359
+ "graph_test_topic_3" ,
360
+ QOS_PROFILE_SYSTEM_DEFAULT ,
361
+ |_msg : msg:: Defaults | { } ,
362
+ ) ;
363
+ assert_eq ! ( node_1_empty_publisher. get_subscription_count( ) , Ok ( 1 ) ) ;
364
+ assert_eq ! ( node_1_basic_types_publisher. get_subscription_count( ) , Ok ( 1 ) ) ;
365
+ assert_eq ! ( node_2_default_publisher. get_subscription_count( ) , Ok ( 1 ) ) ;
366
+
330
367
Ok ( ( ) )
331
368
}
332
369
}
0 commit comments