nibb 0.5.0

Fast and extensible snippet manager with CLI and FFI support
Documentation
use chrono::NaiveDate;
use crate::snippets::snippet::Snippet;

pub fn filter_snippets(snippets: Vec<Snippet>, filter: &str) -> Vec<Snippet> {
    if filter.trim().is_empty() || filter == "all" || filter == "a"{
        return snippets;
    }

    let mut filtered = Vec::new();

    let parsed_date = NaiveDate::parse_from_str(filter, "%Y-%m-%d").ok();

    for snippet in snippets {
        let meta = &snippet.meta;
        let matches_text =
            meta.language.to_string().contains(filter)
            || meta.name.contains(filter)
            || meta.description.contains(filter)
            || meta.tags.contains(&filter.to_string());

        let matches_date = if let Some(date) = parsed_date {
            meta.created.date_naive() <= date
        }
        else {
            false
        };
        if matches_text || matches_date {
            filtered.push(snippet);
        }
    }
    filtered
}