merde 10.0.7

Serialize and deserialize with declarative macros
Documentation
use std::collections::HashMap;

use merde::{DynDeserializerExt, Value};
use merde_yaml::YamlDeserializer;

#[derive(Debug, PartialEq)]
struct ComplexStruct {
    name: String,
    age: u32,
    hobbies: Vec<String>,
    address: Address,
    scores: Vec<Score>,
}

merde::derive! {
    impl (Deserialize) for struct ComplexStruct {
        name,
        age,
        hobbies,
        address,
        scores
    }
}

#[derive(Debug, PartialEq)]
struct Address {
    street: String,
    city: String,
    country: String,
}

merde::derive! {
    impl (Deserialize) for struct Address {
        street,
        city,
        country
    }
}

#[derive(Debug, PartialEq)]
struct Score {
    subject: String,
    value: f32,
}

merde::derive! {
    impl (Deserialize) for struct Score {
        subject,
        value
    }
}

fn main() {
    let yaml = r#"
            name: John Doe
            age: 30
            hobbies:
              - reading
              - swimming
              - coding
            address:
              street: 123 Main St
              city: Anytown
              country: Wonderland
            scores:
              - subject: Math
                value: 95.5
              - subject: Science
                value: 88.0
              - subject: Literature
                value: 92.5
        "#;

    let mut de = YamlDeserializer::new(yaml);
    let result: ComplexStruct = de.deserialize().unwrap();

    println!("Deserialized ComplexStruct: {result:#?}");

    let yaml_map = r#"
        1: 100
        "two": 200.5
        true: "three hundred"
        [1, 2, 3]: { "nested": "value" }
    "#;

    let mut de = YamlDeserializer::new(yaml_map);
    let result: HashMap<Value, Value> = de.deserialize().unwrap();

    println!("Deserialized HashMap: {result:#?}");
}