poll_with_timeout

Function poll_with_timeout 

Source
pub fn poll_with_timeout<F, T, E>(
    operation: F,
    timeout: Duration,
    poll_interval: Duration,
) -> Result<Option<T>, PollError<E>>
where F: FnMut() -> Result<Option<T>, E>,
Expand description

Poll with timeout for operations that may return a result

Repeatedly calls operation until it returns Ok(Some(T)) or timeout is reached.

§Arguments

  • operation - Function that returns Ok(Some(T)) when complete, Ok(None) to continue polling
  • timeout - Maximum duration to wait
  • poll_interval - Duration to sleep between operation calls

§Returns

  • Ok(Some(T)) when operation returns Ok(Some(T))
  • Ok(None) when timeout is reached
  • Err(PollError::ConditionError(e)) when operation returns an error

§Example

use std::time::Duration;
use rusty_tip::utils::poll_with_timeout;
use rusty_tip::utils::PollError;

// Simple example that finds data after a few attempts
let result = poll_with_timeout(
    || {
        static mut ATTEMPTS: u32 = 0;
        unsafe {
            ATTEMPTS += 1;
            if ATTEMPTS >= 3 {
                Ok::<Option<Vec<f64>>, &str>(Some(vec![1.0, 2.0, 3.0])) // Return data on 3rd attempt
            } else {
                Ok(None) // Keep trying
            }
        }
    },
    Duration::from_secs(1),
    Duration::from_millis(10),
);

assert!(result.is_ok());