"Not general enough" 反序列化 YAML 时出错
"Not general enough" error deserializing YAML
我是 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
returns一个Result<String>
,但是serde_yaml::from_str
的签名要一个&str
,也就是借。如上所述,当我借用它时,出现“不够通用”的错误。当我 google 那个错误时,我看到很多关于反序列化器如何不能使用借用数据的讨论;我必须先拥有它。原来的 String
不就是这样吗?如果 from_str
不能使用借位,为什么它需要 &str
作为参数?我在这里错过了什么?
果然,我错过了一些基本的东西。这个问题与借用或所有权无关。我错过了将最终结果包装在 Ok()
中,这搞砸了我对 from_str
的调用的类型推断。修改后的函数:
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) => Ok(c),
Err(_) => Err("Failed to parse yaml config."),
},
Err(_) => Err("Could not open supplied config file"),
}
}
问题不是你传递的字符串参数。
根据 documentation,from_str
returns a Result<T>
。在这种情况下,您需要使用 T
的预期类型调用该函数。在这里,它将是 serde_yaml::from_str::<Config>(&yaml)
.
您还需要为 c
修正 return 语句。它将是 Ok(c)
,而不仅仅是 c
。
我是 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
returns一个Result<String>
,但是serde_yaml::from_str
的签名要一个&str
,也就是借。如上所述,当我借用它时,出现“不够通用”的错误。当我 google 那个错误时,我看到很多关于反序列化器如何不能使用借用数据的讨论;我必须先拥有它。原来的 String
不就是这样吗?如果 from_str
不能使用借位,为什么它需要 &str
作为参数?我在这里错过了什么?
果然,我错过了一些基本的东西。这个问题与借用或所有权无关。我错过了将最终结果包装在 Ok()
中,这搞砸了我对 from_str
的调用的类型推断。修改后的函数:
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) => Ok(c),
Err(_) => Err("Failed to parse yaml config."),
},
Err(_) => Err("Could not open supplied config file"),
}
}
问题不是你传递的字符串参数。
根据 documentation,from_str
returns a Result<T>
。在这种情况下,您需要使用 T
的预期类型调用该函数。在这里,它将是 serde_yaml::from_str::<Config>(&yaml)
.
您还需要为 c
修正 return 语句。它将是 Ok(c)
,而不仅仅是 c
。