cobalt/cobalt_model/
pagination.rs1use std::vec::Vec;
2
3use cobalt_config::SortOrder;
4
5pub use cobalt_config::DateIndex;
6pub use cobalt_config::Include;
7
8#[derive(Clone, Debug, serde::Serialize, PartialEq, Eq)]
9#[serde(deny_unknown_fields, default)]
10pub struct PaginationConfig {
11 pub include: Include,
12 pub per_page: i32,
13 pub front_permalink: cobalt_config::Permalink,
14 pub permalink_suffix: liquid::model::KString,
15 pub order: SortOrder,
16 pub sort_by: Vec<liquid::model::KString>,
17 pub date_index: Vec<DateIndex>,
18}
19
20impl PaginationConfig {
21 pub fn from_config(
22 config: cobalt_config::Pagination,
23 permalink: &cobalt_config::Permalink,
24 ) -> Option<Self> {
25 let config = config.merge(&cobalt_config::Pagination::with_defaults());
26 let cobalt_config::Pagination {
27 include,
28 per_page,
29 permalink_suffix,
30 order,
31 sort_by,
32 date_index,
33 } = config;
34 let include = include.expect("default applied");
35 let per_page = per_page.expect("default applied");
36 let permalink_suffix = permalink_suffix.expect("default applied");
37 let order = order.expect("default applied");
38 let sort_by = sort_by.expect("default applied");
39 let date_index = date_index.expect("default applied");
40
41 if include == Include::None {
42 return None;
43 }
44 Some(Self {
45 include,
46 per_page,
47 front_permalink: permalink.to_owned(),
48 permalink_suffix,
49 order,
50 sort_by,
51 date_index,
52 })
53 }
54}
55
56pub fn is_date_index_sorted(v: &[DateIndex]) -> bool {
58 let mut copy = v.to_owned();
59 copy.sort_unstable();
60 copy.eq(v)
61}