mirror of
https://github.com/haraldh/chainerror.git
synced 2025-05-29 21:18:07 +02:00
make ChainError Send + Sync
This commit is contained in:
parent
51af6da378
commit
a558c35ba4
20 changed files with 84 additions and 85 deletions
|
@ -3,12 +3,12 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func3() -> Result<(), Box<Error>> {
|
||||
fn func3() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
|
|
@ -2,25 +2,25 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(_) = do_some_io() {
|
||||
Err("func2 error")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(_) = func2() {
|
||||
Err("func1 error")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func1()
|
||||
}
|
||||
|
|
|
@ -3,14 +3,14 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
@ -39,7 +39,7 @@ fn func1() -> ChainResult<(), Func1ErrorKind> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
match e.kind() {
|
||||
Func1ErrorKind::Func2 => eprintln!("Main Error Report: func1 error calling func2"),
|
||||
|
|
|
@ -3,14 +3,14 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
@ -45,7 +45,7 @@ fn func1() -> ChainResult<(), Func1ErrorKind> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
match e.kind() {
|
||||
Func1ErrorKind::Func2 => eprintln!("Main Error Report: func1 error calling func2"),
|
||||
|
|
|
@ -3,14 +3,14 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
@ -54,7 +54,7 @@ fn handle_func1errorkind(e: &Func1ErrorKind) {
|
|||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
match *e {
|
||||
Func1ErrorKind::Func2 => eprintln!("Main Error Report: func1 error calling func2"),
|
||||
|
|
|
@ -2,14 +2,14 @@ pub mod mycrate {
|
|||
use chainerror::*;
|
||||
use std::io;
|
||||
|
||||
fn do_some_io() -> std::result::Result<(), Box<std::error::Error>> {
|
||||
fn do_some_io() -> std::result::Result<(), Box<std::error::Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> std::result::Result<(), Box<std::error::Error>> {
|
||||
fn func2() -> std::result::Result<(), Box<std::error::Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
|
|
@ -4,25 +4,25 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = do_some_io() {
|
||||
Err(cherr!(e, "func2 error"))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func2() {
|
||||
Err(cherr!(e, "func1 error"))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func1()
|
||||
}
|
||||
|
|
|
@ -4,22 +4,22 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
do_some_io().map_err(|e| cherr!(e, "func2 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(|e| cherr!(e, "func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
eprintln!("{:?}", e);
|
||||
}
|
||||
|
|
|
@ -3,23 +3,23 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
eprintln!("{:?}", e);
|
||||
}
|
||||
|
|
|
@ -3,18 +3,18 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func2() {
|
||||
if let Some(s) = e.source() {
|
||||
eprintln!("func2 failed because of '{}'", s);
|
||||
|
@ -24,7 +24,7 @@ fn func1() -> Result<(), Box<Error>> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
eprintln!("{}", e);
|
||||
}
|
||||
|
|
|
@ -3,26 +3,26 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
eprintln!("Error: {}", e);
|
||||
let mut s = e.as_ref();
|
||||
let mut s : &(dyn Error) = e.as_ref();
|
||||
while let Some(c) = s.source() {
|
||||
if let Some(ioerror) = c.downcast_ref::<io::Error>() {
|
||||
eprintln!("caused by: std::io::Error: {}", ioerror);
|
||||
|
|
|
@ -3,23 +3,23 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!("Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!("func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
eprintln!("Error: {}", e);
|
||||
if let Some(s) = e.downcast_chain_ref::<String>() {
|
||||
|
|
|
@ -3,14 +3,14 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
@ -18,12 +18,12 @@ fn func2() -> Result<(), Box<Error>> {
|
|||
|
||||
derive_str_cherr!(Func1Error);
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!(Func1Error, "func1 error"))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
if let Some(f1err) = e.downcast_chain_ref::<Func1Error>() {
|
||||
eprintln!("Func1Error: {}", f1err);
|
||||
|
|
|
@ -3,14 +3,14 @@ use std::error::Error;
|
|||
use std::io;
|
||||
use std::result::Result;
|
||||
|
||||
fn do_some_io() -> Result<(), Box<Error>> {
|
||||
fn do_some_io() -> Result<(), Box<Error + Send + Sync>> {
|
||||
Err(io::Error::from(io::ErrorKind::NotFound))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
derive_str_cherr!(Func2Error);
|
||||
|
||||
fn func2() -> Result<(), Box<Error>> {
|
||||
fn func2() -> Result<(), Box<Error + Send + Sync>> {
|
||||
let filename = "foo.txt";
|
||||
do_some_io().map_err(mstrerr!(Func2Error, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
|
@ -19,14 +19,14 @@ fn func2() -> Result<(), Box<Error>> {
|
|||
derive_str_cherr!(Func1ErrorFunc2);
|
||||
derive_str_cherr!(Func1ErrorIO);
|
||||
|
||||
fn func1() -> Result<(), Box<Error>> {
|
||||
fn func1() -> Result<(), Box<Error + Send + Sync>> {
|
||||
func2().map_err(mstrerr!(Func1ErrorFunc2, "func1 error calling func2"))?;
|
||||
let filename = "bar.txt";
|
||||
do_some_io().map_err(mstrerr!(Func1ErrorIO, "Error reading '{}'", filename))?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<Error>> {
|
||||
fn main() -> Result<(), Box<Error + Send + Sync>> {
|
||||
if let Err(e) = func1() {
|
||||
if let Some(s) = e.downcast_ref::<ChainError<Func1ErrorIO>>() {
|
||||
eprintln!("Func1ErrorIO:\n{:?}", s);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue