1#[derive(Debug, Copy, Clone, PartialEq, Eq)]
2#[allow(clippy::exhaustive_enums)]
3pub enum Origin {
5 Addition,
7 Binary,
9 Context,
11 Deletion,
13 Header,
15}
16
17impl From<git2::DiffLineType> for Origin {
18 #[inline]
19 fn from(diff_line_type: git2::DiffLineType) -> Self {
20 match diff_line_type {
21 git2::DiffLineType::Context | git2::DiffLineType::ContextEOFNL => Self::Context,
22 git2::DiffLineType::Addition | git2::DiffLineType::AddEOFNL => Self::Addition,
23 git2::DiffLineType::Deletion | git2::DiffLineType::DeleteEOFNL => Self::Deletion,
24 git2::DiffLineType::FileHeader | git2::DiffLineType::HunkHeader => Self::Header,
25 git2::DiffLineType::Binary => Self::Binary,
26 }
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use rstest::rstest;
33
34 use super::*;
35
36 #[rstest]
37 #[case::context(git2::DiffLineType::Context, Origin::Context)]
38 #[case::context_eof(git2::DiffLineType::ContextEOFNL, Origin::Context)]
39 #[case::addition(git2::DiffLineType::Addition, Origin::Addition)]
40 #[case::addition_eof(git2::DiffLineType::AddEOFNL, Origin::Addition)]
41 #[case::deletion(git2::DiffLineType::Deletion, Origin::Deletion)]
42 #[case::deletion_eof(git2::DiffLineType::DeleteEOFNL, Origin::Deletion)]
43 #[case::file_header(git2::DiffLineType::FileHeader, Origin::Header)]
44 #[case::hunk_header(git2::DiffLineType::HunkHeader, Origin::Header)]
45 #[case::binary(git2::DiffLineType::Binary, Origin::Binary)]
46 fn from_char(#[case] input: git2::DiffLineType, #[case] expected: Origin) {
47 assert_eq!(Origin::from(input), expected);
48 }
49}