clientix_core/client/blocking/
response.rs1use 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}