@@ -13,9 +13,9 @@ pub use self::builder::*;
1313pub use self :: graph:: * ;
1414use crate :: rcl_bindings:: * ;
1515use 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 ,
1919} ;
2020
2121impl Drop for rcl_node_t {
@@ -190,6 +190,26 @@ impl Node {
190190 Ok ( client)
191191 }
192192
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+
193213 /// Creates a [`GuardCondition`][1] with no callback.
194214 ///
195215 /// A weak pointer to the `GuardCondition` is stored within this node.
0 commit comments