# error-battery-pack
Error handling done well. A [battery pack](https://crates.io/crates/battery-pack) that curates the essential error handling crates for Rust.
## Quick Start
```sh
cargo bp add error
```
This adds `anyhow` and `thiserror` to your `[dependencies]` and sets up build-time validation.
## When to Use Which
- **anyhow** — Use in application code (binaries, CLI tools, servers) where you want to propagate errors with context and don't need callers to match on specific variants.
- **thiserror** — Use in library code where callers need to inspect and match on specific error variants.
They compose naturally: library functions return `Result<T, MyError>` (thiserror), and application code wraps them with `anyhow::Result<T>` adding `.context()`.
## Examples
Run the included examples to see the patterns in action:
```sh
# Basic anyhow usage with .context()
cargo run --example basic -p error-battery-pack
# Custom error types with thiserror + anyhow interop
cargo run --example custom-errors -p error-battery-pack
# Multi-layer error context chains
cargo run --example context-chain -p error-battery-pack
```
## Acknowledgments
The skill files in `skills/` are adapted from an error handling guide originally authored by [@terminalwitchcraft](https://github.com/terminalwitchcraft).
## License
Licensed under either of:
- [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
- [MIT license](https://opensource.org/license/mit)
at your option.