你怎么读Rust的YAML文件?

问题描述 投票:0回答:3

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

rust yaml
3个回答
7
投票

serde-yaml's documentation具有以下4个功能:

  • from_reader - 从YAML的IO流反序列化T类型的实例。
  • from_slice - 从YAML文本的字节反序列化T类型的实例。
  • from_str - 从一串YAML文本反序列化T类型的实例。
  • from_value - 将serde_yaml::Value解释为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(())
}

如果您不了解格式,可以反序列化为更宽松的Value,但请务必阅读Serde guide以获取有关如何进行类型导向序列化和反序列化的完整详细信息。

也可以看看:

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


0
投票

YAML文件是普通(文本)文件,您可以使用Rust documentation中的示例读取它。特别是使用File::open(filename)并对前者的结果做.read_to_string()

yaml-rustserde-yaml用于解析和加载YAML文件,并且由于您的问题并不表示您想要这样做,但只想读取文件,因此无需使用这些库。


0
投票

此示例使用yaml_rust crate

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] ..
}
© www.soinside.com 2019 - 2024. All rights reserved.