modio/request/mods/events/
get_mod_events.rs

1use 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
11/// Get the event log for a mod.
12pub 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    /// Set the filter for the request.
30    ///
31    /// See [Filters and sorting](super::filters).
32    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}