Rust 如何使用Serde解析具有多种不同类型的YAML文件?
我正在尝试解析这个YAML文件Rust 如何使用Serde解析具有多种不同类型的YAML文件?,rust,yaml,serde,Rust,Yaml,Serde,我正在尝试解析这个YAML文件 application: build: something container_name: another_thing environment: - ONE_ENV=fake - SEC_ENV=something 我已经创建了这段代码,它可以完美地工作: #[macro_use] extern crate serde_derive; extern crate serde_yaml; use std::fs::File; use s
application:
build: something
container_name: another_thing
environment:
- ONE_ENV=fake
- SEC_ENV=something
我已经创建了这段代码,它可以完美地工作:
#[macro_use]
extern crate serde_derive;
extern crate serde_yaml;
use std::fs::File;
use std::io::Read;
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Application {
application: Data,
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Data {
build: String,
container_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
environment: Option<Vec<String>>,
}
fn main() {
let filename = "example.yml";
match File::open(filename) {
Ok(mut file) => {
let mut content = String::new();
file.read_to_string(&mut content).unwrap();
let application_data: Application = serde_yaml::from_str(&content).unwrap();
println!("{:?}", application_data.application.environment);
}
Err(error) => {
println!("There is an error {}: {}", filename, error);
}
}
}
我如何处理两种不同的解析方法?你有吗?。TL;DR:创建一个:
#[serde(untaged)]枚举环境{Vec(Vec),Hash(BTreeMap)}
并将其用于您的环境
。谢谢@Shepmaster第二个对我帮助很大,文档说明了我是如何开始的,但枚举方法要好得多。谢谢
application:
build: something
container_name: another_thing
environment:
ONE_ENV: fake
SEC_ENV: something