use std::fs::FileType;
#[derive(Clone, Copy, PartialEq)]
pub enum FileFlags {
File, Dir, Link, Block, Char, Pipe, Socket, Other,
}
impl FileFlags {
#[cfg(unix)]
pub fn from_type(file_type: FileType, zip_archive: bool) -> Self {
use std::os::unix::fs::FileTypeExt;
if file_type.is_dir() || zip_archive {
Self::Dir
} else if file_type.is_file() {
Self::File
} else if file_type.is_symlink() {
Self::Link
} else if file_type.is_block_device() {
Self::Block
} else if file_type.is_char_device() {
Self::Char
} else if file_type.is_fifo() {
Self::Pipe
} else if file_type.is_socket() {
Self::Socket
} else {
Self::Other
}
}
#[cfg(not(unix))]
pub fn from_type(file_type: FileType, zip_archive: bool) -> Self {
if file_type.is_dir() || zip_archive {
Self::Dir
} else if file_type.is_file() {
Self::File
} else if file_type.is_symlink() {
Self::Link
} else {
Self::Other
}
}
#[cfg(test)]
pub fn from_char(file_type: char) -> Self {
match file_type {
'f' => Self::File,
'd' => Self::Dir,
'l' => Self::Link,
_ => Self::Other,
}
}
}