wireshift-core 0.1.1

Core typed operations, buffers, and backend traits for wireshift
Documentation
//! Strategy for blocking synchronously on the ring for results.
use std::time::Duration;

use crate::completion::CompletionEvent;
use crate::error::Result;
use crate::{BackendFactory, Ring};

/// Waits for completions using a blocking call.
///
/// ```no_run
/// use wireshift::{Ring, RingConfig, strategy::BlockingDrain};
///
/// let ring = Ring::new(RingConfig::default())?;
/// let drain = BlockingDrain::new(ring);
/// let _ = drain.wait(None);
/// # Ok::<(), Box<dyn std::error::Error>>(())
/// ```
#[derive(Clone)]
pub struct BlockingDrain<F: BackendFactory> {
    ring: Ring<F>,
}

impl<F: BackendFactory> BlockingDrain<F> {
    /// Creates a blocking completion adapter.
    #[must_use]
    pub fn new(ring: Ring<F>) -> Self {
        Self { ring }
    }

    /// Waits for exactly one completion.
    pub fn wait(&self, timeout: Option<Duration>) -> Result<CompletionEvent> {
        self.ring.complete(timeout)
    }
}