我已经戳了serde-yaml和yaml-rust板条箱,但是我没有看到任何示例。
答案 0 :(得分:6)
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,以获取有关如何进行类型定向的序列化和反序列化的完整详细信息。
另请参阅:
通常,使用 any Serde格式与其余所有格式几乎相同。
答案 1 :(得分:0)
YAML文件是普通的(文本)文件,就像您可以使用其阅读的任何其他文件一样
Rust documentation中的示例。特别是使用File::open(filename)
并对前者的结果进行.read_to_string()
。
yaml-rust
和serde-yaml
用于解析和加载 YAML文件,并且由于您的问题并不表示您想要这样做,但只想阅读该文件,则无需使用这些库。
答案 2 :(得分: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] ..
}
答案 3 :(得分:-1)
如果您想正确地做,上面的答案很好。这是一个入门的完整示例。
data['foo']['bar'].as_str()
返回一个Option<str>
。
fn example() -> Result<String> {
let f = std::fs::File::open("something.yaml")?;
let data: serde_yaml::Value = serde_yaml::from_reader(f)?;
data["foo"]["bar"]
.as_str()
.map(|s| s.to_string())
.ok_or(anyhow!("Could not find key foo.bar in something.yaml"))
}