6 releases

Uses new Rust 2024

new 0.1.6 May 15, 2025
0.1.5 May 15, 2025
0.1.3 Apr 21, 2025

#566 in Rust patterns

Download history 343/week @ 2025-04-16 75/week @ 2025-04-23 13/week @ 2025-04-30 7/week @ 2025-05-07

438 downloads per month
Used in 2 crates

Custom license

11KB

cdumay_error_yaml

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

Here's the documentation for your code in a README.md format:

A lightweight utility crate that converts YAML serialization and deserialization errors (serde_yaml::Error) into structured, typed errors using the cdumay_error framework.

This helps standardize error handling for Rust applications that deal with YAML configuration or data files, while enriching error details with structured context.

Features

  • Converts YAML-related errors into a standardized error format
  • Provides unique error codes, HTTP status codes, and descriptions
  • Supports rich contextual error metadata via BTreeMap
  • Integrates easily with the cdumay_error::ErrorConverter trait
  • Provides a convenient convert_result! macro for error conversion

Usage Example

Dependencies

[dependencies]
cdumay_error = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde-value = "0.7"
serde_yaml = "0.8"

Code sample

Using the YamlErrorConverter directly:

use cdumay_error::ErrorConverter;
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use cdumay_error_yaml::YamlErrorConverter;

#[derive(Serialize, Deserialize)]
struct Config {
    name: String,
    debug: bool,
}

fn serialize_config(config: &Config) -> Result<String, cdumay_error::Error> {
    serde_yaml::to_string(config).map_err(|e| {
        let mut ctx = BTreeMap::new();
        ctx.insert("config_name".into(), serde_value::Value::String(config.name.clone()));
        YamlErrorConverter::convert(&e, "Failed to serialize YAML config".into(), ctx)
    })
}

fn deserialize_config(input: &str) -> Result<Config, cdumay_error::Error> {
    serde_yaml::from_str::<Config>(input).map_err(|e| {
        let mut ctx = BTreeMap::new();
        ctx.insert("input".into(), serde_value::Value::String(input.to_string()));
        YamlErrorConverter::convert(&e, "Failed to deserialize YAML config".into(), ctx)
    })
}

Example Output

{
  "code": "YAML-00001",
  "status": 400,
  "kind": "Invalid YAML data",
  "message": "Failed to deserialize YAML config",
  "context": {
    "input": "invalid: yaml"
  }
}

Using the convert_result! macro:

use cdumay_error::ErrorConverter;
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use cdumay_error_yaml::convert_result;

#[derive(Serialize, Deserialize)]
struct Config {
    name: String,
    debug: bool,
}

fn serialize_config(config: &Config) -> Result<String, cdumay_error::Error> {
    let mut ctx = BTreeMap::new();
    ctx.insert("config_name".into(), serde_value::Value::String(config.name.clone()));
    convert_result!(serde_yaml::to_string(config), ctx, "Failed to serialize YAML config")
}

fn deserialize_config(input: &str) -> Result<Config, cdumay_error::Error> {
    convert_result!(serde_yaml::from_str::<Config>(input))
}

Dependencies

~2–2.9MB
~61K SLoC