rosu_render/request/
render_list.rs1use std::future::IntoFuture;
2
3use serde::Serialize;
4
5use crate::{model::RenderList, routing::Route, ClientError, OrdrClient};
6
7use super::{OrdrFuture, Request};
8
9#[derive(Serialize)]
10struct GetRenderListFields<'a> {
11 #[serde(rename = "pageSize")]
12 page_size: Option<u32>,
13 page: Option<u32>,
14 #[serde(rename = "ordrUsername")]
15 ordr_username: Option<&'a str>,
16 #[serde(rename = "replayUsername")]
17 replay_username: Option<&'a str>,
18 #[serde(rename = "renderID")]
19 render_id: Option<u32>,
20 #[serde(rename = "nobots")]
21 no_bots: Option<bool>,
22 link: Option<&'a str>,
23 #[serde(rename = "beatmapsetid")]
24 mapset_id: Option<u32>,
25}
26
27#[must_use]
29pub struct GetRenderList<'a> {
30 ordr: &'a OrdrClient,
31 fields: GetRenderListFields<'a>,
32}
33
34impl<'a> GetRenderList<'a> {
35 pub(crate) const fn new(ordr: &'a OrdrClient) -> Self {
36 Self {
37 ordr,
38 fields: GetRenderListFields {
39 page_size: None,
40 page: None,
41 ordr_username: None,
42 replay_username: None,
43 render_id: None,
44 no_bots: None,
45 link: None,
46 mapset_id: None,
47 },
48 }
49 }
50
51 pub fn page_size(&mut self, page_size: u32) -> &mut Self {
53 self.fields.page_size = Some(page_size);
54 self.fields.page.get_or_insert(1);
55
56 self
57 }
58
59 pub fn page(&mut self, page: u32) -> &mut Self {
61 self.fields.page = Some(page);
62
63 self
64 }
65
66 pub fn ordr_username(&mut self, ordr_username: &'a str) -> &mut Self {
70 self.fields.ordr_username = Some(ordr_username);
71
72 self
73 }
74
75 pub fn replay_username(&mut self, replay_username: &'a str) -> &mut Self {
79 self.fields.replay_username = Some(replay_username);
80
81 self
82 }
83
84 pub fn render_id(&mut self, render_id: u32) -> &mut Self {
86 self.fields.render_id = Some(render_id);
87
88 self
89 }
90
91 pub fn no_bots(&mut self, no_bots: bool) -> &mut Self {
93 self.fields.no_bots = Some(no_bots);
94
95 self
96 }
97
98 pub fn link(&mut self, link: &'a str) -> &mut Self {
100 self.fields.link = Some(link);
101
102 self
103 }
104
105 pub fn mapset_id(&mut self, mapset_id: u32) -> &mut Self {
107 self.fields.mapset_id = Some(mapset_id);
108
109 self
110 }
111}
112
113impl IntoFuture for &mut GetRenderList<'_> {
114 type Output = Result<RenderList, ClientError>;
115 type IntoFuture = OrdrFuture<RenderList>;
116
117 fn into_future(self) -> Self::IntoFuture {
118 match Request::builder(Route::RenderList).query(&self.fields) {
119 Ok(builder) => self.ordr.request(builder.build()),
120 Err(err) => OrdrFuture::error(err),
121 }
122 }
123}
124
125impl IntoFuture for GetRenderList<'_> {
126 type Output = Result<RenderList, ClientError>;
127 type IntoFuture = OrdrFuture<RenderList>;
128
129 fn into_future(mut self) -> Self::IntoFuture {
130 (&mut self).into_future()
131 }
132}