error-forge 0.9.8

Pragmatic Rust error-handling framework with stable error metadata, contextual diagnostics, optional async support, and synchronous recovery primitives (retry, circuit-breaker, backoff). Optional #[derive(ModError)], declarative define_errors!, and feature-gated logging / tracing / serde adapters.
Documentation
[package]
name = "error-forge"
version = "0.9.8"
edition = "2021"
# MSRV. The crate uses `io::Error::other` (stabilised 1.74),
# `Mutex::new()` in const context (1.63 — fine), and Cargo lockfile
# format v4 (default since 1.78, can't be parsed by older
# toolchains). `1.81` is also the floor required by clippy's
# `incompatible_msrv` lint on the current source, and matches
# `mod-events` in this workspace for consistency. CI verifies on
# 1.81.0 in a dedicated MSRV job.
rust-version = "1.81"
readme = "README.md"
license = "Apache-2.0"

authors = [
    "James Gober <me@jamesgober.com>"
]

description = "Pragmatic Rust error-handling framework with stable error metadata, contextual diagnostics, optional async support, and synchronous recovery primitives (retry, circuit-breaker, backoff). Optional #[derive(ModError)], declarative define_errors!, and feature-gated logging / tracing / serde adapters."

keywords = [
    "error",
    "error-handling",
    "async",
    "resilience",
    "circuit-breaker"
]

categories = [
    "rust-patterns",
    "development-tools::debugging",
    "asynchronous",
    "development-tools"
]

documentation = "https://docs.rs/error-forge"
repository = "https://github.com/jamesgober/error-forge"
homepage = "https://github.com/jamesgober/error-forge"

# Configuration for docs.rs
[package.metadata.docs.rs]
# Enable all features when building docs
all-features = true
# Enable specific features for documentation
features = ["derive", "serde", "console", "backtrace"]
# Set specific rustdoc flags
rustdoc-args = ["--cfg", "docsrs"]


[dependencies]
thiserror = "1.0"
# `pastey` is a drop-in fork of `paste`. The original `paste` crate
# was archived by its author on 2024-10-07 (RUSTSEC-2024-0436,
# "unmaintained"); `pastey` keeps the public `paste!` macro API and
# behaviour, with the same `[<...>]` token-pasting and case-modifier
# syntax `define_errors!` relies on.
pastey = "0.2"
error-forge-derive = {version = "0.9.8", path = "./error-forge-derive", optional = true }
serde = { version = "1.0", optional = true, features = ["derive"] }
log = { version = "0.4", optional = true }
tracing = { version = "0.1", optional = true }
async-trait = { version = "0.1.74", optional = true }
rand = "0.8.5"

[features]
default = []
derive = ["error-forge-derive"]
serde = ["dep:serde"]
console = []
backtrace = []
log = ["dep:log"]
tracing = ["dep:tracing"]
registry = []
collector = []
context = []
async = ["dep:async-trait"]

[workspace]
members = ["error-forge-derive"]

[dev-dependencies]
serde_json = "1.0"
tokio = { version = "1.0", features = ["full", "test-util", "macros"] }