【发布时间】:2020-09-04 19:21:43
【问题描述】:
我是 Rust 的新手,所以我确定我在这里无法理解一些基本的东西,但是...
我有一个 yaml 配置文件,我想将其反序列化为一个简单的结构。在早期版本中,我可以从字符串文字中执行此操作,但现在我已将其重构为从文件中读取,我收到错误 implementation of '_::_serde::Deserialize' is not general enough。我的功能如下:
fn read_config(file: &str) -> Result<Config, &'static str> {
match std::fs::read_to_string(file) {
Ok(yaml) => match serde_yaml::from_str(&yaml) {
Ok(c) => c,
Err(_) => Err("Failed to parse yaml config."),
},
Err(_) => Err("Could not open supplied config file"),
}
}
read_to_string 返回一个Result<String>,但serde_yaml::from_str 的签名想要一个&str,即借用。当我借用它时,如上所述,我得到“不够通用”的错误。当我用谷歌搜索那个错误时,我看到很多关于反序列化器如何不能使用借来的数据的讨论;我必须先拥有它。这不就是原来的String吗?如果from_str 不能使用借位,为什么要使用&str 作为参数?我在这里错过了什么?
【问题讨论】: