如何将顶层带有 table 的 TOML 文件解析为 Rust 结构?
How do I parse a TOML file with a table at the top level into a Rust structure?
例如:
#[macro_use]
extern crate serde_derive;
extern crate toml;
#[derive(Deserialize)]
struct Entry {
foo: String,
bar: String,
}
let toml_string = r#"
[[entry]]
foo = "a0"
bar = "b0"
[[entry]]
foo = "a1"
bar = "b1"
"#;
let config: toml::value::Table<Entry> = toml::from_str(&toml_string)?;
但是,这不起作用并抛出有关 Table
的意外类型参数的错误。
打印任意解析值显示你有什么样的结构:
let config: toml::Value = toml::from_str(&toml_string)?;
println!("{:?}", config)
重新格式化的输出显示您有一个带有单个键 entry
的 table,它是一个包含键 foo
和 [=16] 的 table 数组=]:
Table({
"entry": Array([
Table({
"bar": String("b0"),
"foo": String("a0")
}),
Table({
"bar": String("b1"),
"foo": String("a1")
})
])
})
反序列化时,需要匹配这个结构:
#[derive(Debug, Deserialize)]
struct Outer {
entry: Vec<Entry>,
}
#[derive(Debug, Deserialize)]
struct Entry {
foo: String,
bar: String,
}
let config: Outer = toml::from_str(&toml_string)?;
例如:
#[macro_use]
extern crate serde_derive;
extern crate toml;
#[derive(Deserialize)]
struct Entry {
foo: String,
bar: String,
}
let toml_string = r#"
[[entry]]
foo = "a0"
bar = "b0"
[[entry]]
foo = "a1"
bar = "b1"
"#;
let config: toml::value::Table<Entry> = toml::from_str(&toml_string)?;
但是,这不起作用并抛出有关 Table
的意外类型参数的错误。
打印任意解析值显示你有什么样的结构:
let config: toml::Value = toml::from_str(&toml_string)?;
println!("{:?}", config)
重新格式化的输出显示您有一个带有单个键 entry
的 table,它是一个包含键 foo
和 [=16] 的 table 数组=]:
Table({
"entry": Array([
Table({
"bar": String("b0"),
"foo": String("a0")
}),
Table({
"bar": String("b1"),
"foo": String("a1")
})
])
})
反序列化时,需要匹配这个结构:
#[derive(Debug, Deserialize)]
struct Outer {
entry: Vec<Entry>,
}
#[derive(Debug, Deserialize)]
struct Entry {
foo: String,
bar: String,
}
let config: Outer = toml::from_str(&toml_string)?;