Crate cdumay_error_toml

Crate cdumay_error_toml 

Source
Expand description

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

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 Serialization and Deserialization
  • Provides unique error codes, HTTP status codes, and descriptions
  • Supports rich contextual error metadata via BTreeMap
  • Uses the cdumay_core::ErrorConverter trait 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::Error into a cdumay_core::Error.
convert_serialize_result
Converts a toml::ser::Error into a cdumay_core::Error.

Structs§

TomlDeserialize
Error : TomlDeserialize (Kind: TomlData)
TomlDeserializeErrorConverter
Wrapper type for converting toml::de::Error into a structured cdumay_core::Error.
TomlSerialize
Error : TomlSerialize (Kind: TomlData)
TomlSerializeErrorConverter
Wrapper type for converting toml::ser::Error into a structured cdumay_core::Error.

Constants§

TomlData
ErrorKind : TomlData (400) - Invalid Toml data