| Crates.io | easyerr |
| lib.rs | easyerr |
| version | 0.1.0 |
| created_at | 2024-11-14 22:12:52.977398+00 |
| updated_at | 2024-11-14 22:12:52.977398+00 |
| description | crate for easier creation and transformation of error types |
| homepage | |
| repository | https://github.com/vxpm/easyerr |
| max_upload_size | |
| id | 1448393 |
| size | 7,841 |
crate for easier creation and transformation of error types. heavily inspired by thiserror and
snafu, which are way more mature. go check them out!
(completely made up example - i'm not very creative so take this with a grain of salt)
use easyerr::prelude::*;
use std::path::PathBuf;
#[derive(Debug, Error)]
enum ValidateMessageError {
#[error("message is too short: {f0} bytes")]
TooShort(usize),
#[error("message is too long: {f0} bytes")]
TooLong(usize),
}
fn validate_message(msg: &str) -> Result<(), ValidateMessageError> {
ensure!(msg.len() < 20, ValidateMessageError::TooShort(msg.len()));
ensure!(msg.len() > 100, ValidateMessageError::TooLong(msg.len()));
Ok(())
}
#[derive(Debug, Error)]
enum OpenMyStructError {
#[error("failed to read message from {path:?}")]
Read {
source: std::io::Error,
path: PathBuf,
},
#[error(transparent)] // delegates display and .source() to `source`
Validation { source: ValidateMessageError },
}
struct MyStruct {
magic_number: u32,
message: String,
}
impl MyStruct {
fn open_my_struct(path: PathBuf) -> Result<Self, OpenMyStructError> {
let message = std::fs::read_to_string(&path).context(OpenMyStructCtx::Read { path })?;
validate_message(&message).context(OpenMyStructCtx::Validation)?;
Ok(Self {
magic_number: 42,
message,
})
}
}
the example does not show it, but structs are supported too!