Skip to main content

Pagination

Struct Pagination 

Source
pub struct Pagination { /* private fields */ }
Expand description

Pagination query parameters extractor.

Extracts common pagination parameters from the query string:

  • page: Current page number (1-indexed, default: 1)
  • per_page or limit: Items per page (default: 20, max: 100)
  • offset: Alternative to page-based pagination (overrides page if set)

§Example

use fastapi_core::Pagination;

#[get("/items")]
async fn list_items(cx: &Cx, pagination: Pagination) -> impl IntoResponse {
    let offset = pagination.offset();
    let limit = pagination.limit();

    // Fetch items from database with offset and limit
    let items = db.fetch_items(offset, limit).await;

    // Return paginated response
    pagination.paginate(items, total_count, "/items")
}

§Query String Formats

# Page-based (preferred)
?page=2&per_page=10

# Using limit alias
?page=2&limit=10

# Offset-based (for cursor-style pagination)
?offset=20&limit=10

§Configuration

Use PaginationConfig to customize defaults and limits:

use fastapi_core::{Pagination, PaginationConfig};

let config = PaginationConfig::new()
    .default_per_page(50)
    .max_per_page(200);

// The config can be stored in app state and used by handlers

Implementations§

Source§

impl Pagination

Source

pub fn new(page: u64, per_page: u64) -> Self

Create pagination with specific values.

Source

pub fn from_offset(offset: u64, limit: u64) -> Self

Create pagination from offset and limit.

Source

pub fn page(&self) -> u64

Get the current page number (1-indexed).

Source

pub fn per_page(&self) -> u64

Get the number of items per page.

Source

pub fn limit(&self) -> u64

Alias for per_page() - returns the page size limit.

Source

pub fn offset(&self) -> u64

Calculate the offset for database queries.

If an explicit offset was provided, returns that. Otherwise, calculates from page number: (page - 1) * per_page.

Source

pub fn total_pages(&self, total_items: u64) -> u64

Calculate total number of pages given a total item count.

Source

pub fn has_next(&self, total_items: u64) -> bool

Check if there is a next page.

Source

pub fn has_prev(&self) -> bool

Check if there is a previous page.

Source

pub fn paginate<T>(self, items: Vec<T>, total: u64, base_url: &str) -> Page<T>

Create a paginated response from items.

§Arguments
  • items - The items for the current page
  • total - Total number of items across all pages
  • base_url - Base URL for generating Link headers (e.g., “/api/items”)

Trait Implementations§

Source§

impl Clone for Pagination

Source§

fn clone(&self) -> Pagination

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Pagination

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Pagination

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl FromRequest for Pagination

Source§

type Error = Infallible

Error type when extraction fails.
Source§

async fn from_request( _ctx: &RequestContext, req: &mut Request, ) -> Result<Self, Self::Error>

Extract a value from the request. Read more
Source§

impl PartialEq for Pagination

Source§

fn eq(&self, other: &Pagination) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Pagination

Source§

impl Eq for Pagination

Source§

impl StructuralPartialEq for Pagination

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, _span: NoopSpan) -> Self

Instruments this future with a span (no-op when disabled).
Source§

fn in_current_span(self) -> Self

Instruments this future with the current span (no-op when disabled).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ResponseProduces<T> for T