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}
39
40impl Arbitrary for Code {
41    fn arbitrary(g: &mut Gen) -> Self {
42        *g.choose(&Self::get_codes()).unwrap()
43    }
44
45    fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
46        quickcheck::empty_shrinker()
47    }
48}
49
50impl Code {
51    const fn get_codes() -> [Self; 14] {
52        [
53            Self::InitialNotMatchedToAuthor,
54            Self::UnparsableAuthorFile,
55            Self::StaleAuthor,
56            Self::DuplicatedTrailers,
57            Self::PivotalTrackerIdMissing,
58            Self::JiraIssueKeyMissing,
59            Self::GitHubIdMissing,
60            Self::SubjectNotSeparateFromBody,
61            Self::SubjectLongerThan72Characters,
62            Self::SubjectNotCapitalized,
63            Self::SubjectEndsWithPeriod,
64            Self::BodyWiderThan72Characters,
65            Self::NotConventionalCommit,
66            Self::NotEmojiLog,
67        ]
68    }
69}