ckandex 0.6.3

An indexer and API for CKAN, written in Rust.
Documentation
use crate::{CacheClient, Mod, QueryFilterContainer, QueryResponse};

pub struct Query {
    pub filters: Vec<QueryFilterContainer>,
}

impl Default for Query {
    fn default() -> Self {
        return Self {
            filters: Vec::new(),
        };
    }
}

impl Query {
    pub fn new() -> Self {
        return Self {
            filters: Vec::new(),
        };
    }

    pub fn execute(&self, cache: CacheClient) -> QueryResponse {
        let netkans = cache.netkans.unwrap();
        let frozen = cache.frozen.unwrap();

        let netkans = netkans
            .iter()
            .map(|v| Mod::from_netkan(v.clone()))
            .collect::<Vec<Mod>>();

        let frozen = frozen
            .iter()
            .map(|v| Mod::from_frozen(v.clone()))
            .collect::<Vec<Mod>>();

        let mut res_netkan: Vec<Mod> = netkans;
        let mut res_frozen: Vec<Mod> = frozen;

        for filter in &self.filters {
            res_netkan = filter.inner.filter(res_netkan);
            res_frozen = filter.inner.filter(res_frozen);
        }

        return QueryResponse {
            netkans: res_netkan,
            frozen: res_frozen,
        };
    }
}