paginator-rs 0.3.2

Pagination trait for Rust collections
Documentation
use crate::error::{PaginatorError, PaginatorResult};
use paginator_utils::{PaginationParams, PaginatorResponse, PaginatorResponseMeta};
use serde::Serialize;
use serde_json::{to_value, Value};

pub trait PaginatorTrait<T>
where
    T: Serialize,
{
    fn paginate(&self, params: &PaginationParams) -> PaginatorResult<PaginatorResponse<T>> {
        if params.page < 1 {
            return Err(PaginatorError::InvalidPage(params.page));
        }
        if params.per_page < 1 || params.per_page > 100 {
            return Err(PaginatorError::InvalidPerPage(params.per_page));
        }

        Ok(PaginatorResponse {
            data: vec![],
            meta: PaginatorResponseMeta::new(0, params.per_page, 0),
        })
    }

    fn paginate_json(&self, params: &PaginationParams) -> PaginatorResult<Value> {
        let response = self.paginate(params)?;
        to_value(response).map_err(|e| PaginatorError::SerializationError(e.to_string()))
    }
}