modio/request/mods/events/
get_mod_events.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, ModId};
7use crate::types::mods::Event;
8use crate::types::List;
9use crate::util::{Paginate, Paginator};
10
11pub struct GetModEvents<'a> {
13 http: &'a Client,
14 game_id: GameId,
15 mod_id: ModId,
16 filter: Option<Filter>,
17}
18
19impl<'a> GetModEvents<'a> {
20 pub(crate) const fn new(http: &'a Client, game_id: GameId, mod_id: ModId) -> Self {
21 Self {
22 http,
23 game_id,
24 mod_id,
25 filter: None,
26 }
27 }
28
29 pub fn filter(mut self, filter: Filter) -> Self {
33 self.filter = Some(filter);
34 self
35 }
36}
37
38impl IntoFuture for GetModEvents<'_> {
39 type Output = Output<List<Event>>;
40 type IntoFuture = ResponseFuture<List<Event>>;
41
42 fn into_future(self) -> Self::IntoFuture {
43 let route = Route::GetModEvents {
44 game_id: self.game_id,
45 mod_id: self.mod_id,
46 };
47 let mut builder = RequestBuilder::from_route(&route);
48 if let Some(filter) = self.filter {
49 builder = builder.filter(filter);
50 }
51 match builder.empty() {
52 Ok(req) => self.http.request(req),
53 Err(err) => ResponseFuture::failed(err),
54 }
55 }
56}
57
58impl<'a> Paginate<'a> for GetModEvents<'a> {
59 type Output = Event;
60
61 fn paged(&'a self) -> Paginator<'a, Self::Output> {
62 let route = Route::GetModEvents {
63 game_id: self.game_id,
64 mod_id: self.mod_id,
65 };
66 Paginator::new(self.http, route, self.filter.clone())
67 }
68}