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
438 downloads per month
Used in 2 crates
11KB
cdumay_error_yaml
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