modio/request/mods/
get_mods.rs1use std::future::IntoFuture;
2
3use crate::client::Client;
4use crate::request::{Filter, Output, RequestBuilder, Route};
5use crate::response::ResponseFuture;
6use crate::types::id::GameId;
7use crate::types::mods::Mod;
8use crate::types::List;
9use crate::util::{Paginate, Paginator};
10
11pub struct GetMods<'a> {
13 http: &'a Client,
14 game_id: GameId,
15 filter: Option<Filter>,
16}
17
18impl<'a> GetMods<'a> {
19 pub(crate) const fn new(http: &'a Client, game_id: GameId) -> Self {
20 Self {
21 http,
22 game_id,
23 filter: None,
24 }
25 }
26
27 pub fn filter(mut self, filter: Filter) -> Self {
31 self.filter = Some(filter);
32 self
33 }
34}
35
36impl IntoFuture for GetMods<'_> {
37 type Output = Output<List<Mod>>;
38 type IntoFuture = ResponseFuture<List<Mod>>;
39
40 fn into_future(self) -> Self::IntoFuture {
41 let route = Route::GetMods {
42 game_id: self.game_id,
43 };
44 let mut builder = RequestBuilder::from_route(&route);
45 if let Some(filter) = self.filter {
46 builder = builder.filter(filter);
47 }
48 match builder.empty() {
49 Ok(req) => self.http.request(req),
50 Err(err) => ResponseFuture::failed(err),
51 }
52 }
53}
54
55impl<'a> Paginate<'a> for GetMods<'a> {
56 type Output = Mod;
57
58 fn paged(&'a self) -> Paginator<'a, Self::Output> {
59 let route = Route::GetMods {
60 game_id: self.game_id,
61 };
62 Paginator::new(self.http, route, self.filter.clone())
63 }
64}