use std::io;
use crate::IoctlFlags;
use nix::errno::Errno;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("Copy failed")]
CopyFailed(Errno),
#[error("Copy partially succeeded")]
PartiallyCopied(usize),
#[error("Incomplete uffd_msg; read only {read}/{expected} bytes")]
IncompleteMsg { read: usize, expected: usize },
#[error("System error")]
SystemError(#[source] nix::Error),
#[error("EOF when reading file descriptor")]
ReadEof,
#[error("Unrecognized event in uffd_msg: {0}")]
UnrecognizedEvent(u8),
#[error("Requested ioctls unsupported; supported: {0:?}")]
UnsupportedIoctls(IoctlFlags),
#[error("Zeropage failed: {0}")]
ZeropageFailed(Errno),
#[error("Error accessing /dev/userfaultfd: {0}")]
OpenDevUserfaultfd(io::Error),
}
impl From<nix::Error> for Error {
fn from(e: nix::Error) -> Error {
Error::SystemError(e)
}
}