cobalt/pagination/
all.rs

1use crate::cobalt_model::pagination::PaginationConfig;
2use crate::document::Document;
3
4use super::{Result, paginator};
5use paginator::Paginator;
6
7pub(crate) fn create_all_paginators(
8    all_posts: &[&liquid::model::Value],
9    doc: &Document,
10    config: &PaginationConfig,
11    index_title: Option<&liquid::model::Value>,
12) -> Result<Vec<Paginator>> {
13    let total_pages = all_posts.len();
14    // f32 used here in order to not lose information to ceil the result,
15    // otherwise we can lose an index
16    let total_indexes = (total_pages as f32 / config.per_page as f32).ceil() as usize;
17
18    if total_pages == 0 {
19        return Ok(vec![paginator::create_paginator(
20            0,
21            total_indexes,
22            total_pages,
23            config,
24            doc,
25            &[],
26            index_title,
27        )?]);
28    }
29
30    let paginators: Result<Vec<_>> = all_posts
31        .chunks(config.per_page as usize)
32        .enumerate()
33        .map(|(i, chunk)| {
34            paginator::create_paginator(
35                i,
36                total_indexes,
37                total_pages,
38                config,
39                doc,
40                chunk,
41                index_title,
42            )
43        })
44        .collect();
45    paginators
46}