use std::io;
use thiserror::Error;
use crate::eventfd::EventFdError;
use crate::LockedBuf;
#[derive(Error, Debug)]
pub enum AioCommandError {
#[error("AioContext stopped")]
AioStopped {
buf: Option<LockedBuf>,
},
#[error("io_submit error: {source}")]
IoSubmit {
source: io::Error,
buf: Option<LockedBuf>,
},
#[error("bad result: `{source}`")]
BadResult {
source: io::Error,
buf: Option<LockedBuf>,
},
}
impl AioCommandError {
pub fn take_buf(&mut self) -> Option<LockedBuf> {
use AioCommandError::*;
match self {
AioStopped { buf, .. } => buf.take(),
IoSubmit { buf, .. } => buf.take(),
BadResult { buf, .. } => buf.take(),
}
}
}
#[derive(Error, Debug)]
pub enum AioContextError {
#[error("eventfd error: `{0}`")]
EventFd(#[from] EventFdError),
#[error("io_setup error: `{0}`")]
IoSetup(#[from] io::Error),
}