modio/request/user/
get_user_games.rs1use std::future::IntoFuture;
2
3use crate::client::Client;
4use crate::request::{Filter, Output, RequestBuilder, Route};
5use crate::response::ResponseFuture;
6use crate::types::games::Game;
7use crate::types::List;
8use crate::util::{Paginate, Paginator};
9
10pub struct GetUserGames<'a> {
12 http: &'a Client,
13 filter: Option<Filter>,
14}
15
16impl<'a> GetUserGames<'a> {
17 pub(crate) const fn new(http: &'a Client) -> Self {
18 Self { http, filter: None }
19 }
20
21 pub fn filter(mut self, filter: Filter) -> Self {
22 self.filter = Some(filter);
23 self
24 }
25}
26
27impl IntoFuture for GetUserGames<'_> {
28 type Output = Output<List<Game>>;
29 type IntoFuture = ResponseFuture<List<Game>>;
30
31 fn into_future(self) -> Self::IntoFuture {
32 let route = Route::UserGames;
33 let mut builder = RequestBuilder::from_route(&route);
34 if let Some(filter) = self.filter {
35 builder = builder.filter(filter);
36 }
37 match builder.empty() {
38 Ok(req) => self.http.request(req),
39 Err(err) => ResponseFuture::failed(err),
40 }
41 }
42}
43
44impl<'a> Paginate<'a> for GetUserGames<'a> {
45 type Output = Game;
46
47 fn paged(&'a self) -> Paginator<'a, Self::Output> {
48 let route = Route::UserGames;
49
50 Paginator::new(self.http, route, self.filter.clone())
51 }
52}