error-kit 0.1.0

A comprehensive error handling library for Rust applications
Documentation
<!-- markdownlint-disable MD036 MD033 -->

# error-kit 🦀 ⚡

[![Crates.io](https://img.shields.io/crates/v/error-kit)](https://crates.io/crates/error-kit)
[![Documentation](https://docs.rs/error-kit/badge.svg)](https://docs.rs/error-kit)
[![License: BSD-3-Clause](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
[![Dependency Status](https://deps.rs/repo/github/dominikj111/resourcely/status.svg)](https://deps.rs/repo/github/dominikj111/resourcely)
[![Made with Rust](https://img.shields.io/badge/Made%20with-Rust-1f425f.svg?logo=rust)](https://www.rust-lang.org/)

A comprehensive, developer-focused error handling infrastructure built on top of `thiserror`, providing standardized error messages, common error patterns, and ergonomic helper functions.

## Design Principles 🏗️

This crate provides a "batteries-included" approach to error handling with these core principles:

### Developer-Focused Messages 👩‍💻

Error messages provide technical context for developers, not end-user UI text.

### Type-Safe Enums Over Error Codes 🔢

Uses `thiserror::Error` derive macro for compile-time checking, pattern matching, and IDE support.

### Helper Functions Over Macros 🚀

Explicit, debuggable functions instead of complex macros:

```rust
// Clear and debuggable ✨
CommonError::io_error("Failed to read config file")

// Instead of macro magic 🪄❌
error!("Failed to read config file")
```

### Centralized Message Constants 📚

Error messages defined as constants in a dedicated `messages` module for consistency and maintainability.

## Usage Examples 💡

### Adding error-kit to Your Project 📦

```rust
// Add to Cargo.toml
[dependencies]
error-kit = "0.1.0"
```

### Using error-kit 🚀

```rust
use error_kit::CommonError;

// Using helper functions 🔧
let io_err = CommonError::io_error("Failed to read config file");
let filename_err = CommonError::filename_error();

// Using predefined message constants 📝
let timeout_err = CommonError::Timeout; // Uses messages::TIMEOUT_EXCEEDED

// Simple error handling 🎯
let result: Result<Data, CommonError> = some_operation();

match result {
    Err(e) => eprintln!("Error: {}", e),
    Ok(data) => process_data(data),
}

// Or pattern matching when you need specific handling
match result {
    Err(CommonError::Io(_)) => handle_io_error(),
    Err(CommonError::Timeout) => retry_operation(),
    Err(CommonError::FilenameError) => handle_filename_issue(),
    Err(e) => eprintln!("Error: {}", e),
    Ok(data) => process_data(data),
}
```

## Module Structure 🏗️

The `error-kit` crate is organized into focused modules:

- **`messages`**: Centralized error message constants
- **`constructors`**: Ergonomic constructor functions
- **`types`**: Main error enum with `thiserror` integration

```rust
use error_kit::{
    CommonError,          // Main error type 🎯
    messages,             // Message constants 📚
    constructors,         // Helper constructor functions 🚀
};
```

## Use Cases 🎯

- **Library Development**: Structured error types with consistent messaging
- **Application Development**: Standardized error handling with reduced boilerplate
- **Error Infrastructure**: Foundation for domain-specific error crates and company standards

## Future Vision 🔮

This crate aims to become the go-to foundation for error handling, providing:

- Domain-specific error modules (network, filesystem, parsing, etc.)
- Error reporting utilities and formatters
- Integration helpers for popular crates
- Best practice examples and patterns
- Community-driven error message standards

---

## Contributing 🤝

We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## License 📄

This project is licensed under the BSD 3-Clause License - see the [LICENSE](LICENSE) file for details.