anomaly 0.1.1

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

anomaly.rs 🦠 

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.

Documentation

About

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.

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.36+

License

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.

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.