Rust:
Lavorare con YAML

Come fare:

Rust non supporta YAML nella sua libreria standard, quindi comunemente si utilizzano crate di terze parti come serde (per serializzare e deserializzare dati) in combinazione con serde_yaml.

Prima, aggiungi le dipendenze al tuo Cargo.toml:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"

Ora, vediamo come deserializzare una stringa YAML in una struct Rust e serializzare una struct Rust di nuovo in una stringa YAML.

Deserializzare YAML in Strutture Rust

Definisci una struct Rust che rifletta i dati che ti aspetti in YAML. Usa gli attributi di Serde per la personalizzazione, se necessario.

use serde::{Deserialize, Serialize};
use serde_yaml;

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Config {
    name: String,
    durability: i32,
    owner: Owner,
}

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Owner {
    name: String,
    age: i32,
}

fn main() {
    let yaml_data = "
name: Scudo
durability: 300
owner:
  name: Steve
  age: 25
";

    let config_deserializzato: Config = serde_yaml::from_str(yaml_data).unwrap();
    println!("{:?}", config_deserializzato);
}

L’output di esempio dopo aver eseguito il codice Rust sopra sarà:

Config { name: "Scudo", durability: 300, owner: Owner { name: "Steve", age: 25 } }

Serializzare Strutture Rust in YAML

Questo esempio prende la struct Config della sezione precedente e la serializza di nuovo in formato YAML.

fn main() {
    let config = Config {
        name: String::from("Ascia"),
        durability: 120,
        owner: Owner {
            name: String::from("Alex"),
            age: 30,
        },
    };

    let yaml_serializzato = serde_yaml::to_string(&config).unwrap();
    println!("{}", yaml_serializzato);
}

L’output atteso sarà una stringa formattata in YAML:

---
name: Ascia
durability: 120
owner:
  name: Alex
  age: 30

Questi frammenti dimostrano come integrare efficacemente il parsing e la generazione di YAML nelle tue applicazioni Rust, utilizzando i popolari crate serde e serde_yaml, gestendo strutture di dati complesse e fornendo configurazioni semplici e leggibili per l’uomo.