pegination 0.3.1

Pegination is implementation of cursor pagination
Documentation

Pegination

Implementation of cursor pagination. See the tests for details.

Requirements

1. Structure SourceRequest

Source request sent to API

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

2. Structure Filters

Data source filters, excludes limit and offset

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

3. Structure Item

Data source entity

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

4. Entity Error

enum AppError {}

Required implementations

1. SourceRequest to Filters transormation

impl TryFrom<SourceRequest> for Filters {}

2. WithCursor for SearchRequest

impl WithCursor for SourceRequest {}

3. WithLimit for SourceRequest

impl WithLimit for SourceRequest {}

4. DataSource

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

Usage

Having all of the stuff described above, you can use pagination function this way:

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
//   ]
// }