6 releases
Uses new Rust 2024
new 0.1.5 | May 23, 2025 |
---|---|
0.1.4 | May 23, 2025 |
0.0.1 | Jul 17, 2024 |
#202 in WebAssembly
Used in 9 crates
(8 directly)
36KB
295 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::ToSchema
toError
actix-web
: Allow to useResult
andError
with 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.5–12MB
~137K SLoC