作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是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
作为参数?我在这里想念什么?
最佳答案
问题不在于您传递的字符串参数。
根据documentation,from_str
返回一个Result<T>
。在这种情况下,您需要使用T
的预期类型调用该函数。在这里,它将是serde_yaml::from_str::<Config>(&yaml)
。
您还需要修复c
的return语句。这将是Ok(c)
,而不仅仅是c
。
关于rust - 反序列化YAML的“Not general enough”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746955/
我是一名优秀的程序员,十分优秀!