7 releases
Uses new Rust 2024
| 0.1.6 | May 26, 2025 |
|---|---|
| 0.1.5 | May 23, 2025 |
| 0.0.1 | Jul 17, 2024 |
#974 in Rust patterns
141 downloads per month
Used in 16 crates
(15 directly)
34KB
255 lines
cdumay_core
cdumay_core is a lightweight crate that provides custom Error and Result types
as drop-in replacements for Rust’s standard std::result::Result and std::error::Error,
with the primary goal of supporting serialization and deserialization via serde.
Motivation
Rust's standard error types do not implement Serialize and Deserialize due to
their generic and trait-based nature. This crate provides concrete, serializable
alternatives suitable for applications like:
- Returning structured errors from APIs (e.g., HTTP, RPC, WebAssembly)
- Communicating errors across process boundaries
Features
Error— A serializable error type with a message and optional cause.Result<T>— A simple alias forcrate::result::Result<T, Error>, fully serializable.- Full support for
serde::{Serialize, Deserialize}. - Optional integration with external crates via feature flags.
Example
use cdumay_core::{ErrorBuilder, Result};
fn do_work() -> Result<i32> {
Err(
ErrorBuilder::default()
.with_message("Something went wrong".to_string())
.build()
).into()
}
Optional Features
utoipa: Implementutoipa::ToSchematoErroractix-web: Allow to useResultandErrorwith actix
Compatibility
This crate is designed for applications that require custom serialization logic.
It is not a full replacement for std::result::Result in all use cases, especially
where standard error traits are expected.
Macros
Use the provided derive macros to define your error and error kind structs:
use cdumay_core::{define_errors, define_kinds};
define_kinds! {
UnknownError = (500, "Unexpected error"),
IoError = (500, "IO error")
}
define_errors! {
Unexpected = UnknownError,
FileRead = IoError,
Forbidden = (IoError, 403), // kind code overwrite 500 -> 403
FileNotFound = (IoError, 404, "File not found") // kind description overwrite
}
Dependencies
~0.6–14MB
~133K SLoC