howmany 3.0.0

A blazingly fast, intelligent code analysis tool with parallel processing, caching, and beautiful visualizations
Documentation
use std::io;
use thiserror::Error;

pub type Result<T> = std::result::Result<T, HowManyError>;

#[derive(Error, Debug)]
pub enum HowManyError {
    #[error("IO error: {0}")]
    Io(#[from] io::Error),

    #[error("File not found: {0}")]
    FileNotFound(String),

    #[error("Parse error: {0}")]
    ParseError(String),

    #[error("File processing error: {message}")]
    FileProcessing { message: String },

    #[error("Invalid configuration: {message}")]
    InvalidConfig { message: String },

    #[error("Filter error: {message}")]
    Filter { message: String },

    #[error("Counter error: {message}")]
    Counter { message: String },

    #[error("Display error: {message}")]
    Display { message: String },

    #[error("Serialization error: {0}")]
    Serialization(#[from] serde_json::Error),

    #[error("Regex error: {0}")]
    Regex(#[from] regex::Error),
}

impl HowManyError {
    pub fn file_processing(message: impl Into<String>) -> Self {
        Self::FileProcessing {
            message: message.into(),
        }
    }

    pub fn invalid_config(message: impl Into<String>) -> Self {
        Self::InvalidConfig {
            message: message.into(),
        }
    }

    pub fn filter(message: impl Into<String>) -> Self {
        Self::Filter {
            message: message.into(),
        }
    }

    pub fn counter(message: impl Into<String>) -> Self {
        Self::Counter {
            message: message.into(),
        }
    }

    pub fn display(message: impl Into<String>) -> Self {
        Self::Display {
            message: message.into(),
        }
    }
}