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.