#backtrace #error-handling #serde #exception-reporting

no-std anomaly

Error context library with support for type-erased sources and backtraces

1 unstable release

✓ Uses Rust 2018 edition

0.1.2 Jan 13, 2020
0.1.1 Jan 1, 2020
0.1.0 Jan 1, 2020
0.0.0 Aug 30, 2019

#135 in Rust patterns

29 downloads per month
Used in 4 crates (3 directly)

Apache-2.0 OR MIT

134 lines

anomaly.rs 🦠 iqlusion

Crate Docs Apache 2.0/MIT Licensed MSRV Safety Dance Build Status Gitter Chat

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.



anomaly.rs draws inspiration from libraries like error-chain, failure, and anyhow to provide the following features:

  • An anomaly::Context type which impls std::error::Error including support for type-erased anomaly::BoxError sources. Contexts are generic around an error Kind, making the sources optional, and generally trying to strike a balance between typed errors and Box-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.
  • (Forthcoming) Support for serializing errors using serde, allowing them to be submitted to exception reporting services.

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 is generic around a concrete Kind type, and only uses type erasure (based on std::error::Error) 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.


anomaly.rs is an extraction of a set of patterns and boilerplate from real-world libraries and applications, most notably Abscissa.


  • Rust 1.36+


Copyright © 2019 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.


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.


~18K SLoC