Rust:
Làm việc với YAML

Làm thế nào:

Để phân tích cú pháp và tạo ra YAML trong Rust, chúng ta sử dụng crate serde_yaml, được dựa trên serde để thực hiện serialization/deserialization.

Đầu tiên, thêm các phụ thuộc vào Cargo.toml của bạn:

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

Bây giờ, hãy serialize một struct Rust sang 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,
    };

    // Serialize sang YAML
    let yaml_string = serde_yaml::to_string(&config)?;
    println!("{}", yaml_string);
    // Đầu ra:
    // ---
    // debug: true
    // environment: "development"
    // port: 8080

    Ok(())
}

Để deserialize YAML thành một struct 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);
    // Đầu ra:
    // Config { debug: true, environment: "development", port: 8080 }

    Ok(())
}

Đi sâu hơn

YAML được bắt đầu vào năm 2001 như một lựa chọn thân thiện với người dùng hơn so với XML. Không giống như JSON, YAML hỗ trợ các comment và ít “ồn ào” hơn, làm cho nó trở thành lựa chọn ưa thích cho các tệp cấu hình. serde_yaml của Rust tận dụng serde cho việc chuyển đổi dữ liệu, đảm bảo sự tương thích và linh hoạt cao. Mặc dù serde_json được sử dụng phổ biến hơn do sự phổ biến của JSON trong APIs, serde_yaml vẫn tỏa sáng với các tệp cấu hình và dữ liệu cục bộ. Đáng chú ý là các tính năng YAML phức tạp thường ít được sử dụng và đôi khi không được khuyến khích do tiềm năng gặp phải vấn đề khi phân tích cú pháp.

Xem thêm

Để đọc thêm và tìm hiểu về các trường hợp sử dụng phức tạp hơn: