use std::collections::BTreeMap;
#[derive(Debug, Clone)]
pub struct Phase {
pub name: String,
pub hooks: Option<Vec<String>>,
}
pub struct SyncLifecycleHooks {
phases: BTreeMap<String, Phase>,
}
impl SyncLifecycleHooks {
pub fn new() -> Self {
Self {
phases: BTreeMap::new(),
}
}
pub fn register_phase(&mut self, phase_name: String, hooks: Vec<String>) {
self.phases.insert(
phase_name.clone(),
Phase {
name: phase_name,
hooks: if hooks.is_empty() { None } else { Some(hooks) },
},
);
}
pub fn get_phase_hooks(&self, phase_name: &str) -> Option<Vec<String>> {
self.phases.get(phase_name).and_then(|p| p.hooks.clone())
}
pub fn has_phase(&self, phase_name: &str) -> bool {
self.phases.contains_key(phase_name)
}
}
impl Default for SyncLifecycleHooks {
fn default() -> Self {
Self::new()
}
}
pub struct SyncPhaseConfig {
pub before_sync: Vec<String>,
pub after_sync: Vec<String>,
pub before_generation: Vec<String>,
pub after_generation: Vec<String>,
pub parallel_rules: bool,
pub max_parallelism: Option<usize>,
}
impl Default for SyncPhaseConfig {
fn default() -> Self {
Self {
before_sync: vec![],
after_sync: vec![],
before_generation: vec![],
after_generation: vec![],
parallel_rules: true,
max_parallelism: None,
}
}
}