Crate cdumay_core

Source
Expand description

License: BSD-3-Clause cdumay_core on crates.io cdumay_core on docs.rs Source Code Repository

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 for crate::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: Implement utoipa::ToSchema to Error
  • actix-web: Allow to use Result and Error 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
}

Macros§

define_errors
Defines structured error types tied to specific ErrorKind constants.
define_kinds
Defines a set of constant ErrorKind values for reuse across the application.

Structs§

Error
A structured error type with categorized information.
ErrorBuilder
A builder for constructing detailed and structured Error instances.
ErrorKind
Represents a categorized error kind with associated metadata.

Traits§

ErrorConverter
A trait for converting custom errors into a structured application-level cdumay_core::Error.

Type Aliases§

Result