use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum PropagationPolicy {
None,
EscalateOnly,
Full,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct GroupDependencyEdge {
pub from_group: String,
pub to_group: String,
pub propagation: PropagationPolicy,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GroupIsolationPolicy {
dependencies: Vec<GroupDependencyEdge>,
}
impl GroupIsolationPolicy {
pub fn new(dependencies: Vec<GroupDependencyEdge>) -> Self {
Self { dependencies }
}
pub fn affected_by(&self, my_group: &str, failed_group: &str) -> bool {
if my_group == failed_group {
return true;
}
self.dependencies.iter().any(|edge| {
edge.from_group == my_group
&& edge.to_group == failed_group
&& edge.propagation == PropagationPolicy::Full
})
}
}