1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use snafu::ResultExt;
#[async_trait::async_trait]
pub trait FromResponse: Sized {
async fn from_response(response: reqwest::Response) -> crate::Result<Self>;
}
#[async_trait::async_trait]
impl<T: serde::de::DeserializeOwned> FromResponse for T {
async fn from_response(response: reqwest::Response) -> crate::Result<Self> {
let text = response.text().await.context(crate::error::Http)?;
let de = &mut serde_json::Deserializer::from_str(&text);
serde_path_to_error::deserialize(de).context(crate::error::Json)
}
}