@@ -13,9 +13,9 @@ pub use self::builder::*;
13
13
pub use self :: graph:: * ;
14
14
use crate :: rcl_bindings:: * ;
15
15
use crate :: {
16
- Client , ClientBase , Context , GuardCondition , ParameterOverrideMap , Publisher , QoSProfile ,
17
- RclrsError , Service , ServiceBase , Subscription , SubscriptionBase , SubscriptionCallback ,
18
- ToResult ,
16
+ ActionClient , Client , ClientBase , Context , GuardCondition , ParameterOverrideMap , Publisher ,
17
+ QoSProfile , RclrsError , Service , ServiceBase , Subscription , SubscriptionBase ,
18
+ SubscriptionCallback , ToResult ,
19
19
} ;
20
20
21
21
impl Drop for rcl_node_t {
@@ -190,6 +190,26 @@ impl Node {
190
190
Ok ( client)
191
191
}
192
192
193
+ /// Creates a [`Client`][1].
194
+ ///
195
+ /// [1]: crate::ActionClient
196
+ // TODO: make action client's lifetime depend on node's lifetime
197
+ pub fn create_action_client < T > (
198
+ & mut self ,
199
+ topic : & str ,
200
+ ) -> Result < Arc < ActionClient < T > > , RclrsError >
201
+ where
202
+ T : rosidl_runtime_rs:: Action ,
203
+ {
204
+ let client = Arc :: new ( ActionClient :: < T > :: new (
205
+ Arc :: clone ( & self . rcl_node_mtx ) ,
206
+ topic,
207
+ ) ?) ;
208
+ // self.clients
209
+ // .push(Arc::downgrade(&client) as Weak<dyn ClientBase>);
210
+ Ok ( client)
211
+ }
212
+
193
213
/// Creates a [`GuardCondition`][1] with no callback.
194
214
///
195
215
/// A weak pointer to the `GuardCondition` is stored within this node.
0 commit comments