feat: remove is_available's node mut-ref dependency, also remove the !Sync constraint

on the future returned
This commit is contained in:
passchaos 2024-03-26 15:30:33 +08:00 committed by Martin Dahl
parent 13902524f7
commit 17584344c2
8 changed files with 8 additions and 8 deletions

View File

@ -10,7 +10,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let ctx = r2r::Context::create()?;
let mut node = r2r::Node::create(ctx, "testnode", "")?;
let client = node.create_action_client::<Fibonacci::Action>("/fibonacci")?;
let action_server_available = node.is_available(&client)?;
let action_server_available = r2r::Node::is_available(&client)?;
// signal that we are done
let done = Arc::new(Mutex::new(false));

View File

@ -13,7 +13,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut node = r2r::Node::create(ctx, "testnode", "")?;
let client =
node.create_action_client_untyped("/fibonacci", "example_interfaces/action/Fibonacci")?;
let action_server_available = node.is_available(&client)?;
let action_server_available = r2r::Node::is_available(&client)?;
// signal that we are done
let done = Arc::new(Mutex::new(false));

View File

@ -33,7 +33,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut node = r2r::Node::create(ctx, "testnode", "")?;
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
let service_available = node.is_available(&client)?;
let service_available = r2r::Node::is_available(&client)?;
let mut pool = LocalPool::new();
let spawner = pool.spawner();

View File

@ -22,7 +22,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut timer = node.create_wall_timer(std::time::Duration::from_millis(250))?;
let mut timer2 = node.create_wall_timer(std::time::Duration::from_millis(2000))?;
// wait for service to be available
let service_available = node.is_available(&client)?;
let service_available = r2r::Node::is_available(&client)?;
let mut pool = LocalPool::new();
let spawner = pool.spawner();

View File

@ -7,7 +7,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
use r2r::example_interfaces::srv::AddTwoInts;
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
let mut timer = node.create_wall_timer(duration)?;
let waiting = node.is_available(&client)?;
let waiting = r2r::Node::is_available(&client)?;
let handle = tokio::task::spawn_blocking(move || loop {
node.spin_once(std::time::Duration::from_millis(100));

View File

@ -78,7 +78,7 @@ async fn client(arc_node: Arc<Mutex<r2r::Node>>) -> Result<(), r2r::Error> {
let mut node = arc_node.lock().unwrap();
let client = node.create_client::<AddTwoInts::Service>("/add_two_ints")?;
let timer = node.create_wall_timer(std::time::Duration::from_secs(2))?;
let service_available = node.is_available(&client)?;
let service_available = r2r::Node::is_available(&client)?;
(client, timer, service_available)
};
println!("waiting for service...");

View File

@ -29,7 +29,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let client =
node.create_client_untyped("/add_two_ints", "example_interfaces/srv/AddTwoInts")?;
let service_available = node.is_available(&client)?;
let service_available = r2r::Node::is_available(&client)?;
let mut pool = LocalPool::new();
let spawner = pool.spawner();

View File

@ -707,7 +707,7 @@ impl Node {
/// `spin_once` until available, so spin_once must be called
/// repeatedly in order to get the wakeup.
pub fn is_available(
&mut self, client: &dyn IsAvailablePollable,
client: &dyn IsAvailablePollable,
) -> Result<impl Future<Output = Result<()>>> {
let (sender, receiver) = oneshot::channel();
client.register_poll_available(sender)?;