Rust:
Trabajando con YAML
Cómo hacerlo:
Rust no soporta YAML en su biblioteca estándar, por lo que comúnmente utilizamos crates de terceros como serde
(para serializar y deserializar datos) en combinación con serde_yaml
.
Primero, añade las dependencias a tu Cargo.toml
:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"
Ahora, veamos cómo deserializar una cadena YAML en una estructura Rust y serializar una estructura Rust de vuelta en una cadena YAML.
Deserializando YAML en estructuras de Rust
Define una estructura Rust que refleje los datos que esperas en YAML. Usa atributos de Serde para la personalización si es necesario.
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);
}
La salida de muestra al ejecutar el código Rust anterior sería:
Config { name: "Shield", durability: 300, owner: Owner { name: "Steve", age: 25 } }
Serializando estructuras de Rust en YAML
Este ejemplo toma la estructura Config
de la sección anterior y la serializa de nuevo en formato YAML.
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);
}
La salida esperada será una cadena en formato YAML:
---
name: Axe
durability: 120
owner:
name: Alex
age: 30
Estos fragmentos demuestran cómo integrar eficientemente el análisis y la generación de YAML en tus aplicaciones Rust, utilizando los populares crates serde
y serde_yaml
, adaptándose a estructuras de datos complejas y proporcionando configuraciones simples y legibles para el ser humano.