| Crates.io | oxiderr-derive |
| lib.rs | oxiderr-derive |
| version | 0.1.0 |
| created_at | 2025-01-31 19:09:47.320522+00 |
| updated_at | 2025-01-31 19:09:47.320522+00 |
| description | Streamlining Error Handling in Rust |
| homepage | https://github.com/cdumay/oxiderr-derive |
| repository | https://github.com/cdumay/oxiderr-derive |
| max_upload_size | |
| id | 1537746 |
| size | 22,545 |
The oxiderr-derive crate provides procedural macros to simplify the creation of custom error types in Rust. By leveraging these macros,
developers can efficiently define error structures that integrate seamlessly with the oxiderr error management ecosystem.
Error handling in Rust often involves creating complex structs to represent various error kinds and implementing traits to provide context and
conversions. The oxiderr-derive crate automates this process by offering macros that generate the necessary boilerplate code, allowing for
more readable and maintainable error definitions.
oxiderr crate, ensuring consistent error handling patterns.To utilize oxiderr-derive in your project, follow these steps:
oxiderr with the feature derive in your Cargo.toml:[dependencies]
oxiderr = { version = "0.1", features = ["derive"] }
use oxiderr::{define_errors, define_kinds, AsError};
define_kinds! {
UnknownError = ("Err-00001", 500, "Unexpected error"),
IoError = ("Err-00001", 400, "IO error")
}
define_errors! {
Unexpected = UnknownError,
FileRead = IoError,
FileNotExists = IoError
}
In this example:
oxiderr::ErrorKind structs representing different categories of errors.oxiderr::Error struct that contains an ErrorKind and metadata.use std::fs::File;
use std::io::Read;
fn try_open_file(path: &str) -> oxiderr::Result<String> {
let mut file = File::open(path).map_err(|err| FileNotExists::new().set_message(err.to_string()))?;
let mut content = String::new();
file.read_to_string(&mut content).map_err(|err| FileRead::new().set_message(err.to_string()))?;
Ok(content)
}
fn main() {
let path = "example.txt";
match try_open_file(path) {
Ok(content) => println!("File content:\n{}", content),
Err(e) => eprintln!("{}", e),
}
}
This will output:
[Err-00001] Client::IoError::FileNotExists (400) - No such file or directory (os error 2)