standard_lib/fs/
file_type.rs

1#[derive(#[automatically_derived]
impl ::core::fmt::Debug for FileType {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f,
            match self {
                FileType::BlockDevice => "BlockDevice",
                FileType::CharDevice => "CharDevice",
                FileType::Directory => "Directory",
                FileType::Fifo => "Fifo",
                FileType::Symlink => "Symlink",
                FileType::Regular => "Regular",
                FileType::Socket => "Socket",
                FileType::Other => "Other",
            })
    }
}Debug, #[automatically_derived]
impl ::core::clone::Clone for FileType {
    #[inline]
    fn clone(&self) -> FileType {
        match self {
            FileType::BlockDevice => FileType::BlockDevice,
            FileType::CharDevice => FileType::CharDevice,
            FileType::Directory => FileType::Directory,
            FileType::Fifo => FileType::Fifo,
            FileType::Symlink => FileType::Symlink,
            FileType::Regular => FileType::Regular,
            FileType::Socket => FileType::Socket,
            FileType::Other => FileType::Other,
        }
    }
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for FileType {
    #[inline]
    fn eq(&self, other: &FileType) -> bool {
        let __self_discr = ::core::intrinsics::discriminant_value(self);
        let __arg1_discr = ::core::intrinsics::discriminant_value(other);
        __self_discr == __arg1_discr
    }
}PartialEq)]
2pub enum FileType {
3    BlockDevice,
4    CharDevice,
5    Directory,
6    Fifo,
7    Symlink,
8    Regular,
9    Socket,
10    Other,
11}
12
13use FileType::*;
14
15impl FileType {
16    #[inline(always)]
17    pub(crate) const fn from_stat_mode(st_mode: u32) -> FileType {
18        match st_mode & libc::S_IFMT {
19            libc::S_IFBLK => BlockDevice,
20            libc::S_IFCHR => CharDevice,
21            libc::S_IFDIR => Directory,
22            libc::S_IFIFO => Fifo,
23            libc::S_IFLNK => Symlink,
24            libc::S_IFREG => Regular,
25            libc::S_IFSOCK => Socket,
26            _ => Other,
27        }
28    }
29
30    pub(crate) fn from_dirent_type(d_type: u8) -> Option<FileType> {
31        Some(match d_type {
32            libc::DT_BLK => BlockDevice,
33            libc::DT_CHR => CharDevice,
34            libc::DT_DIR => Directory,
35            libc::DT_FIFO => Fifo,
36            libc::DT_LNK => Symlink,
37            libc::DT_REG => Regular,
38            libc::DT_SOCK => Socket,
39            libc::DT_UNKNOWN => None?,
40            _ => Other,
41        })
42    }
43}