新来的铁锈!目前,我正在使用TOML库来读取TOML配置.
请参阅我在铁锈游乐场上的代码
下面是我从toml示例/decde.rs中获取的代码,并更新了代码
use serde::Deserialize;
use toml;
#[derive(Debug, Deserialize)]
struct Config {
active_users: Vec<String>,
// john: Option<User>, - i don't want to manually add each line for all tables
}
#[derive(Debug, Deserialize)]
struct User {
name: String,
}
fn main() {
let toml_str = r#"
active_users = ["john", "new2rust"]
[john]
name = "John Doe"
[new2rust]
name = "Jane Doe"
[randomguy]
name = "Rust Guy"
"#;
let decoded: Config = toml::from_str(toml_str).unwrap();
println!("{:#?}", decoded);
}输出
Config {
active_users: [
"john",
"new2rust",
],
}我想要的输出是这样的
Config {
active_users: [
"john",
"new2rust",
],
john: ...,
new2rust: ...,
randomguy: ...,
}我不想手动将所有其他表的每一行john: Option<User>添加到Config中,因为配置将经常更新。因此,我不知道如何捕获所有的表,并将它们添加到Config中。
发布于 2022-09-16 06:19:08
确实有一种方法可以做你所描述的事情,但这并不是必要的,也不是一个好主意。
正如注释中提到的,您基本上是在硬编码您的用户,因为他们是他们在结构中的自己的字段。与其滥用文件中的其余表,不如使用一个表数组(https://toml.io/en/v1.0.0#array-of-tables)。
如前所述,你可以使用serde的扁平,但这不是你想要的,诚实地说,只是引导你走错了道路,同时尝试学习锈。
那么您的标记将如下所示:
active_users = [ { name = "john" }, { name = "new2rust" } ]反序列化结构如下所示:
#[derive(Debug, Deserialize)]
struct User {
name: String,
}
#[derive(Debug, Deserialize)]
struct Config {
active_users: Vec<User>,
}https://stackoverflow.com/questions/73740451
复制相似问题