mirror of
https://github.com/haraldh/chainerror.git
synced 2025-05-29 21:18:07 +02:00
use #[track_caller]
and Location
This commit is contained in:
parent
e2815321bc
commit
356335e807
21 changed files with 515 additions and 548 deletions
|
@ -2,7 +2,7 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
|
@ -11,14 +11,14 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func3() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(format!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> ChainResult<(), Func2Error> {
|
||||
func3().map_err(mstrerr!(Func2Error, "func2 error: calling func3"))?;
|
||||
func3().cherr(Func2Error(format!("func2 error: calling func3")))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -43,9 +43,9 @@ impl ::std::fmt::Debug for Func1Error {
|
|||
}
|
||||
|
||||
fn func1() -> ChainResult<(), Func1Error> {
|
||||
func2().map_err(|e| cherr!(e, Func1Error::Func2))?;
|
||||
func2().cherr(Func1Error::Func2)?;
|
||||
let filename = String::from("bar.txt");
|
||||
do_some_io().map_err(|e| cherr!(e, Func1Error::IO(filename)))?;
|
||||
do_some_io().cherr(Func1Error::IO(filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -68,5 +68,7 @@ fn main() {
|
|||
}
|
||||
|
||||
eprintln!("\nDebug Error:\n{:?}", e);
|
||||
|
||||
eprintln!("\nAlternative Debug Error:\n{:#?}", e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -12,7 +12,7 @@ derive_str_cherr!(Func2Error);
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -33,9 +33,9 @@ impl ::std::fmt::Display for Func1ErrorKind {
|
|||
impl ::std::error::Error for Func1ErrorKind {}
|
||||
|
||||
fn func1() -> ChainResult<(), Func1ErrorKind> {
|
||||
func2().map_err(|e| cherr!(e, Func1ErrorKind::Func2))?;
|
||||
func2().cherr(Func1ErrorKind::Func2)?;
|
||||
let filename = String::from("bar.txt");
|
||||
do_some_io().map_err(|e| cherr!(e, Func1ErrorKind::IO(filename)))?;
|
||||
do_some_io().cherr(Func1ErrorKind::IO(filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -12,7 +12,7 @@ derive_str_cherr!(Func2Error);
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -39,9 +39,9 @@ impl ::std::fmt::Debug for Func1ErrorKind {
|
|||
impl ::std::error::Error for Func1ErrorKind {}
|
||||
|
||||
fn func1() -> ChainResult<(), Func1ErrorKind> {
|
||||
func2().map_err(|e| cherr!(e, Func1ErrorKind::Func2))?;
|
||||
func2().cherr(Func1ErrorKind::Func2)?;
|
||||
let filename = String::from("bar.txt");
|
||||
do_some_io().map_err(|e| cherr!(e, Func1ErrorKind::IO(filename)))?;
|
||||
do_some_io().cherr(Func1ErrorKind::IO(filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -12,7 +12,7 @@ derive_str_cherr!(Func2Error);
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -39,9 +39,9 @@ impl ::std::fmt::Debug for Func1ErrorKind {
|
|||
impl ::std::error::Error for Func1ErrorKind {}
|
||||
|
||||
fn func1() -> ChainResult<(), Func1ErrorKind> {
|
||||
func2().map_err(|e| cherr!(e, Func1ErrorKind::Func2))?;
|
||||
func2().cherr(Func1ErrorKind::Func2)?;
|
||||
let filename = String::from("bar.txt");
|
||||
do_some_io().map_err(|e| cherr!(e, Func1ErrorKind::IO(filename)))?;
|
||||
do_some_io().cherr(Func1ErrorKind::IO(filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
pub mod mycrate {
|
||||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::io;
|
||||
|
||||
fn do_some_io() -> std::result::Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
|
@ -11,7 +11,7 @@ pub mod mycrate {
|
|||
|
||||
fn func2() -> std::result::Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -35,9 +35,9 @@ pub mod mycrate {
|
|||
}
|
||||
|
||||
pub fn func1() -> Result<()> {
|
||||
func2().map_err(|e| cherr!(e, ErrorKind::Func2))?;
|
||||
func2().cherr(ErrorKind::Func2)?;
|
||||
let filename = String::from("bar.txt");
|
||||
do_some_io().map_err(|e| cherr!(e, ErrorKind::IO(filename)))?;
|
||||
do_some_io().cherr(ErrorKind::IO(filename))?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
pub mod mycrate {
|
||||
use std::io;
|
||||
|
||||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
|
||||
fn do_some_io(_f: &str) -> std::result::Result<(), io::Error> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
|
@ -12,8 +12,7 @@ pub mod mycrate {
|
|||
|
||||
fn func2() -> std::result::Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io(filename)
|
||||
.map_err(|e| cherr!(e, Func2Error(format!("Error reading '{}'", filename))))?;
|
||||
do_some_io(filename).cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -82,21 +81,19 @@ pub mod mycrate {
|
|||
}
|
||||
|
||||
pub fn func1() -> Result<()> {
|
||||
func2().map_err(|e| cherr!(e, ErrorKind::from(&e)))?;
|
||||
func2().map_err(|e| ErrorKind::from(&e))?;
|
||||
|
||||
let filename = "bar.txt";
|
||||
|
||||
do_some_io(filename)
|
||||
.map_err(|e| cherr!(e, ErrorKind::from_io_error(&e, filename.into())))?;
|
||||
do_some_io(filename).map_err(|e| cherr!(e, ErrorKind::IO(filename.into())))?;
|
||||
do_some_io(filename).map_err(|e| cherr!(e, ErrorKind::from(&e)))?;
|
||||
do_some_io(filename).map_err(minto_cherr!(ErrorKind))?;
|
||||
do_some_io(filename).map_cherr(|e| ErrorKind::from_io_error(&e, filename.into()))?;
|
||||
do_some_io(filename).map_cherr(|_| ErrorKind::IO(filename.into()))?;
|
||||
do_some_io(filename).map_cherr(|e| ErrorKind::from(e))?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn super_func1() -> Result<()> {
|
||||
func1().map_err(minto_cherr!(ErrorKind))?;
|
||||
func1().map_cherr(|e| ErrorKind::from(e))?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
|
@ -11,14 +11,14 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
if let Err(e) = do_some_io() {
|
||||
Err(cherr!(e, "func2 error"))?;
|
||||
Err(e).cherr("func2 error")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
if let Err(e) = func2() {
|
||||
Err(cherr!(e, "func1 error"))?;
|
||||
Err(e).cherr("func1 error")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
|
@ -10,12 +10,12 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
}
|
||||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
do_some_io().map_err(|e| cherr!(e, "func2 error"))?;
|
||||
do_some_io().cherr("func2 error")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(|e| cherr!(e, "func1 error"))?;
|
||||
func2().cherr("func1 error")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -10,12 +10,12 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(format!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
func2().cherr("func1 error")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -10,7 +10,7 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(format!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@ fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
if let Err(e) = func2() {
|
||||
if let Some(s) = e.source() {
|
||||
eprintln!("func2 failed because of '{}'", s);
|
||||
Err(e).map_err(mstrerr!("func1 error"))?;
|
||||
Err(e).cherr("func1 error")?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -10,12 +10,12 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(format!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
func2().cherr("func1 error")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -10,12 +10,12 @@ fn do_some_io() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(format!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
func2().cherr(format!("func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -12,14 +12,14 @@ derive_str_cherr!(Func2Error);
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func1Error);
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!(Func1Error, "func1 error"))?;
|
||||
func2().cherr(Func1Error(format!("func1 error")))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use chainerror::*;
|
||||
use chainerror::prelude::v1::*;
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::result::Result;
|
||||
|
@ -12,7 +12,7 @@ derive_str_cherr!(Func2Error);
|
|||
|
||||
fn func2() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func2Error(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -20,9 +20,9 @@ derive_str_cherr!(Func1ErrorFunc2);
|
|||
derive_str_cherr!(Func1ErrorIO);
|
||||
|
||||
fn func1() -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!(Func1ErrorFunc2, "func1 error calling func2"))?;
|
||||
func2().cherr(Func1ErrorFunc2(format!("func1 error calling func2")))?;
|
||||
let filename = "bar.txt";
|
||||
do_some_io().map_err(mstrerr!(Func1ErrorIO, "Error reading '{}'", filename))?;
|
||||
do_some_io().cherr(Func1ErrorIO(format!("Error reading '{}'", filename)))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue