1#[derive(Debug, Copy, Clone, PartialEq, Eq)]
3#[allow(clippy::exhaustive_enums)]
4pub enum FileMode {
5 Normal,
7 Executable,
9 Link,
11 Other,
13}
14
15impl FileMode {
16 pub(crate) const fn from(file_mode: git2::FileMode) -> Self {
17 match file_mode {
18 git2::FileMode::Commit | git2::FileMode::Tree | git2::FileMode::Unreadable => Self::Other,
19 git2::FileMode::Blob => Self::Normal,
20 git2::FileMode::BlobExecutable => Self::Executable,
21 git2::FileMode::Link => Self::Link,
22 }
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use rstest::rstest;
29
30 use super::*;
31
32 #[rstest]
33 #[case::commit(git2::FileMode::Commit, FileMode::Other)]
34 #[case::commit(git2::FileMode::Tree, FileMode::Other)]
35 #[case::commit(git2::FileMode::Unreadable, FileMode::Other)]
36 #[case::commit(git2::FileMode::Blob, FileMode::Normal)]
37 #[case::commit(git2::FileMode::BlobExecutable, FileMode::Executable)]
38 #[case::commit(git2::FileMode::Link, FileMode::Link)]
39 fn from(#[case] git2_file_mode: git2::FileMode, #[case] expected_file_mode: FileMode) {
40 assert_eq!(FileMode::from(git2_file_mode), expected_file_mode);
41 }
42}