问题描述
[general]
loaded=true
can_reload=true
[dependencies]
dependencies
部分的工作方式与 Cargo.toml
依赖项基本相同,每个依赖项都在单独的行中列出。
问题是,当使用 toml crate 对其进行序列化/反序列化时,我不确定如何指定一个部分,该部分可以包含任意数量的条目,其下方具有任意名称。
我的结构目前看起来像:
#[derive(Debug,Serialize,Deserialize)]
pub struct Configuration {
general: ConfigurationGeneral,}
#[derive(Debug,Deserialize)]
pub struct ConfigurationGeneral {
loaded: bool,can_reload: bool,}
我在文档中看到您可以使用 Option
但这仍然仅适用于单个值。我无法知道依赖项的名称以及将它们添加到结构中的数量。
解决方法
用 dependencies
表示 HashMap
:
use std::collections::HashMap;
use serde::{Serialize,Deserialize}; // 1.0.126
use toml; // 0.5.8
#[derive(Debug,Serialize,Deserialize)]
pub struct Configuration {
general: ConfigurationGeneral,dependencies: HashMap<String,String>,}
#[derive(Debug,Deserialize)]
pub struct ConfigurationGeneral {
loaded: bool,can_reload: bool,}
fn main() {
let config: Configuration = toml::from_str(r#"
[general]
loaded = true
can_reload = true
[dependencies]
toml = "1.4"
"#).unwrap();
println!("{:#?}",config);
}
在 playground 上查看。
这里我只是将依赖项解析为 String
的值,但它们当然也可以是更复杂的结构。