reqwest v0.9的依赖是serde v1.0,因此实现了将serde_json错误转换为reqwest错误的功能。
在我的代码中,我使用serde_json进行反序列化,而不是使用reqwest自带的.json()
方法。
// reqwest = "0.9"
// serde = { version = "1.0", features = ["derive"] }
// serde_json = "1.0"
pub fn get_meta(client: &reqwest::Client) -> Result<Meta, reqwest::Error> {
let mut resp = client
.get("http://localhost:8080/requests/playlist.json")
.send()?;
let data: Value = serde_json::from_str(&resp.text()?).unwrap();
let data = data["children"][0]["children"].clone();
let metas: Vec<Meta> = serde_json::from_value(data).unwrap();
let meta: Meta = metas.last().expect("nothing is playing").clone();
Ok(meta)
}
目前,我正尝试将serde_json的错误返回为reqwest的错误。将let metas: Vec<Meta> = serde_json::from_value(data).unwrap();
更改为let metas: Vec<Meta> = serde_json::from_value(data)?;
会导致以下错误:
the trait `std::convert::From<serde_json::error::Error>` is not implemented for `reqwest::error::Error`
我可以通过将serde_json :: error :: Error
包装在reqwest :: error :: Error
的Kind :: Json
错误枚举中来转换吗?还是我必须创建一个自定义错误枚举,如本文章中所提到的,来涵盖两者?
reqwest::Error
类型是reqwest
crate 的内部错误类型。它不公开任何公共构造函数或From
实现,实例只能从reqwest
crate 内部构造。因此简短的答案是:不能将任何其他类型转换为reqwest::Error
,需要使用其他错误类型。 - Sven Marnach