nibb_core/snippets/
utils.rs1use 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}