archunit/layers/assertion/
layer_dependency_violation.rsuse crate::common::ProjectedEdge;
use super::LayerDependencyRule;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct LayerDependencyViolation {
pub dependency: ProjectedEdge,
pub source_layer: String,
pub target_layer: String,
pub rule: LayerDependencyRule,
}
impl LayerDependencyViolation {
#[must_use]
pub fn new(
dependency: ProjectedEdge,
source_layer: impl Into<String>,
target_layer: impl Into<String>,
rule: LayerDependencyRule,
) -> Self {
Self {
dependency,
source_layer: source_layer.into(),
target_layer: target_layer.into(),
rule,
}
}
}
#[cfg(test)]
mod tests {
use crate::common::{Edge, ImportKind, ProjectedEdge};
use super::{LayerDependencyRule, LayerDependencyViolation};
#[test]
fn retains_layers_rule_and_raw_dependency_evidence() {
let raw = Edge::new("src/api.rs", "src/db.rs", false, [ImportKind::Use]);
let dependency = ProjectedEdge::new("src/api.rs", "src/db.rs", [raw.clone()]);
let violation = LayerDependencyViolation::new(
dependency,
"api",
"database",
LayerDependencyRule::MayNotDependOnLayers,
);
assert_eq!(violation.source_layer, "api");
assert_eq!(violation.target_layer, "database");
assert_eq!(violation.rule, LayerDependencyRule::MayNotDependOnLayers);
assert_eq!(violation.dependency.cumulated_edges, [raw]);
}
}