use super::config::EditorPreset;
use std::sync::Arc;
pub struct PresetRegistry {
presets: Vec<Arc<dyn EditorPreset>>,
}
impl PresetRegistry {
pub fn new() -> Self {
Self {
presets: Vec::new(),
}
}
pub fn register(&mut self, preset: Arc<dyn EditorPreset>) {
self.presets.push(preset);
}
pub fn get(&self, id: &str) -> Option<&Arc<dyn EditorPreset>> {
self.presets.iter().find(|p| p.preset_id() == id)
}
pub fn all(&self) -> Vec<&Arc<dyn EditorPreset>> {
self.presets.iter().collect()
}
}
pub fn build_registry() -> PresetRegistry {
let mut registry = PresetRegistry::new();
registry.register(Arc::new(crate::presets::rust::RustPreset::default()));
registry.register(Arc::new(crate::presets::python::PythonAppPreset::default()));
registry.register(Arc::new(crate::presets::go::GoAppPreset::default()));
registry.register(Arc::new(crate::presets::docker::DockerPreset::default()));
registry
}