@@ -13,9 +13,9 @@ pub use self::builder::*;
1313pub use self :: graph:: * ;
1414use crate :: rcl_bindings:: * ;
1515use crate :: {
16- Client , ClientBase , Clock , Context , GuardCondition , ParameterBuilder , ParameterInterface ,
17- ParameterVariant , Parameters , Publisher , QoSProfile , RclrsError , Service , ServiceBase ,
18- Subscription , SubscriptionBase , SubscriptionCallback , TimeSource , ToResult ,
16+ ActionClient , Client , ClientBase , Clock , Context , GuardCondition , ParameterBuilder ,
17+ ParameterInterface , ParameterVariant , Parameters , Publisher , QoSProfile , RclrsError , Service ,
18+ ServiceBase , Subscription , SubscriptionBase , SubscriptionCallback , TimeSource , ToResult ,
1919} ;
2020
2121impl Drop for rcl_node_t {
@@ -195,6 +195,26 @@ impl Node {
195195 Ok ( client)
196196 }
197197
198+ /// Creates a [`Client`][1].
199+ ///
200+ /// [1]: crate::ActionClient
201+ // TODO: make action client's lifetime depend on node's lifetime
202+ pub fn create_action_client < T > (
203+ & mut self ,
204+ topic : & str ,
205+ ) -> Result < Arc < ActionClient < T > > , RclrsError >
206+ where
207+ T : rosidl_runtime_rs:: Action ,
208+ {
209+ let client = Arc :: new ( ActionClient :: < T > :: new (
210+ Arc :: clone ( & self . rcl_node_mtx ) ,
211+ topic,
212+ ) ?) ;
213+ // self.clients
214+ // .push(Arc::downgrade(&client) as Weak<dyn ClientBase>);
215+ Ok ( client)
216+ }
217+
198218 /// Creates a [`GuardCondition`][1] with no callback.
199219 ///
200220 /// A weak pointer to the `GuardCondition` is stored within this node.
0 commit comments