获取以下 TOML 数据:
[[items]]
foo = 10
bar = 100
[[items]]
foo = 12
bar = 144
Run Code Online (Sandbox Code Playgroud)
以及以下 Rust 代码:
[[items]]
foo = 10
bar = 100
[[items]]
foo = 12
bar = 144
Run Code Online (Sandbox Code Playgroud)
正如您自己所看到的,该程序无法编译,并返回以下错误:
预期的结构
Item,发现枚举toml::value::Value
我理解它的含义,但我不知道如何解决这个问题并实现我首先想要做的事情:将父表的子数组转换为结构数组而不是表数组。
您可以解析为预定义的 TOML 类型,例如Table,但这些类型不知道预定义类型之外的类型。这些类型主要在数据的实际类型未知或不重要时使用。
在您的情况下,这意味着 TOMLTable类型不了解您的Item类型,也无法使其了解它。
但是您可以轻松解析为不同的类型:
use serde_derive::Deserialize;
use std::collections::HashMap;
use toml::from_str;
#[derive(Deserialize, Debug)]
struct Item {
foo: u64,
bar: u64,
}
fn main() {
let items_string: &str = "[[items]]\nfoo = 10\nbar = 100\n\n[[items]]\nfoo = 12\nbar = 144\n";
let items_table: HashMap<String, Vec<Item>> = from_str(items_string).unwrap();
let items: &[Item] = &items_table["items"];
println!("{:?}", items_table);
println!("{:?}", items);
}
Run Code Online (Sandbox Code Playgroud)
(游乐场的永久链接)
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |