errorcon

Crates.ioerrorcon
lib.rserrorcon
version0.1.0
sourcesrc
created_at2023-10-12 01:23:08.194404
updated_at2023-10-12 01:23:08.194404
descriptionA small crate for scoping errors and easier error conversion
homepagehttps://github.com/tesseract-one/
repositoryhttps://github.com/tesseract-one/Tesseract.rs
max_upload_size
id1000873
size5,894
Daniel Leping (dileping)

documentation

README

Error Context

Sometimes implementing a trait one has to return a specific error, while the code inside can return multiple various errors.

The problem becomes even more annoying when all the errors are defined in crates, that are not in control of the user and thus no From and nice looking ?.

Application level error

One of the sulutions is to create an app-level Error, that implements From for all the errors the app needs to deal with, and Into for the nasty trait function error (see above in the description).

Still one has to constantly use map_err in the code.

ErrorContext is to eliminate map_err

trait ApiToImplement {
    fn important_fn() -> Result<String, ApiError>;
}

impl ApiToImplement for MyStruct {
    fn important_fn() -> Result<String, ApiError> {
        MyAppError::context(|| {
            method1()?;
            method2()?;
            Ok(method3())
        })
    }
}

Considering that method1, method2, method3 all return different errors, the above looks much cleaner, then explicitely converting errors for each call:

method1().map_err(|e| /*conversion*/)?;
method2().map_err(|e| /*conversion*/)?;
method3().map_err(|e| /*conversion*/)

Licence

Apache 2.0

Commit count: 97

cargo fmt