1use super::{configuration, Error};
2use crate::{apis::ResponseContent, models};
3use reqwest::StatusCode;
4use serde::{de, Deserialize, Deserializer, Serialize};
5
6#[derive(Clone, Debug)]
8pub struct GetGeSellHistoryByCodeParams {
9    pub code: String,
11    pub seller: Option<String>,
13    pub buyer: Option<String>,
15    pub page: Option<u32>,
17    pub size: Option<u32>,
19}
20
21impl GetGeSellHistoryByCodeParams {
22    pub fn new(
23        code: String,
24        seller: Option<String>,
25        buyer: Option<String>,
26        page: Option<u32>,
27        size: Option<u32>,
28    ) -> Self {
29        Self {
30            code,
31            seller,
32            buyer,
33            page,
34            size,
35        }
36    }
37}
38
39#[derive(Clone, Debug)]
41pub struct GetGeSellOrderByIdParams {
42    pub id: String,
44}
45
46impl GetGeSellOrderByIdParams {
47    pub fn new(id: String) -> Self {
48        Self { id }
49    }
50}
51
52#[derive(Clone, Debug)]
54pub struct GetGeSellOrdersParams {
55    pub code: Option<String>,
57    pub seller: Option<String>,
59    pub page: Option<u32>,
61    pub size: Option<u32>,
63}
64
65impl GetGeSellOrdersParams {
66    pub fn new(
67        code: Option<String>,
68        seller: Option<String>,
69        page: Option<u32>,
70        size: Option<u32>,
71    ) -> Self {
72        Self {
73            code,
74            seller,
75            page,
76            size,
77        }
78    }
79}
80
81#[derive(Debug, Clone, Serialize)]
83#[serde(untagged)]
84pub enum GetGeSellHistoryByCodeError {
85    Status404(models::ErrorResponseSchema),
87}
88
89impl<'de> Deserialize<'de> for GetGeSellHistoryByCodeError {
90    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
91    where
92        D: Deserializer<'de>,
93    {
94        let raw = models::ErrorResponseSchema::deserialize(deserializer)?;
95        match raw.error.code {
96            404 => Ok(Self::Status404(raw)),
97            _ => Err(de::Error::custom(format!(
98                "Unexpected error code: {}",
99                raw.error.code
100            ))),
101        }
102    }
103}
104
105#[derive(Debug, Clone, Serialize)]
107#[serde(untagged)]
108pub enum GetGeSellOrderByIdError {
109    Status404(models::ErrorResponseSchema),
111}
112
113impl<'de> Deserialize<'de> for GetGeSellOrderByIdError {
114    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
115    where
116        D: Deserializer<'de>,
117    {
118        let raw = models::ErrorResponseSchema::deserialize(deserializer)?;
119        match raw.error.code {
120            404 => Ok(Self::Status404(raw)),
121            _ => Err(de::Error::custom(format!(
122                "Unexpected error code: {}",
123                raw.error.code
124            ))),
125        }
126    }
127}
128
129#[derive(Debug, Clone, Serialize)]
131#[serde(untagged)]
132pub enum GetGeSellOrdersError {}
133
134impl<'de> Deserialize<'de> for GetGeSellOrdersError {
135    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
136    where
137        D: Deserializer<'de>,
138    {
139        let raw = models::ErrorResponseSchema::deserialize(deserializer)?;
140        Err(de::Error::custom(format!(
141            "Unexpected error code: {}",
142            raw.error.code
143        )))
144    }
145}
146
147pub async fn get_ge_sell_history_by_code(
149    configuration: &configuration::Configuration,
150    params: GetGeSellHistoryByCodeParams,
151) -> Result<models::DataPageGeOrderHistorySchema, Error<GetGeSellHistoryByCodeError>> {
152    let local_var_configuration = configuration;
153
154    let code = params.code;
156    let seller = params.seller;
158    let buyer = params.buyer;
160    let page = params.page;
162    let size = params.size;
164
165    let local_var_client = &local_var_configuration.client;
166
167    let local_var_uri_str = format!(
168        "{}/grandexchange/history/{code}",
169        local_var_configuration.base_path,
170        code = crate::apis::urlencode(code)
171    );
172    let mut local_var_req_builder =
173        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
174
175    if let Some(ref local_var_str) = seller {
176        local_var_req_builder =
177            local_var_req_builder.query(&[("seller", &local_var_str.to_string())]);
178    }
179    if let Some(ref local_var_str) = buyer {
180        local_var_req_builder =
181            local_var_req_builder.query(&[("buyer", &local_var_str.to_string())]);
182    }
183    if let Some(ref local_var_str) = page {
184        local_var_req_builder =
185            local_var_req_builder.query(&[("page", &local_var_str.to_string())]);
186    }
187    if let Some(ref local_var_str) = size {
188        local_var_req_builder =
189            local_var_req_builder.query(&[("size", &local_var_str.to_string())]);
190    }
191    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
192        local_var_req_builder =
193            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
194    }
195
196    let local_var_req = local_var_req_builder.build()?;
197    let local_var_resp = local_var_client.execute(local_var_req).await?;
198
199    let local_var_status = local_var_resp.status();
200    let local_var_content = local_var_resp.text().await?;
201
202    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
203        serde_json::from_str(&local_var_content).map_err(Error::from)
204    } else {
205        let local_var_entity: Option<GetGeSellHistoryByCodeError> =
206            serde_json::from_str(&local_var_content).ok();
207        let local_var_error = ResponseContent {
208            status: local_var_status,
209            content: local_var_content,
210            entity: local_var_entity,
211        };
212        Err(Error::ResponseError(local_var_error))
213    }
214}
215
216pub async fn get_ge_sell_order_by_id(
218    configuration: &configuration::Configuration,
219    params: GetGeSellOrderByIdParams,
220) -> Result<models::GeOrderResponseSchema, Error<GetGeSellOrderByIdError>> {
221    let local_var_configuration = configuration;
222
223    let id = params.id;
225
226    let local_var_client = &local_var_configuration.client;
227
228    let local_var_uri_str = format!(
229        "{}/grandexchange/orders/{id}",
230        local_var_configuration.base_path,
231        id = crate::apis::urlencode(id)
232    );
233    let mut local_var_req_builder =
234        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
235
236    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
237        local_var_req_builder =
238            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
239    }
240
241    let local_var_req = local_var_req_builder.build()?;
242    let local_var_resp = local_var_client.execute(local_var_req).await?;
243
244    let local_var_status = local_var_resp.status();
245    let local_var_content = local_var_resp.text().await?;
246
247    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
248        serde_json::from_str(&local_var_content).map_err(Error::from)
249    } else {
250        let local_var_entity: Option<GetGeSellOrderByIdError> =
251            serde_json::from_str(&local_var_content).ok();
252        let local_var_error = ResponseContent {
253            status: local_var_status,
254            content: local_var_content,
255            entity: local_var_entity,
256        };
257        Err(Error::ResponseError(local_var_error))
258    }
259}
260
261pub async fn get_ge_sell_orders(
263    configuration: &configuration::Configuration,
264    params: GetGeSellOrdersParams,
265) -> Result<models::DataPageGeOrderSchema, Error<GetGeSellOrdersError>> {
266    let local_var_configuration = configuration;
267
268    let code = params.code;
270    let seller = params.seller;
272    let page = params.page;
274    let size = params.size;
276
277    let local_var_client = &local_var_configuration.client;
278
279    let local_var_uri_str = format!("{}/grandexchange/orders", local_var_configuration.base_path);
280    let mut local_var_req_builder =
281        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
282
283    if let Some(ref local_var_str) = code {
284        local_var_req_builder =
285            local_var_req_builder.query(&[("code", &local_var_str.to_string())]);
286    }
287    if let Some(ref local_var_str) = seller {
288        local_var_req_builder =
289            local_var_req_builder.query(&[("seller", &local_var_str.to_string())]);
290    }
291    if let Some(ref local_var_str) = page {
292        local_var_req_builder =
293            local_var_req_builder.query(&[("page", &local_var_str.to_string())]);
294    }
295    if let Some(ref local_var_str) = size {
296        local_var_req_builder =
297            local_var_req_builder.query(&[("size", &local_var_str.to_string())]);
298    }
299    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
300        local_var_req_builder =
301            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
302    }
303
304    let local_var_req = local_var_req_builder.build()?;
305    let local_var_resp = local_var_client.execute(local_var_req).await?;
306
307    let local_var_status = local_var_resp.status();
308    let local_var_content = local_var_resp.text().await?;
309
310    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
311        serde_json::from_str(&local_var_content).map_err(Error::from)
312    } else {
313        let local_var_entity: Option<GetGeSellOrdersError> =
314            serde_json::from_str(&local_var_content).ok();
315        let local_var_error = ResponseContent {
316            status: local_var_status,
317            content: local_var_content,
318            entity: local_var_entity,
319        };
320        Err(Error::ResponseError(local_var_error))
321    }
322}