purecv 0.1.4

A pure Rust, high-performance computer vision library focused on safety and portability.
Documentation
/*
 *  error.rs
 *  purecv
 *
 *  This file is part of purecv - OpenCV.
 *
 *  purecv is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  purecv is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with purecv.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  As a special exception, the copyright holders of this library give you
 *  permission to link this library with independent modules to produce an
 *  executable, regardless of the license terms of these independent modules, and to
 *  copy and distribute the resulting executable under terms of your choice,
 *  provided that you also meet, for each linked independent module, the terms and
 *  conditions of the license of that module. An independent module is a module
 *  which is neither derived from nor based on this library. If you modify this
 *  library, you may extend this exception to your version of the library, but you
 *  are not obligated to do so. If you do not wish to do so, delete this exception
 *  statement from your version.
 *
 *  Copyright 2026 WebARKit.
 *
 *  Author(s): Walter Perdan @kalwalt https://github.com/kalwalt
 *
 */

use std::fmt;

/// Custom error type for the purecv library.
#[derive(Debug, Clone, PartialEq)]
pub enum PureCvError {
    InvalidDimensions(String),
    IncompatibleChannels(String),
    OutOfBounds(String),
    InvalidInput(String),
    InternalError(String),
    NotImplemented(String),
}

impl fmt::Display for PureCvError {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            PureCvError::InvalidDimensions(msg) => write!(f, "Invalid dimensions: {}", msg),
            PureCvError::IncompatibleChannels(msg) => write!(f, "Incompatible channels: {}", msg),
            PureCvError::OutOfBounds(msg) => write!(f, "Out of bounds: {}", msg),
            PureCvError::InvalidInput(msg) => write!(f, "Invalid input: {}", msg),
            PureCvError::InternalError(msg) => write!(f, "Internal error: {}", msg),
            PureCvError::NotImplemented(msg) => write!(f, "Not implemented: {}", msg),
        }
    }
}

impl std::error::Error for PureCvError {}

/// Standard result type for purecv.
pub type Result<T> = std::result::Result<T, PureCvError>;