use libopenraw_sys as ffi;
#[repr(u32)]
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Error {
None = ffi::or_error::OR_ERROR_NONE as u32,
BufTooSmall = ffi::or_error::OR_ERROR_BUF_TOO_SMALL as u32,
NotARef = ffi::or_error::OR_ERROR_NOTAREF as u32,
CantOpen = ffi::or_error::OR_ERROR_CANT_OPEN as u32,
ClosedStream = ffi::or_error::OR_ERROR_CLOSED_STREAM as u32,
NotFound = ffi::or_error::OR_ERROR_NOT_FOUND as u32,
InvalidParam = ffi::or_error::OR_ERROR_INVALID_PARAM as u32,
InvalidFormat = ffi::or_error::OR_ERROR_INVALID_FORMAT as u32,
Decompression = ffi::or_error::OR_ERROR_DECOMPRESSION as u32,
NotImpleemented = ffi::or_error::OR_ERROR_NOT_IMPLEMENTED as u32,
AlreadyOpen = ffi::or_error::OR_ERROR_ALREADY_OPEN as u32,
Unknown = ffi::or_error::OR_ERROR_UNKNOWN as u32,
}
impl std::convert::From<u32> for Error {
fn from(e: u32) -> Error {
if e > ffi::or_error::OR_ERROR_ALREADY_OPEN as u32 {
Error::Unknown
} else {
unsafe { std::mem::transmute(e) }
}
}
}
impl std::convert::From<ffi::or_error> for Error {
fn from(e: ffi::or_error) -> Error {
(e as u32).into()
}
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
impl std::error::Error for Error {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
None
}
}