use unleash_types::client_features::ClientFeature;
use crate::types::EdgeToken;
pub mod builder;
pub mod memory_provider;
pub mod offline_provider;
pub mod redis_provider;
trait ProjectFilter<T> {
fn filter_by_projects(&self, token: &EdgeToken) -> Vec<T>;
}
impl ProjectFilter<ClientFeature> for Vec<ClientFeature> {
fn filter_by_projects(&self, token: &EdgeToken) -> Vec<ClientFeature> {
self.iter()
.filter(|feature| {
if let Some(feature_project) = &feature.project {
token.projects.contains(&"*".to_string())
|| token.projects.contains(feature_project)
} else {
false
}
})
.cloned()
.collect::<Vec<ClientFeature>>()
}
}