tempo_alloy/rpc/
pagination.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct Sort {
7 pub on: String,
9
10 pub order: SortOrder,
12}
13
14#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub enum SortOrder {
18 Asc,
19 #[default]
20 Desc,
21}
22
23#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct PaginationParams<Filters> {
26 #[serde(skip_serializing_if = "Option::is_none")]
35 pub cursor: Option<String>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub filters: Option<Filters>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
46 pub limit: Option<usize>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub sort: Option<Sort>,
51}
52
53#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
54#[serde(rename_all = "camelCase")]
55pub struct FilterRange<T> {
56 pub min: Option<T>,
57 pub max: Option<T>,
58}
59
60impl<T: PartialOrd> FilterRange<T> {
61 pub fn in_range(&self, value: T) -> bool {
63 if self.min.as_ref().is_some_and(|min| &value < min) {
64 return false;
65 }
66
67 if self.max.as_ref().is_some_and(|max| &value > max) {
68 return false;
69 }
70
71 true
72 }
73}