#![allow(dead_code)]
mod behaviors;
mod drivers;
mod packages;
mod stacks;
mod types;
pub use types::*;
use std::collections::HashMap;
pub struct ComponentCatalog {
components: HashMap<String, Component>,
}
impl ComponentCatalog {
pub fn new() -> Self {
let mut catalog = Self {
components: HashMap::new(),
};
catalog.add_driver_components();
catalog.add_package_components();
catalog.add_behavior_components();
catalog.add_stack_components();
catalog
}
#[allow(dead_code)]
pub fn get_all(&self) -> Vec<&Component> {
self.components.values().collect()
}
pub fn get_by_type(&self, component_type: ComponentType) -> Vec<&Component> {
self.components
.values()
.filter(|c| c.component_type == component_type)
.collect()
}
pub fn get(&self, id: &str) -> Option<&Component> {
self.components.get(id)
}
pub fn search(&self, query: &str) -> Vec<&Component> {
let query_lower = query.to_lowercase();
self.components
.values()
.filter(|c| {
c.name.to_lowercase().contains(&query_lower)
|| c.description.to_lowercase().contains(&query_lower)
|| c.tags.iter().any(|t| t.to_lowercase().contains(&query_lower))
})
.collect()
}
fn insert(&mut self, component: Component) {
self.components.insert(component.id.clone(), component);
}
fn add_driver_components(&mut self) {
drivers::add_drivers(self);
}
fn add_package_components(&mut self) {
packages::add_packages(self);
}
fn add_behavior_components(&mut self) {
behaviors::add_behaviors(self);
}
fn add_stack_components(&mut self) {
stacks::add_stacks(self);
}
}
impl Default for ComponentCatalog {
fn default() -> Self {
Self::new()
}
}