use std::path::PathBuf;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum Error {
    #[error("not implemented")]
    NotImplemented,

    #[error("file not found: `{0}`")]
    FileNotFound(PathBuf),

    #[error("file is not an image: `{0}`")]
    NotAnImage(PathBuf),

    #[error("path is not a file: `{0}`")]
    NotAFile(PathBuf),

    #[error("Image loading error")]
    ImageError(#[from] image::ImageError),

    #[error("IO error")]
    IOError(#[from] std::io::Error),

    #[error("JSON error")]
    JSONError(#[from] serde_json::error::Error),

    #[error("UTF8 Error")]
    UTF8Error(#[from] std::str::Utf8Error),
}

pub type Result<A> = std::result::Result<A, Error>;