14 个版本

0.6.0 2024 年 4 月 18 日
0.5.1 2023 年 8 月 11 日
0.5.0 2023 年 6 月 29 日
0.1.2 2023 年 1 月 25 日
0.1.0 2022 年 12 月 26 日

446Rust 模式

Download history 114/week @ 2024-04-16 5/week @ 2024-05-21 9/week @ 2024-07-02 74/week @ 2024-07-30

每月 74 次下载

MIT 许可证

20KB
492

分页

游标分页的实现。详细信息请参阅测试。

需求

1. 结构 SourceRequest

发送到 API 的源请求

#[derive(Debug, Clone)]
struct SourceRequest {}

2. 结构 Filters

数据源过滤器,不包括限制和偏移量

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
struct Filters {}

3. 结构 Item

数据源实体

#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
struct Item {}

4. 实体 Error

enum AppError {}

所需实现

1. SourceRequestRequest<Filters> 转换

impl TryFrom<SourceRequest> for Request<Filters> {}

2. DataSource

trait DataSource<Item, Filters: Clone + PartialEq, OffsetValue: Clone>

用法

有了上述所有内容,您可以使用 pagination 函数以这种方式使用

const DEFAULT_LIMIT: u16 = 100;

let paginated_data = pagination::<Item, Filters, OffsetValue, AppError>(data_source, source_request, DEFAULT_LIMIT).await?;
// {
//   "last_cursor": null,
//   "has_next_page": false,
//   "data": [
//     ..items
//   ]
// }

依赖关系

~3–5MB
~85K SLoC