Crates.io | common_failures |
lib.rs | common_failures |
version | 0.2.0 |
source | src |
created_at | 2017-12-24 18:07:53.584707 |
updated_at | 2024-03-04 22:22:07.891198 |
description | DEPRECATED: Helpers for `failure`, including io::Error wrappers with paths, quick_main!, display_causes_and_backtrace. Deprecated, because `failure` is long-deprecated. |
homepage | |
repository | https://github.com/emk/subtitles-rs |
max_upload_size | |
id | 44322 |
size | 23,357 |
common_failures
: User-friendly io::Error
wrappers, quick_main!
and moreWe provide support for:
io::Error
wrappers with pathnames,quick_main!
.Basically, the goal is to make failure
as ergonomic as possible, so that
everybody can stop re-inventing common bits of supporting code.
io::Error
wrappersBy default, Rust's I/O errors do not include any information about the operation that failed. This means that you'll often see errors like:
No such file or directory (os error 2)
But it's much nicer for users if we print something like:
Error: error reading the file no-such-file.txt
caused by: No such file or directory (os error 2)
To do this, we can use io_read_context
and related functions:
use common_failures::prelude::*;
use std::fs::File;
use std::path::Path;
fn open_example(path: &Path) -> Result<File> {
Ok(File::open(path).io_read_context(path)?)
}
We also provide a support for formatting errors as strings, including the entire chain of "causes" of the error:
format!("{}", err.display_causes_and_backtrace());
quick_main!
macroThis is a replacement for quick_main!
from the error-chain
crate. It
generates a main
function that calls a second function returning Result<()>
,
and prints out any errors.
#[macro_use]
extern crate common_failures;
#[macro_use]
extern crate failure;
// This imports `Result`, `Error`, `failure::ResultExt`, and possibly
// other useful extension traits, to get you a minimal useful API.
use common_failures::prelude::*;
// Uncomment this to define a `main` function that calls `run`, and prints
// any errors that it returns to standard error.
quick_main!(run);
fn run() -> Result<()> {
if true {
Ok(())
} else {
Err(format_err!("an error occurred"))
}
}