mirror of
https://github.com/haraldh/chainerror.git
synced 2025-06-20 21:44:41 +02:00
chore: remove need for cargo readme
Just use `#![doc = include_str!("../README.md")]` Signed-off-by: Harald Hoyer <harald@hoyer.xyz>
This commit is contained in:
parent
165c1b939c
commit
cf62d1a9f9
3 changed files with 3 additions and 121 deletions
src
99
src/lib.rs
99
src/lib.rs
|
@ -1,101 +1,4 @@
|
|||
//! `chainerror` provides an error backtrace without doing a real backtrace, so even after you `strip` your
|
||||
//! binaries, you still have the error backtrace.
|
||||
//!
|
||||
//! Having nested function returning errors, the output doesn't tell where the error originates from.
|
||||
//!
|
||||
//! ```rust
|
||||
//! use std::path::PathBuf;
|
||||
//!
|
||||
//! type BoxedError = Box<dyn std::error::Error + Send + Sync>;
|
||||
//! fn read_config_file(path: PathBuf) -> Result<(), BoxedError> {
|
||||
//! // do stuff, return other errors
|
||||
//! let _buf = std::fs::read_to_string(&path)?;
|
||||
//! // do stuff, return other errors
|
||||
//! Ok(())
|
||||
//! }
|
||||
//!
|
||||
//! fn process_config_file() -> Result<(), BoxedError> {
|
||||
//! // do stuff, return other errors
|
||||
//! let _buf = read_config_file("foo.txt".into())?;
|
||||
//! // do stuff, return other errors
|
||||
//! Ok(())
|
||||
//! }
|
||||
//!
|
||||
//! fn main() {
|
||||
//! if let Err(e) = process_config_file() {
|
||||
//! eprintln!("Error:\n{:?}", e);
|
||||
//! }
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! This gives the output:
|
||||
//! ```console
|
||||
//! Error:
|
||||
//! Os { code: 2, kind: NotFound, message: "No such file or directory" }
|
||||
//! ```
|
||||
//! and you have no idea where it comes from.
|
||||
//!
|
||||
//!
|
||||
//! With `chainerror`, you can supply a context and get a nice error backtrace:
|
||||
//!
|
||||
//! ```rust
|
||||
//! use chainerror::prelude::v1::*;
|
||||
//! use std::path::PathBuf;
|
||||
//!
|
||||
//! type BoxedError = Box<dyn std::error::Error + Send + Sync>;
|
||||
//! fn read_config_file(path: PathBuf) -> Result<(), BoxedError> {
|
||||
//! // do stuff, return other errors
|
||||
//! let _buf = std::fs::read_to_string(&path).context(format!("Reading file: {:?}", &path))?;
|
||||
//! // do stuff, return other errors
|
||||
//! Ok(())
|
||||
//! }
|
||||
//!
|
||||
//! fn process_config_file() -> Result<(), BoxedError> {
|
||||
//! // do stuff, return other errors
|
||||
//! let _buf = read_config_file("foo.txt".into()).context("read the config file")?;
|
||||
//! // do stuff, return other errors
|
||||
//! Ok(())
|
||||
//! }
|
||||
//!
|
||||
//! fn main() {
|
||||
//! if let Err(e) = process_config_file() {
|
||||
//! eprintln!("Error:\n{:?}", e);
|
||||
//! # let s = format!("{:?}", e);
|
||||
//! # let lines = s.lines().collect::<Vec<_>>();
|
||||
//! # assert_eq!(lines.len(), 5);
|
||||
//! # assert!(lines[0].starts_with("src/lib.rs:"));
|
||||
//! # assert_eq!(lines[1], "Caused by:");
|
||||
//! # assert!(lines[2].starts_with("src/lib.rs:"));
|
||||
//! # assert_eq!(lines[3], "Caused by:");
|
||||
//! # assert_eq!(lines[4], "Os { code: 2, kind: NotFound, message: \"No such file or directory\" }");
|
||||
//! }
|
||||
//! # else { panic!(); }
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
//! with the output:
|
||||
//! ```console
|
||||
//! Error:
|
||||
//! examples/simple.rs:14:51: read the config file
|
||||
//! Caused by:
|
||||
//! examples/simple.rs:7:47: Reading file: "foo.txt"
|
||||
//! Caused by:
|
||||
//! Os { code: 2, kind: NotFound, message: "No such file or directory" }
|
||||
//! ```
|
||||
//!
|
||||
//! `chainerror` uses `.source()` of `std::error::Error` along with `#[track_caller]` and `Location` to provide a nice debug error backtrace.
|
||||
//! It encapsulates all types, which have `Display + Debug` and can store the error cause internally.
|
||||
//!
|
||||
//! Along with the `ChainError<T>` struct, `chainerror` comes with some useful helper macros to save a lot of typing.
|
||||
//!
|
||||
//! `chainerror` has no dependencies!
|
||||
//!
|
||||
//! Debug information is worth it!
|
||||
//!
|
||||
//! # Tutorial
|
||||
//!
|
||||
//! Read the [Tutorial](https://haraldh.github.io/chainerror/tutorial1.html)
|
||||
|
||||
#![doc = include_str!("../README.md")]
|
||||
#![deny(clippy::all)]
|
||||
#![allow(clippy::needless_doctest_main)]
|
||||
#![deny(missing_docs)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue