archunit/layers/fluentapi/
layer_definition_builder.rsuse crate::common::{PatternError, RegexFactory};
use super::LayeredArchitecture;
#[derive(Debug, Clone)]
#[must_use = "a layer definition has no effect until it receives a selector"]
pub struct LayerDefinitionBuilder {
architecture: LayeredArchitecture,
layer_name: String,
}
impl LayerDefinitionBuilder {
pub(super) fn new(architecture: LayeredArchitecture, layer_name: String) -> Self {
Self {
architecture,
layer_name,
}
}
pub fn defined_by(self, pattern: impl Into<crate::common::PatternSpec>) -> LayeredArchitecture {
let filter = RegexFactory::default().path_matcher(pattern);
self.add_filter(filter, "path")
}
pub fn defined_by_folder(
self,
pattern: impl Into<crate::common::PatternSpec>,
) -> LayeredArchitecture {
let filter = RegexFactory::default().folder_matcher(pattern);
self.add_filter(filter, "folder")
}
pub const fn architecture(&self) -> &LayeredArchitecture {
&self.architecture
}
#[must_use]
pub fn layer_name(&self) -> &str {
&self.layer_name
}
fn add_filter(
self,
filter: Result<crate::common::Filter, PatternError>,
selector_kind: &'static str,
) -> LayeredArchitecture {
self.architecture
.with_layer_filter(self.layer_name, filter, selector_kind)
}
}