Actix-web
The paginator-actix crate provides extractors, responders, and optional middleware for Actix-web.
Installation
Section titled “Installation”[dependencies]paginator-actix = "0.2.2"actix-web = "4"PaginationQuery Extractor
Section titled “PaginationQuery Extractor”use actix_web::{get, web, App, HttpServer};use paginator_actix::{PaginationQuery, PaginatedJson};use serde::Serialize;
#[derive(Serialize)]struct User { id: u32, name: String,}
#[get("/users")]async fn get_users( query: web::Query<PaginationQuery>,) -> PaginatedJson<User> { let params = query.as_params(); let users = vec![ User { id: 1, name: "Alice".to_string() }, User { id: 2, name: "Bob".to_string() }, ];
PaginatedJson::new(users, ¶ms, 100)}
#[actix_web::main]async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new().service(get_users) }) .bind("127.0.0.1:8080")? .run() .await}Converting to PaginationParams
Section titled “Converting to PaginationParams”The PaginationQuery struct provides two methods:
// Borrow paramslet params = query.as_params();
// Consume and convertlet params = query.into_inner().into_params();Pagination Middleware
Section titled “Pagination Middleware”Optional middleware that processes pagination parameters:
use paginator_actix::middleware::PaginationMiddleware;
App::new() .wrap(PaginationMiddleware) .service(get_users)PaginatedJson Responder
Section titled “PaginatedJson Responder”Automatically serializes data and adds pagination headers:
PaginatedJson::new(data, ¶ms, total_count)Response Headers
Section titled “Response Headers”X-Total-Count: 100X-Total-Pages: 5X-Current-Page: 1X-Per-Page: 20Helper Function
Section titled “Helper Function”use paginator_actix::create_paginated_response;
let response = create_paginated_response(users, ¶ms, 100);