Serde的反序列化方法如何推断类型?

问题描述

我在Rust CSV板条箱的教程页面上遵循一些代码示例,而该教程没有解释其工作原理:

type Record = HashMap<String,String>;

fn csv_to_record_table() -> Result<Vec<Record>,Box<dyn Error>> {
    let mut rdr = csv::Reader::from_path(r"h:\code\rust\csvtutorial\uspop.csv")?;
    let mut sheet = Vec::<Record>::new();
    for result in rdr.deserialize() {
        let record = result?;
        sheet.push(record);
    }
    Ok(sheet)
}

我的代码有效,因此不需要修复,但是我想了解的是rdr.deserialize()如何推断出我想要的类型是HashMap<String,String>。我从文档中得知,如果您将其传递给哈希表,则它将使用列名作为键,并使用字段数据作为值。

我不明白的是rdr.deserialize()如何知道这就是我在没有将我改写为rdr.deserialize::<Record>()的情况下要做的。这是Rust的功能吗?还是这是Serde特有的?它怎么还知道我不是要给它一个Vec<Record>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)