Skip to main content

IoRingError

Struct IoRingError 

Source
pub struct IoRingError { /* private fields */ }
Expand description

An error from an IoRing API call.

Every IoRing entry point reports failure as an HRESULT, not through GetLastError the way most of Win32 does, so this crate cannot reuse io::Error::last_os_error the way windows-overlapped-io-sys does.

§Matching on one of these

A kernel-reported failure always reaches a caller as an io::Error whose kind is io::ErrorKind::Other, because there is no faithful ErrorKind for most IORING_E_* conditions (M10.2, D-30). The HRESULT is not lost – it is this value, behind a downcast – but kind() will not find it. kind() discriminates only this crate’s own rejections, which use Unsupported, InvalidInput, and AlreadyExists.

So a consumer branching on a ring condition – most often IORING_E_SUBMISSION_QUEUE_FULL, the backpressure signal every push’s docs name – asks through IoRingErrorExt (M10.5), which is the downcast plus the comparison named once rather than hand-rolled:

use windows_ioring_sys::IoRingErrorExt;

fn classify(error: &std::io::Error) -> &'static str {
    if error.is_submission_queue_full() {
        "backpressure: submit, drain, retry"
    } else if let Some(condition) = error.ring_condition() {
        condition.name()
    } else {
        "not a ring condition"
    }
}

Implementations§

Source§

impl IoRingError

Source

pub fn code(&self) -> HRESULT

The raw HRESULT.

Source

pub fn name(&self) -> Option<&'static str>

The named IORING_E_* constant this value matches, if any.

Derived from IoRingError::condition rather than matching the HRESULT a second time, so the two can never disagree about which codes are named (M10.5).

Source

pub fn condition(&self) -> Option<RingCondition>

The named condition this error reports, or None for an HRESULT this crate does not name (M10.5).

match on this when a consumer needs to distinguish several conditions; use a predicate like IoRingError::is_submission_queue_full for a single branch.

Source

pub fn is_submission_queue_full(&self) -> bool

Whether this is IORING_E_SUBMISSION_QUEUE_FULL: the backpressure signal every push’s documentation names (M3.3).

Recoverable, and the one condition a normal submission loop is expected to branch on: submit what is already queued, drain completions, and retry the push.

Source

pub fn is_completion_queue_too_full(&self) -> bool

Whether this is IORING_E_COMPLETION_QUEUE_TOO_FULL: the completion queue has no room for further results, so completions must be drained with crate::IoRing::try_pop.

Source

pub fn is_submit_in_progress(&self) -> bool

Whether this is IORING_E_SUBMIT_IN_PROGRESS: another submit is already running on this ring.

Trait Implementations§

Source§

impl Clone for IoRingError

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for IoRingError

Source§

impl Debug for IoRingError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for IoRingError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for IoRingError

Source§

impl Error for IoRingError

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl PartialEq for IoRingError

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for IoRingError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.