Skip to content

Commit 8675bf0

Browse files
committed
Make DSL more consistent with rules
Signed-off-by: Patrick Luca Fazzi <patrick91@live.it>
1 parent 04df40a commit 8675bf0

File tree

6 files changed

+38
-44
lines changed

6 files changed

+38
-44
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rust_arkitect"
3-
version = "0.2.0"
3+
version = "0.2.1"
44
authors = ["Patrick Luca Fazzi <patrick91@live.it>"]
55
edition = "2021"
66
description = "rust_arkitect is a lightweight library for defining and validating architectural rules in Rust projects"

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ fn test_architectural_rules() {
3030
#[rustfmt::skip]
3131
let rules = ArchitecturalRules::define()
3232
.rules_for_module("sample_project::application")
33-
.allow_dependencies_on(&["sample_project::domain"])
33+
.may_depend_on(&["sample_project::domain"])
3434

3535
.rules_for_module("sample_project::domain")
3636
.must_not_depend_on_anything()
3737

3838
.rules_for_module("sample_project::infrastructure")
39-
.allow_dependencies_on(&["sample_project::domain", "sample_project::application"])
39+
.may_depend_on(&["sample_project::domain", "sample_project::application"])
4040

4141
.build();
4242

@@ -78,13 +78,13 @@ fn test_architecture_baseline() {
7878
#[rustfmt::skip]
7979
let rules = ArchitecturalRules::define()
8080
.rules_for_crate("application")
81-
.allow_dependencies_on(&["domain"])
81+
.may_depend_on(&["domain"])
8282

8383
.rules_for_module("domain")
8484
.must_not_depend_on_anything()
8585

8686
.rules_for_module("infrastructure")
87-
.allow_dependencies_on(&["domain", "application"])
87+
.may_depend_on(&["domain", "application"])
8888

8989
.build();
9090

examples/sample_project/src/architecture_rules_test.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ fn test_vertical_slices_architecture_rules() {
99
#[rustfmt::skip]
1010
let rules = ArchitecturalRules::define()
1111
.rules_for_module("sample_project::conversion")
12-
.allow_dependencies_on(&["sample_project::contracts"])
12+
.may_depend_on(&["sample_project::contracts"])
1313

1414
.rules_for_module("sample_project::policy_management")
15-
.allow_dependencies_on(&["sample_project::contracts"])
15+
.may_depend_on(&["sample_project::contracts"])
1616

1717
.rules_for_module("sample_project::contracts")
1818
.must_not_depend_on_anything()
@@ -38,10 +38,10 @@ fn test_mvc_architecture_rules() {
3838
.must_not_depend_on_anything()
3939

4040
.rules_for_module("sample_project::policy_management::repository")
41-
.allow_dependencies_on(&["sample_project::policy_management::model"])
41+
.may_depend_on(&["sample_project::policy_management::model"])
4242

4343
.rules_for_module("sample_project::policy_management::controller")
44-
.allow_dependencies_on(&["sample_project::policy_management::repository", "sample_project::policy_management::model"])
44+
.may_depend_on(&["sample_project::policy_management::repository", "sample_project::policy_management::model"])
4545

4646
.build();
4747

@@ -59,13 +59,13 @@ fn test_three_tier_architecture() {
5959
#[rustfmt::skip]
6060
let rules = ArchitecturalRules::define()
6161
.rules_for_module("sample_project::conversion::application")
62-
.allow_dependencies_on(&["sample_project::conversion::domain", "sample_project::contract"])
62+
.may_depend_on(&["sample_project::conversion::domain", "sample_project::contract"])
6363

6464
.rules_for_module("sample_project::conversion::domain")
6565
.must_not_depend_on_anything()
6666

6767
.rules_for_module("sample_project::conversion::infrastructure")
68-
.allow_dependencies_on(&["sample_project::conversion::domain", "sample_project::conversion::application"])
68+
.may_depend_on(&["sample_project::conversion::domain", "sample_project::conversion::application"])
6969

7070
.build();
7171

examples/workspace_project/tests/src/architecture_rules_test.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ fn test_vertical_slices_architecture_rules() {
1212
.must_not_depend_on_anything()
1313

1414
.rules_for_crate("conversion")
15-
.allow_dependencies_on(&["contracts"])
15+
.may_depend_on(&["contracts"])
1616

1717
.rules_for_crate("policy_management")
18-
.allow_dependencies_on(&["contracts"])
18+
.may_depend_on(&["contracts"])
1919

2020
.rules_for_crate("application")
21-
.allow_dependencies_on(&["conversion", "policy_management"])
21+
.may_depend_on(&["conversion", "policy_management"])
2222

2323
.build();
2424

@@ -41,10 +41,10 @@ fn test_mvc_architecture_rules() {
4141
.must_not_depend_on_anything()
4242

4343
.rules_for_module("crate::policy_management::repository")
44-
.allow_dependencies_on(&["crate::policy_management::model"])
44+
.may_depend_on(&["crate::policy_management::model"])
4545

4646
.rules_for_module("crate::policy_management::controller")
47-
.allow_dependencies_on(&["crate::policy_management::repository", "crate::policy_management::model"])
47+
.may_depend_on(&["crate::policy_management::repository", "crate::policy_management::model"])
4848

4949
.build();
5050

@@ -62,13 +62,13 @@ fn test_three_tier_architecture() {
6262
#[rustfmt::skip]
6363
let rules = ArchitecturalRules::define()
6464
.rules_for_module("crate::conversion::application")
65-
.allow_dependencies_on(&["crate::conversion::domain"])
65+
.may_depend_on(&["crate::conversion::domain"])
6666

6767
.rules_for_module("crate::conversion::domain")
6868
.must_not_depend_on_anything()
6969

7070
.rules_for_module("crate::conversion::infrastructure")
71-
.allow_dependencies_on(&["crate::conversion::domain", "crate::conversion::application"])
71+
.may_depend_on(&["crate::conversion::domain", "crate::conversion::application"])
7272
.build();
7373

7474
let result = Arkitect::ensure_that(project).complies_with(rules);

src/dsl/architectural_rules.rs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ impl ArchitecturalRules<Begin> {
4040
}
4141

4242
impl ArchitecturalRules<SubjectDefined> {
43-
pub fn allow_dependencies_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
43+
pub fn may_depend_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
4444
let rule = Box::new(MayDependOnRule {
4545
subject: self.current_subject.clone().unwrap(),
4646
allowed_dependencies: dependencies.iter().map(|&s| s.to_string()).collect(),
@@ -57,7 +57,7 @@ impl ArchitecturalRules<SubjectDefined> {
5757
}
5858
}
5959

60-
pub fn forbid_dependencies_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
60+
pub fn must_not_depend_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
6161
let rule = Box::new(MustNotDependOnRule {
6262
subject: self.current_subject.clone().unwrap(),
6363
forbidden_dependencies: dependencies.iter().map(|&s| s.to_string()).collect(),
@@ -89,12 +89,9 @@ impl ArchitecturalRules<SubjectDefined> {
8989
}
9090
}
9191

92-
pub fn with_custom_rules(
93-
self,
94-
custom_rules: Vec<Box<dyn Rule>>,
95-
) -> ArchitecturalRules<RulesDefined> {
92+
pub fn and(self, rule: Box<dyn Rule>) -> ArchitecturalRules<RulesDefined> {
9693
let mut rules = self.rules;
97-
rules.extend(custom_rules);
94+
rules.push(rule);
9895

9996
ArchitecturalRules {
10097
state: PhantomData,
@@ -105,7 +102,7 @@ impl ArchitecturalRules<SubjectDefined> {
105102
}
106103

107104
impl ArchitecturalRules<RulesDefined> {
108-
pub fn allow_dependencies_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
105+
pub fn may_depend_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
109106
let rule = Box::new(MayDependOnRule {
110107
subject: self.current_subject.clone().unwrap(),
111108
allowed_dependencies: dependencies.iter().map(|&s| s.to_string()).collect(),
@@ -122,7 +119,7 @@ impl ArchitecturalRules<RulesDefined> {
122119
}
123120
}
124121

125-
pub fn forbid_dependencies_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
122+
pub fn must_not_depend_on(self, dependencies: &[&str]) -> ArchitecturalRules<RulesDefined> {
126123
let rule = Box::new(MustNotDependOnRule {
127124
subject: self.current_subject.clone().unwrap(),
128125
forbidden_dependencies: dependencies.iter().map(|&s| s.to_string()).collect(),
@@ -154,12 +151,9 @@ impl ArchitecturalRules<RulesDefined> {
154151
}
155152
}
156153

157-
pub fn with_custom_rules(
158-
self,
159-
custom_rules: Vec<Box<dyn Rule>>,
160-
) -> ArchitecturalRules<RulesDefined> {
154+
pub fn and(self, rule: Box<dyn Rule>) -> ArchitecturalRules<RulesDefined> {
161155
let mut rules = self.rules;
162-
rules.extend(custom_rules);
156+
rules.push(rule);
163157

164158
ArchitecturalRules {
165159
state: PhantomData,
@@ -198,7 +192,7 @@ mod tests {
198192
#[rustfmt::skip]
199193
let rules = ArchitecturalRules::define()
200194
.rules_for_crate("application")
201-
.allow_dependencies_on(&["std::fmt", "domain"])
195+
.may_depend_on(&["std::fmt", "domain"])
202196
.build();
203197

204198
assert_eq!(rules.len(), 1);
@@ -209,7 +203,7 @@ mod tests {
209203
#[rustfmt::skip]
210204
let rules = ArchitecturalRules::define()
211205
.rules_for_module("domain::services")
212-
.allow_dependencies_on(&["std::sync", "application"])
206+
.may_depend_on(&["std::sync", "application"])
213207
.build();
214208

215209
assert_eq!(rules.len(), 1);
@@ -220,15 +214,15 @@ mod tests {
220214
#[rustfmt::skip]
221215
let rules = ArchitecturalRules::define()
222216
.rules_for_module("domain::models")
223-
.forbid_dependencies_on(&["std::sync", "application"])
217+
.must_not_depend_on(&["std::sync", "application"])
224218
.build();
225219

226220
assert_eq!(rules.len(), 1);
227221
}
228222

229223
#[test]
230224
fn test_with_custom_rules() {
231-
let custom_rule = Box::new(crate::rules::may_depend_on::MayDependOnRule {
225+
let custom_rule = Box::new(MayDependOnRule {
232226
subject: "my_app".to_string(),
233227
allowed_dependencies: vec![],
234228
allowed_external_dependencies: vec![],
@@ -237,8 +231,8 @@ mod tests {
237231
#[rustfmt::skip]
238232
let rules = ArchitecturalRules::define()
239233
.rules_for_crate("application")
240-
.allow_dependencies_on(&["my_app", "domain"])
241-
.with_custom_rules(vec![custom_rule])
234+
.may_depend_on(&["my_app", "domain"])
235+
.and(custom_rule)
242236
.build();
243237

244238
assert_eq!(rules.len(), 2);
@@ -249,9 +243,9 @@ mod tests {
249243
#[rustfmt::skip]
250244
let rules = ArchitecturalRules::define()
251245
.rules_for_crate("application")
252-
.allow_dependencies_on(&["std::fmt", "domain"])
246+
.may_depend_on(&["std::fmt", "domain"])
253247
.rules_for_module("domain::services")
254-
.allow_dependencies_on(&["std::sync", "application"])
248+
.may_depend_on(&["std::sync", "application"])
255249
.rules_for_module("domain::models")
256250
.must_not_depend_on_anything()
257251
.build();

tests/test_architecture.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ fn test_architectural_rules() {
1313
#[rustfmt::skip]
1414
let rules = ArchitecturalRules::define()
1515
.rules_for_module("crate::dsl")
16-
.allow_dependencies_on(&["crate::engine", "crate::rules", "std::collections", "std::marker::PhantomData", "std::path"])
16+
.may_depend_on(&["crate::engine", "crate::rules", "std::collections", "std::marker::PhantomData", "std::path"])
1717

1818
.rules_for_module("crate::engine")
19-
.allow_dependencies_on(&["crate::rules", "ansi_term", "log", "std::fs"])
19+
.may_depend_on(&["crate::rules", "ansi_term", "log", "std::fs"])
2020

2121
.rules_for_module("crate::rules")
22-
.allow_dependencies_on(&["crate::dependency_parsing", "ansi_term", "log", "std::fmt"])
22+
.may_depend_on(&["crate::dependency_parsing", "ansi_term", "log", "std::fmt"])
2323

2424
.rules_for_crate("crate::dependency_parsing")
25-
.allow_dependencies_on(&["syn", "quote", "std::path", "std::ops", "std::fs"])
25+
.may_depend_on(&["syn", "quote", "std::path", "std::ops", "std::fs"])
2626

2727
.build();
2828

0 commit comments

Comments
 (0)