nibb_core/snippets/
utils.rs

1use chrono::NaiveDate;
2use crate::snippets::snippet::Snippet;
3
4pub fn filter_snippets(snippets: Vec<Snippet>, filter: &str) -> Vec<Snippet> {
5    if filter.trim().is_empty() || filter == "all" || filter == "a"{
6        return snippets;
7    }
8
9    let mut filtered = Vec::new();
10
11    let parsed_date = NaiveDate::parse_from_str(filter, "%Y-%m-%d").ok();
12
13    for snippet in snippets {
14        let meta = &snippet.meta;
15        let matches_text =
16            meta.language.to_string().contains(filter)
17            || meta.name.contains(filter)
18            || meta.description.contains(filter)
19            || meta.tags.contains(&filter.to_string());
20
21        let matches_date = if let Some(date) = parsed_date {
22            meta.created.date_naive() <= date
23        }
24        else {
25            false
26        };
27        if matches_text || matches_date {
28            filtered.push(snippet);
29        }
30    }
31    filtered
32}