🦠
anomaly.rs
Error context library with support for type-erased sources and backtraces, targeting full support of all features on stable Rust, and with an eye towards serializing runtime errors using serde
.
About
anomaly.rs draws inspiration from libraries like error-chain
, failure
, and anyhow
to provide the following features:
- An
anomaly::Context
type which implsstd::error::Error
including support for type-erasedanomaly::BoxError
sources. Contexts are generic around an errorKind
, making the sources optional, and generally trying to strike a balance between typed errors andBox
-based type erasure. - Stringly typed errors using the
anomaly::Message
type, with a set of macros to construct these errors. - Backtrace support using the
backtrace
crate, and with it support for stable Rust where other libraries might require nightly. - Support for serializing errors using
serde
, allowing them to be submitted to exception reporting services and other structured logging systems.
Notably anomaly.rs does NOT include any sort of proc macro to define its error Kind
type. We recommend thiserror
for that purpose.
What makes anomaly.rs different?
anomaly::Context
and its Box
-ed wrapper, anomaly::Error
, are generic around a concrete Kind
type. Type erasure (based on std::error::Error
) is only used when constructing error chains:
- Concrete (generic) types for immediate errors
- Type erasure for error sources
- No additional traits beyond
std::error::Error
- Stringly typed
anomaly::Message
for where enum variants are too cumbersome or error messages are coming from e.g. API responses. - Structured logging of your errors using
serde
History
anomaly.rs is an extraction of a set of patterns and boilerplate from real-world libraries and applications, most notably Abscissa.
Requirements
- Rust 1.38+
License
Copyright © 2019-2020 iqlusion
anomaly.rs is distributed under the terms of either the MIT license or the Apache License (Version 2.0), at your option.
See LICENSE (Apache License, Version 2.0) file in the iqlusioninc/crates
toplevel directory of this repository or LICENSE-MIT for details.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.