paddle_rust_sdk/
events.rs1use serde::de::DeserializeOwned;
6use serde::Serialize;
7use serde_with::skip_serializing_none;
8
9use crate::entities::Event;
10use crate::ids::PaddleID;
11use crate::paginated::Paginated;
12use crate::Paddle;
13
14pub trait ReportType: Serialize {
15 type FilterName: Serialize + DeserializeOwned;
16}
17
18#[skip_serializing_none]
20#[derive(Serialize)]
21pub struct EventsList<'a> {
22 #[serde(skip)]
23 client: &'a Paddle,
24 after: Option<PaddleID>,
25 order_by: Option<String>,
26 per_page: Option<usize>,
27}
28
29impl<'a> EventsList<'a> {
30 pub fn new(client: &'a Paddle) -> Self {
31 Self {
32 client,
33 after: None,
34 order_by: None,
35 per_page: None,
36 }
37 }
38
39 pub fn after(&mut self, report_id: impl Into<PaddleID>) -> &mut Self {
41 self.after = Some(report_id.into());
42 self
43 }
44
45 pub fn order_by_asc(&mut self, field: &str) -> &mut Self {
47 self.order_by = Some(format!("{}[ASC]", field));
48 self
49 }
50
51 pub fn order_by_desc(&mut self, field: &str) -> &mut Self {
53 self.order_by = Some(format!("{}[DESC]", field));
54 self
55 }
56
57 pub fn per_page(&mut self, entities_per_page: usize) -> &mut Self {
62 self.per_page = Some(entities_per_page);
63 self
64 }
65
66 pub fn send(&self) -> Paginated<'_, Vec<Event>> {
68 Paginated::new(self.client, "/events", self)
69 }
70}