jellyfin_sdk_rust/
jellyfin_response.rs1#[cfg(feature = "headers")]
2use reqwest::header::HeaderMap;
3
4use reqwest::{Response, Url};
5use serde::de::DeserializeOwned;
6
7use crate::{JellyfinSDKError, JellyfinSDKResult};
8
9pub struct JellyfinResponse<T> {
11 pub(crate) status: u16,
12 pub(crate) url: Url,
13 #[cfg(feature = "headers")]
14 pub(crate) headers: HeaderMap,
15 pub(crate) body: Result<T, reqwest::Error>,
16}
17
18impl<T> JellyfinResponse<T> {
19 pub fn status(&self) -> u16 {
20 self.status
21 }
22
23 pub fn url(&self) -> &Url {
24 &self.url
25 }
26
27 pub fn body(&self) -> &Result<T, reqwest::Error> {
28 &self.body
29 }
30
31 #[cfg(feature = "headers")]
32 pub fn headers(&self) -> &HeaderMap {
33 &self.headers
34 }
35
36 pub(crate) async fn async_from(response: Response) -> JellyfinSDKResult<Self>
37 where
38 T: DeserializeOwned,
39 {
40 match response.error_for_status() {
41 Ok(res) => Ok(JellyfinResponse {
42 status: res.status().as_u16(),
43 url: res.url().clone(),
44 #[cfg(feature = "headers")]
45 headers: res.headers().clone(),
46 body: res.json::<T>().await,
47 }),
48 Err(err) => Err(JellyfinSDKError::ReqwestError(err)),
49 }
50 }
51}