semver_common/models/
change_list.rs1use crate::{Change, Commit};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug)]
6pub struct ChangeList {
7 changes: Vec<Change>,
8}
9
10impl PartialEq for ChangeList {
11 fn eq(&self, other: &Self) -> bool {
12 if self.changes.len() != other.changes.len() {
13 return false;
14 }
15 for i in 0..self.changes.len() {
16 if self.changes[i] != other.changes[i] {
17 return false;
18 }
19 }
20 true
21 }
22}
23
24impl ChangeList {
25 pub fn new(changes: Vec<Change>) -> Self {
26 ChangeList { changes }
27 }
28
29 pub fn check(&self, commit: &Commit) -> Option<&Change> {
32 self.changes
33 .iter()
34 .find(|&change| change.check(commit).is_ok())
35 .map(|v| v as _)
36 }
37}
38
39#[cfg(test)]
40mod test {
41 use crate::mock;
42
43 #[test]
44 fn test_changelist_check_pattern_match_one() {
45 let changelist = mock::changelist::create();
46 let commit = mock::commit::create("feat(some_scope): the commit message");
47 let check = changelist.check(&commit);
48 assert_eq!(
49 check,
50 Some(&mock::change::create("^feat(\n|.)*$", "Feature", 2))
51 );
52 }
53
54 #[test]
55 fn test_changelist_check_pattern_match_two() {
56 let changelist = mock::changelist::create();
57 let commit = mock::commit::create("fix(some_scope): the commit message");
58 let check = changelist.check(&commit);
59 assert_eq!(check, Some(&mock::change::create("^fix(\n|.)*$", "Fix", 3)));
60 }
61
62 #[test]
63 fn test_changelist_check_pattern_not_match_one() {
64 let changelist = mock::changelist::create();
65 let commit = mock::commit::create("chore: this is a chore");
66 let check = changelist.check(&commit);
67 assert_eq!(check, None);
68 }
69
70 #[test]
71 fn test_changelist_check_pattern_not_match_two() {
72 let changelist = mock::changelist::create();
73 let commit = mock::commit::create("docs(readme): a test readme message");
74 let check = changelist.check(&commit);
75 assert_eq!(check, None);
76 }
77}