我戳了一下serde-yaml和yaml-rust板条箱,但我没有看到任何例子。
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格式与其他格式几乎相同。
YAML文件是普通(文本)文件,您可以使用Rust documentation中的示例读取它。特别是使用File::open(filename)
并对前者的结果做.read_to_string()
。
yaml-rust
和serde-yaml
用于解析和加载YAML文件,并且由于您的问题并不表示您想要这样做,但只想读取文件,因此无需使用这些库。
此示例使用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] ..
}