Pegination

Implementation of cursor pagination. See the tests for details.

Requirements

1. Structure SourceRequest

Source request sent to API

```rust

[derive(Debug, Clone)]

struct SourceRequest {} ```

2. Structure Filters

Data source filters, excludes limit and offset

```rust

[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]

struct Filters {} ```

3. Structure Item

Data source entity

```rust

[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]

struct Item {} ```

4. Entity Error

rust enum AppError {}

Required implementations

1. SourceRequest to Filters transormation

rust impl TryFrom<SourceRequest> for Filters {}

2. WithCursor for SearchRequest

rust impl WithCursor for SourceRequest {}

3. WithLimit for SourceRequest

rust impl WithLimit for SourceRequest {}

4. DataSource

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

Usage

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

```rust const DEFAULT_LIMIT: u16 = 100;

let paginateddata = pagination::(datasource, sourcerequest, DEFAULTLIMIT).await?; // { // "lastcursor": null, // "hasnext_page": false, // "data": [ // ..items // ] // } ```