diff --git a/src/errno.rs b/src/errno.rs index b9b59e9..24035c0 100644 --- a/src/errno.rs +++ b/src/errno.rs @@ -1,9 +1,9 @@ use std::error::Error; -use std::fmt::{self, Display, Formatter}; +use std::fmt::{self, Debug, Display, Formatter}; use std::io::Error as IoError; use std::os::raw::c_int; -#[derive(Debug, Copy, Clone, Eq, PartialEq)] +#[derive(Copy, Clone, Eq, PartialEq)] /// linux errno wrap. pub struct Errno(c_int); @@ -38,7 +38,22 @@ impl From for IoError { impl Display for Errno { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - write!(f, "errno is {}", self.0) + write!(f, "errno {} (", self.0)?; + match self.0 { + libc::ENOENT => write!(f, "does not exist"), + libc::EEXIST => write!(f, "already exists"), + libc::EISDIR => write!(f, "is a directory"), + libc::ENOTDIR => write!(f, "is not a directory"), + _ => write!(f, "unknown"), + }?; + write!(f, ")")?; + Ok(()) + } +} + +impl Debug for Errno { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + Display::fmt(self, f) } }