use std::io;
use fuser::Errno;
impl crate::Error {
pub(super) fn to_errno(&self) -> Errno {
match self {
crate::Error::FileAlreadyExists { .. } => Errno::EEXIST,
crate::Error::FileNotFound { .. } => Errno::ENOENT,
crate::Error::NoParentDirectory { .. } => Errno::ENOENT,
crate::Error::InvalidPath { .. } => Errno::EINVAL,
crate::Error::DirectoryNotEmpty { .. } => Errno::ENOTEMPTY,
crate::Error::NotADirectory { .. } => Errno::ENOTDIR,
crate::Error::NotARegularFile { .. } => Errno::EISDIR,
crate::Error::Io { kind, code } => match code {
Some(errno) => Errno::from_i32(*errno),
None => match kind {
io::ErrorKind::NotFound => Errno::ENOENT,
io::ErrorKind::PermissionDenied => Errno::EPERM,
io::ErrorKind::ConnectionRefused => Errno::ECONNREFUSED,
io::ErrorKind::ConnectionReset => Errno::ECONNRESET,
io::ErrorKind::ConnectionAborted => Errno::ECONNABORTED,
io::ErrorKind::NotConnected => Errno::ENOTCONN,
io::ErrorKind::AddrInUse => Errno::EADDRINUSE,
io::ErrorKind::AddrNotAvailable => Errno::EADDRNOTAVAIL,
io::ErrorKind::BrokenPipe => Errno::EPIPE,
io::ErrorKind::AlreadyExists => Errno::EEXIST,
io::ErrorKind::WouldBlock => Errno::EWOULDBLOCK,
io::ErrorKind::InvalidInput => Errno::EINVAL,
io::ErrorKind::TimedOut => Errno::ETIMEDOUT,
io::ErrorKind::Interrupted => Errno::EINTR,
io::ErrorKind::Unsupported => Errno::ENOSYS,
_ => Errno::EIO,
},
},
_ => Errno::EIO,
}
}
}