Expand description
A lightweight utility crate that wraps TOML serialization and deserialization errors (toml::ser::Error, toml::de::Error) and converts them into structured, typed errors using the cdumay_core framework.
This helps standardize error handling in Rust applications that process TOML configuration or data files, while enriching error details with structured context.
§Features
- Categorizes TOML-related errors into
SerializationandDeserialization - Provides unique error codes, HTTP status codes, and descriptions
- Supports rich contextual error metadata via
BTreeMap - Uses the
cdumay_core::ErrorConvertertrait for easy integration - Provides a convenient macros for error conversion
§Usage Example
§Dependencies
[dependencies]
cdumay_core = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde-value = "0.7"
toml = "0.8"§Code sample
Using the TomlDeserializeErrorConverter and TomlSerializeErrorConverter directly:
use cdumay_core::ErrorConverter;
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use cdumay_error_toml::{TomlDeserializeErrorConverter, TomlSerializeErrorConverter};
#[derive(Serialize, Deserialize)]
struct Config {
name: String,
debug: bool,
}
fn serialize_config(config: &Config) -> cdumay_core::Result<String> {
toml::to_string(config).map_err(|e| {
let mut ctx = BTreeMap::new();
ctx.insert("config_name".into(), serde_value::Value::String(config.name.clone()));
TomlSerializeErrorConverter::convert(&e, "Failed to serialize TOML config".into(), ctx)
})
}
fn deserialize_config(input: &str) -> cdumay_core::Result<Config> {
toml::from_str::<Config>(input).map_err(|e| {
let mut ctx = BTreeMap::new();
ctx.insert("input".into(), serde_value::Value::String(input.to_string()));
TomlDeserializeErrorConverter::convert(&e, "Failed to deserialize TOML config".into(), ctx)
})
}§Example Output
{
"code": "TOML-00001",
"status": 400,
"kind": "Invalid Toml data",
"message": "Failed to deserialize TOML config",
"context": {
"input": "[invalid toml]"
}
}Using the macros:
use cdumay_core::ErrorConverter;
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use cdumay_error_toml::{convert_deserialize_result, convert_serialize_result};
#[derive(Serialize, Deserialize)]
struct Config {
name: String,
debug: bool,
}
fn serialize_config(config: &Config) -> cdumay_core::Result<String> {
let mut ctx = BTreeMap::new();
ctx.insert("config_name".into(), serde_value::Value::String(config.name.clone()));
convert_serialize_result!(toml::to_string(config), ctx, "Failed to serialize TOML config")
}
fn deserialize_config(input: &str) -> cdumay_core::Result<Config> {
let mut ctx = BTreeMap::new();
ctx.insert("input".into(), serde_value::Value::String(input.to_string()));
convert_deserialize_result!(toml::from_str::<Config>(input), ctx, "Failed to deserialize TOML config")
}Macros§
- convert_
deserialize_ result - Converts a
toml::de::Errorinto acdumay_core::Error. - convert_
serialize_ result - Converts a
toml::ser::Errorinto acdumay_core::Error.
Structs§
- Toml
Deserialize - Error : TomlDeserialize (Kind:
TomlData) - Toml
Deserialize Error Converter - Wrapper type for converting
toml::de::Errorinto a structuredcdumay_core::Error. - Toml
Serialize - Error : TomlSerialize (Kind:
TomlData) - Toml
Serialize Error Converter - Wrapper type for converting
toml::ser::Errorinto a structuredcdumay_core::Error.
Constants§
- Toml
Data - ErrorKind : TomlData (400) - Invalid Toml data