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