sea_orm_tool/
pages.rs

1use sea_orm::{ConnectionTrait, DbErr, Paginator, SelectorTrait};
2use serde::{Deserialize, Serialize};
3
4/// 分页查询数据框架
5#[derive(Clone, Serialize, Deserialize, Debug)]
6pub struct PageData<T> {
7    pub list: Vec<T>,
8    pub page_num: u64,
9    pub total: u64,
10    pub total_page: u64,
11    pub page_size: u64,
12}
13
14/// 转换paginator为PageData结构
15pub async fn to_page_data<'db, C, S, T>(
16    mut paginator: Paginator<'db, C, S>,
17    current: u64,
18    page_size: u64,
19) -> Result<PageData<T>, DbErr>
20where
21    C: ConnectionTrait,
22    S: SelectorTrait<Item = T> + 'db,
23{
24    let range = 1..current;
25    range.for_each(|_| {
26        paginator.next();
27    });
28    let total_page = paginator.num_pages().await?;
29    let total = paginator.num_items().await?;
30    let list = paginator.fetch().await?;
31    let page_num = paginator.cur_page() + 1;
32    let data = PageData {
33        list,
34        page_num,
35        total,
36        total_page,
37        page_size,
38    };
39    Ok(data)
40}
41
42/// 分页查询公用结构
43#[derive(Clone, Debug, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct PageQuery<T> {
46    pub current: u64,
47    pub page_size: u64,
48    pub data: T,
49}