Rust:
Работа с YAML
Как это сделать:
Для разбора и генерации YAML в Rust мы используем крейт serde_yaml
, который опирается на serde
для сериализации/десериализации.
Сначала добавьте зависимости в ваш Cargo.toml
:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"
Теперь давайте сериализуем структуру Rust в YAML:
use serde::{Serialize, Deserialize};
use serde_yaml;
#[derive(Debug, Serialize, Deserialize)]
struct Config {
debug: bool,
environment: String,
port: u16,
}
fn main() -> serde_yaml::Result<()> {
let config = Config {
debug: true,
environment: "development".to_string(),
port: 8080,
};
// Сериализация в YAML
let yaml_string = serde_yaml::to_string(&config)?;
println!("{}", yaml_string);
// Вывод:
// ---
// debug: true
// environment: "development"
// port: 8080
Ok(())
}
Для десериализации YAML в структуру Rust:
fn main() -> serde_yaml::Result<()> {
let yaml_string = r#"
debug: true
environment: "development"
port: 8080
"#;
let config: Config = serde_yaml::from_str(&yaml_string)?;
println!("{:?}", config);
// Вывод:
// Config { debug: true, environment: "development", port: 8080 }
Ok(())
}
Подробнее
YAML был создан в 2001 году как удобная альтернатива XML. В отличие от JSON, YAML поддерживает комментарии и менее “шумный”, что делает его излюбленным для файлов конфигурации. serde_yaml
в Rust использует serde
для преобразования данных, обеспечивая высокую совместимость и гибкость. Хотя serde_json
чаще используется из-за всемирной распространенности JSON в API, serde_yaml
преуспевает для локальных файлов конфигурации и данных. Стоит отметить, что слишком сложные возможности YAML редко используются и иногда даже не рекомендуются из-за потенциальных проблем с анализом.
Смотрите также
Для дополнительного чтения и более сложных случаев использования:
- Официальная документация Serde: https://serde.rs/
- Документация крейта Serde YAML: https://docs.rs/serde_yaml/latest/serde_yaml/
- Официальная спецификация YAML: https://yaml.org/spec/1.2/spec.html
- Книга “Язык программирования Rust”: https://doc.rust-lang.org/book/