@@ -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 {
@@ -189,6 +189,26 @@ impl Node {
189189 Ok ( client)
190190 }
191191
192+ /// Creates a [`Client`][1].
193+ ///
194+ /// [1]: crate::ActionClient
195+ // TODO: make action client's lifetime depend on node's lifetime
196+ pub fn create_action_client < T > (
197+ & mut self ,
198+ topic : & str ,
199+ ) -> Result < Arc < ActionClient < T > > , RclrsError >
200+ where
201+ T : rosidl_runtime_rs:: Action ,
202+ {
203+ let client = Arc :: new ( ActionClient :: < T > :: new (
204+ Arc :: clone ( & self . rcl_node_mtx ) ,
205+ topic,
206+ ) ?) ;
207+ // self.clients
208+ // .push(Arc::downgrade(&client) as Weak<dyn ClientBase>);
209+ Ok ( client)
210+ }
211+
192212 /// Creates a [`GuardCondition`][1] with no callback.
193213 ///
194214 /// A weak pointer to the `GuardCondition` is stored within this node.
0 commit comments