如何在Rust中读取YAML文件?

sem*_*267 1 yaml rust

我已经戳了一下serde-yamlyaml-rust板条箱,但没有看到任何示例。

She*_*ter 7

serde-yaml的文档具有以下4个功能:

  • from_readerT从YAML的IO流中反序列化类型的实例。
  • from_sliceT从YAML文本的字节中反序列化类型的实例。
  • from_strT从YAML文本字符串中反序列化类型的实例。
  • from_value—将a解释serde_yaml::Value为type的实例T

使用from_reader作为一个例子:

extern crate serde_yaml;

fn main() -> Result<(), Box<std::error::Error>> {
    let f = std::fs::File::open("something.yaml")?;
    let d: String = serde_yaml::from_reader(f)?;
    println!("Read YAML string: {}", d);
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

Value如果您不知道其格式,则可以反序列化为松散类型,但是请务必阅读Serde指南,以获取有关如何进行类型定向的序列化和反序列化的完整详细信息。

也可以看看:

通常,使用任何 Serde格式与其余所有格式几乎相同。


sbe*_*kur 7

此示例使用yaml_rust 箱

use std::fs::File;
use std::io::prelude::*;
use yaml_rust::yaml::{Hash, Yaml};
use yaml_rust::YamlLoader;

fn main() {
    println!("Hello, Yaml");
    let file = "./etc/my_yaml_file.yaml";
    load_file(file);
}

fn load_file(file: &str) {
    let mut file = File::open(file).expect("Unable to open file");
    let mut contents = String::new();

    file.read_to_string(&mut contents)
        .expect("Unable to read file");

    let docs = YamlLoader::load_from_str(&contents).unwrap();

    // iterate / process doc[s] ..
}
Run Code Online (Sandbox Code Playgroud)