1use std::fs::FileType;
2
3#[derive(Clone, Copy, PartialEq)]
4pub enum FileFlags {
5 File, Dir, Link, Block, Char, Pipe, Socket, Other,
13}
14
15impl FileFlags {
16 #[cfg(unix)]
17 pub fn from_type(file_type: FileType, zip_archive: bool) -> Self {
18 use std::os::unix::fs::FileTypeExt;
19 if file_type.is_dir() || zip_archive {
20 Self::Dir
21 } else if file_type.is_file() {
22 Self::File
23 } else if file_type.is_symlink() {
24 Self::Link
25 } else if file_type.is_block_device() {
26 Self::Block
27 } else if file_type.is_char_device() {
28 Self::Char
29 } else if file_type.is_fifo() {
30 Self::Pipe
31 } else if file_type.is_socket() {
32 Self::Socket
33 } else {
34 Self::Other
35 }
36 }
37
38 #[cfg(not(unix))]
39 pub fn from_type(file_type: FileType, zip_archive: bool) -> Self {
40 if file_type.is_dir() || zip_archive {
41 Self::Dir
42 } else if file_type.is_file() {
43 Self::File
44 } else if file_type.is_symlink() {
45 Self::Link
46 } else {
47 Self::Other
48 }
49 }
50
51 #[cfg(test)]
52 pub fn from_char(file_type: char) -> Self {
53 match file_type {
54 'f' => Self::File,
55 'd' => Self::Dir,
56 'l' => Self::Link,
57 _ => Self::Other,
58 }
59 }
60}