#[derive(Debug, derive_more::Display, derive_more::From)]
#[non_exhaustive]
pub enum Error {
#[display("{}", _0)]
#[from(xcb::Error, xcb::ConnError, xcb::ProtocolError)]
Xcb(xcb::Error),
#[display("invalid screen number: {}", _0)]
BadScreenNumber(i32),
#[display("unsupported visual class: {}-bit {:?}", _0, _1)]
UnsupportedVisual(u8, xcb::x::VisualClass),
#[display("could not find root visual: {}", _0)]
CouldNotFindRootVisual(xcb::x::Visualid),
#[display("image {}x{} too large", _0, _1)]
ImageTooLarge(u32, u32),
#[display("{}-byte buffer does not match {}x{} image", _0, _1, _2)]
BadBufferSize(usize, u16, u16),
#[cfg(feature = "image")]
#[display("{}", _0)]
#[from]
Image(image::error::ImageError),
}
#[derive(Debug, PartialEq, Eq, derive_more::Display)]
#[display("invalid screen number: {}", _0)]
pub struct BadScreenNumber(pub i32);
impl From<BadScreenNumber> for Error {
fn from(err: BadScreenNumber) -> Error { Error::BadScreenNumber(err.0) }
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, derive_more::Display)]
#[display("image too large: {}x{}", _0, _1)]
pub struct ImageTooLarge(pub u32, pub u32);
impl From<ImageTooLarge> for Error {
fn from(err: ImageTooLarge) -> Error { Error::ImageTooLarge(err.0, err.1) }
}
#[derive(Debug, derive_more::Display)]
#[display("buffer {} does not match {}x{} image size", _0, _1, _2)]
pub struct BadBufferSize(pub usize, pub u16, pub u16);
impl From<BadBufferSize> for Error {
fn from(err: BadBufferSize) -> Error {
Error::BadBufferSize(err.0, err.1, err.2)
}
}
impl std::error::Error for Error {}
impl std::error::Error for BadScreenNumber {}
impl std::error::Error for BadBufferSize {}