Rust:
Arbeiten mit YAML

Wie:

Rust unterstützt YAML nicht in seiner Standardbibliothek, daher verwenden wir häufig Drittanbieter-Crates wie serde (zum Serialisieren und Deserialisieren von Daten) in Kombination mit serde_yaml.

Füge zuerst Abhängigkeiten zu deiner Cargo.toml hinzu:

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

Jetzt sehen wir uns an, wie man einen YAML-String in eine Rust-Struktur deserialisiert und eine Rust-Struktur wieder in einen YAML-String serialisiert.

YAML in Rust-Strukturen deserialisieren

Definiere eine Rust-Struktur, die die Daten widerspiegelt, die du in YAML erwartest. Verwende Serde-Attribute zur Anpassung, falls benötigt.

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: Shield
durability: 300
owner:
  name: Steve
  age: 25
";

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

Die Beispiel-Ausgabe beim Ausführen des oben genannten Rust-Codes wäre:

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

Rust-Strukturen in YAML serialisieren

Dieses Beispiel nimmt die Config-Struktur aus dem vorherigen Abschnitt und serialisiert sie zurück ins YAML-Format.

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

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

Die erwartete Ausgabe ist ein im YAML-Format formatierter String:

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

Diese Schnipsel demonstrieren, wie du YAML-Parsing und -Generierung effizient in deinen Rust-Anwendungen integrieren kannst, unter Verwendung der beliebten Crates serde und serde_yaml. Sie bewältigen komplexe Datenstrukturen und bieten einfache, menschenlesbare Konfigurationen.