mirror of
https://github.com/haraldh/chainerror.git
synced 2025-01-30 16:46:42 +01: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
15
.github/workflows/rust.yml
vendored
15
.github/workflows/rust.yml
vendored
|
@ -19,7 +19,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
version:
|
||||
- 1.46.0
|
||||
- 1.54.0
|
||||
- stable
|
||||
- beta
|
||||
- nightly
|
||||
|
@ -70,16 +70,3 @@ jobs:
|
|||
with:
|
||||
command: clippy
|
||||
args: -- -D warnings
|
||||
|
||||
readme:
|
||||
name: cargo readme
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: dtolnay/rust-toolchain@master
|
||||
with:
|
||||
toolchain: stable
|
||||
profile: minimal
|
||||
override: true
|
||||
- run: cargo install cargo-readme
|
||||
- run: cargo readme > README.md && git diff --exit-code
|
||||
|
|
10
README.md
10
README.md
|
@ -1,9 +1,6 @@
|
|||
[![Crate](https://img.shields.io/crates/v/chainerror.svg)](https://crates.io/crates/chainerror)
|
||||
[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/chainerror/)
|
||||
[![Coverage Status](https://coveralls.io/repos/github/haraldh/chainerror/badge.svg?branch=master)](https://coveralls.io/github/haraldh/chainerror?branch=master)
|
||||
[![Workflow Status](https://github.com/haraldh/chainerror/workflows/Rust/badge.svg)](https://github.com/haraldh/chainerror/actions?query=workflow%3A%22Rust%22)
|
||||
[![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/haraldh/chainerror.svg)](https://isitmaintained.com/project/haraldh/chainerror "Average time to resolve an issue")
|
||||
[![Percentage of issues still open](https://isitmaintained.com/badge/open/haraldh/chainerror.svg)](https://isitmaintained.com/project/haraldh/chainerror "Percentage of issues still open")
|
||||
[![Coverage Status](https://codecov.io/gh/haraldh/chainerror/branch/master/graph/badge.svg?token=HGLJFGA11B)](https://codecov.io/gh/haraldh/chainerror)
|
||||
![Maintenance](https://img.shields.io/badge/maintenance-activly--developed-brightgreen.svg)
|
||||
|
||||
# chainerror
|
||||
|
@ -93,11 +90,6 @@ Along with the `ChainError<T>` struct, `chainerror` comes with some useful helpe
|
|||
|
||||
Debug information is worth it!
|
||||
|
||||
### Features
|
||||
|
||||
`display-cause`
|
||||
: turn on printing a backtrace of the errors in `Display`
|
||||
|
||||
## Tutorial
|
||||
|
||||
Read the [Tutorial](https://haraldh.github.io/chainerror/tutorial1.html)
|
||||
|
|
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…
Reference in a new issue