clientix_core/client/blocking/
response.rs

1use bytes::Bytes;
2use reqwest::blocking::Response;
3use serde::de::DeserializeOwned;
4use crate::client::response::{ClientixResponse, ClientixResult};
5
6pub struct BlockingResponseHandler {
7    result: ClientixResult<Response>
8}
9
10impl BlockingResponseHandler {
11
12    pub fn new(result: ClientixResult<Response>) -> BlockingResponseHandler {
13        BlockingResponseHandler { result }
14    }
15
16    pub fn text(self) -> ClientixResult<ClientixResponse<String>> {
17        match self.result {
18            Ok(response) => {
19                Ok(ClientixResponse::new(
20                    response.version(),
21                    response.content_length(),
22                    response.status(),
23                    response.url().clone(),
24                    response.remote_addr(),
25                    response.headers().clone(),
26                    response.text()?
27                ))
28            },
29            Err(error) => Err(error),
30        }
31    }
32
33    pub fn text_with_encoding(self, encoding: &str) -> ClientixResult<ClientixResponse<String>> {
34        match self.result {
35            Ok(response) => {
36                Ok(ClientixResponse::new(
37                    response.version(),
38                    response.content_length(),
39                    response.status(),
40                    response.url().clone(),
41                    response.remote_addr(),
42                    response.headers().clone(),
43                    response.text_with_charset(encoding)?
44                ))
45            },
46            Err(error) => Err(error),
47        }
48    }
49
50    pub fn bytes(self) -> ClientixResult<ClientixResponse<Bytes>> {
51        match self.result {
52            Ok(response) => {
53                Ok(ClientixResponse::new(
54                    response.version(),
55                    response.content_length(),
56                    response.status(),
57                    response.url().clone(),
58                    response.remote_addr(),
59                    response.headers().clone(),
60                    response.bytes()?
61                ))
62            },
63            Err(error) => Err(error),
64        }
65    }
66
67    pub fn json<T>(self) -> ClientixResult<ClientixResponse<T>> where T: DeserializeOwned + Clone {
68        match self.result {
69            Ok(response) => {
70                Ok(ClientixResponse::new(
71                    response.version(),
72                    response.content_length(),
73                    response.status(),
74                    response.url().clone(),
75                    response.remote_addr(),
76                    response.headers().clone(),
77                    serde_json::from_str::<T>(response.text()?.as_str())?
78                ))
79            },
80            Err(error) => Err(error),
81        }
82    }
83
84    pub fn xml<T>(self) -> ClientixResult<ClientixResponse<T>> where T: DeserializeOwned + Clone {
85        match self.result {
86            Ok(response) => {
87                Ok(ClientixResponse::new(
88                    response.version(),
89                    response.content_length(),
90                    response.status(),
91                    response.url().clone(),
92                    response.remote_addr(),
93                    response.headers().clone(),
94                    serde_xml_rs::from_str::<T>(response.text()?.as_str())?
95                ))
96            },
97            Err(error) => Err(error),
98        }
99    }
100
101    pub fn urlencoded<T>(self) -> ClientixResult<ClientixResponse<T>> where T: DeserializeOwned + Clone {
102        match self.result {
103            Ok(response) => {
104                Ok(ClientixResponse::new(
105                    response.version(),
106                    response.content_length(),
107                    response.status(),
108                    response.url().clone(),
109                    response.remote_addr(),
110                    response.headers().clone(),
111                    serde_urlencoded::from_str::<T>(response.text()?.as_str())?
112                ))
113            },
114            Err(error) => Err(error),
115        }
116    }
117
118}