Skip to main content

mit_lint/model/
code.rs

1use quickcheck::{Arbitrary, Gen};
2use strum_macros::EnumIter;
3
4/// Error codes for lints that have failed
5///
6/// Useful for exit codes and other user facing things
7#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)]
8#[repr(i32)]
9pub enum Code {
10    /// Unique ID for `InitialNotMatchedToAuthor` failure
11    InitialNotMatchedToAuthor = 3,
12    /// Unique ID for `UnparsableAuthorFile` failure
13    UnparsableAuthorFile,
14    /// Unique ID for `StaleAuthor` failure
15    StaleAuthor,
16    /// Unique ID for `DuplicatedTrailers` failure
17    DuplicatedTrailers,
18    /// Unique ID for `PivotalTrackerIdMissing` failure
19    PivotalTrackerIdMissing,
20    /// Unique ID for `JiraIssueKeyMissing` failure
21    JiraIssueKeyMissing,
22    /// Unique ID for `GitHubIdMissing` failure
23    GitHubIdMissing,
24    /// Unique ID for `SubjectNotSeparateFromBody` failure
25    SubjectNotSeparateFromBody,
26    /// Unique ID for `SubjectLongerThan72Characters` failure
27    SubjectLongerThan72Characters,
28    /// Unique ID for `SubjectNotCapitalized` failure
29    SubjectNotCapitalized,
30    /// Unique ID for `SubjectEndsWithPeriod` failure
31    SubjectEndsWithPeriod,
32    /// Unique ID for `BodyWiderThan72Characters` failure
33    BodyWiderThan72Characters,
34    /// Unique ID for `NotConventionalCommit` failure
35    NotConventionalCommit,
36    /// Unique ID for `NotEmojiLog` failure
37    NotEmojiLog,
38    /// Unique ID for `GitLabIdMissing` failure
39    GitLabIdMissing,
40}
41
42impl Arbitrary for Code {
43    fn arbitrary(g: &mut Gen) -> Self {
44        *g.choose(&Self::get_codes()).unwrap()
45    }
46
47    fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
48        quickcheck::empty_shrinker()
49    }
50}
51
52impl Code {
53    const fn get_codes() -> [Self; 15] {
54        [
55            Self::InitialNotMatchedToAuthor,
56            Self::UnparsableAuthorFile,
57            Self::StaleAuthor,
58            Self::DuplicatedTrailers,
59            Self::PivotalTrackerIdMissing,
60            Self::JiraIssueKeyMissing,
61            Self::GitHubIdMissing,
62            Self::GitLabIdMissing,
63            Self::SubjectNotSeparateFromBody,
64            Self::SubjectLongerThan72Characters,
65            Self::SubjectNotCapitalized,
66            Self::SubjectEndsWithPeriod,
67            Self::BodyWiderThan72Characters,
68            Self::NotConventionalCommit,
69            Self::NotEmojiLog,
70        ]
71    }
72}