gpt4 book ai didi

rust - 反序列化YAML的“Not general enough”错误

转载 作者:行者123 更新时间:2023-12-03 11:37:01 24 4
gpt4 key购买 nike

我是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作为参数?我在这里想念什么?

最佳答案

问题不在于您传递的字符串参数。
根据documentationfrom_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com