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 редко используются и иногда даже не рекомендуются из-за потенциальных проблем с анализом.

Смотрите также

Для дополнительного чтения и более сложных случаев использования: