【问题标题】:toml crate how to structure dependencies-like structtoml crate 如何构建类似依赖的结构
【发布时间】:2021-06-25 02:21:42
【问题描述】:

我有一个 toml 文件,格式为:

[general]

loaded=true
can_reload=true

[dependencies]

dependencies 部分的工作方式与Cargo.toml 依赖项基本相同,每个依赖项都列在单独的行上。

问题是,当使用toml crate 对其进行序列化/反序列化时,我不确定如何指定一个可以包含任意数量的条目且其下方具有任意名称的部分。

我的结构目前看起来像:

#[derive(Debug, Serialize, Deserialize)]
pub struct Configuration {
    general: ConfigurationGeneral,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct ConfigurationGeneral {
    loaded: bool,
    can_reload: bool,
}

我在文档中看到您可以使用Option,但这仍然只是针对单个值。我无法知道依赖项的名称以及将它们添加到结构中的数量。

【问题讨论】:

    标签: serialization rust deserialization toml


    【解决方案1】:

    HashMap 表示dependencies

    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, Serialize, 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 上查看。

    这里我只是用 Strings 的值解析依赖关系,但它们当然也可以是更复杂的结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      相关资源
      最近更新 更多