1use heim_common::prelude::*;
2
3use std::str::FromStr;
4
5#[derive(Debug, Eq, PartialEq, Hash, Clone)]
10pub enum FileSystem {
11 Ext2,
13
14 Ext3,
16
17 Ext4,
19
20 VFat,
22
23 ExFat,
25
26 F2fs,
28
29 Ntfs,
31
32 Zfs,
34
35 Hfs,
37
38 HfsPlus,
40
41 Jfs,
43
44 Reiser3,
46
47 Reiser4,
49
50 Btrfs,
52
53 Minix,
55
56 Nilfs,
58
59 Xfs,
61
62 Apfs,
64
65 FuseBlk,
68
69 Other(String),
72
73 #[doc(hidden)]
74 __Nonexhaustive,
75}
76
77impl FileSystem {
78 pub fn is_physical(&self) -> bool {
80 match self {
81 FileSystem::Other(..) => false,
82 _ => true,
83 }
84 }
85
86 pub fn is_virtual(&self) -> bool {
88 !self.is_physical()
89 }
90
91 pub fn as_str(&self) -> &str {
93 match self {
94 FileSystem::Ext2 => "ext2",
95 FileSystem::Ext3 => "ext3",
96 FileSystem::Ext4 => "ext4",
97 FileSystem::VFat => "vfat",
98 FileSystem::Ntfs => "ntfs",
99 FileSystem::Zfs => "zfs",
100 FileSystem::Hfs => "hfs",
101 FileSystem::Reiser3 => "reiserfs",
102 FileSystem::Reiser4 => "reiser4",
103 FileSystem::FuseBlk => "fuseblk",
104 FileSystem::ExFat => "exfat",
105 FileSystem::F2fs => "f2fs",
106 FileSystem::HfsPlus => "hfs+",
107 FileSystem::Jfs => "jfs",
108 FileSystem::Btrfs => "btrfs",
109 FileSystem::Minix => "minix",
110 FileSystem::Nilfs => "nilfs",
111 FileSystem::Xfs => "xfs",
112 FileSystem::Apfs => "apfs",
113 FileSystem::Other(string) => string.as_str(),
114 _ => unimplemented!(),
115 }
116 }
117}
118
119impl FromStr for FileSystem {
120 type Err = Error;
121
122 fn from_str(s: &str) -> Result<Self> {
123 match () {
124 _ if s.eq_ignore_ascii_case("ext2") => Ok(FileSystem::Ext2),
125 _ if s.eq_ignore_ascii_case("ext3") => Ok(FileSystem::Ext3),
126 _ if s.eq_ignore_ascii_case("ext4") => Ok(FileSystem::Ext4),
127 _ if s.eq_ignore_ascii_case("vfat") => Ok(FileSystem::VFat),
128 _ if s.eq_ignore_ascii_case("ntfs") => Ok(FileSystem::Ntfs),
129 _ if s.eq_ignore_ascii_case("zfs") => Ok(FileSystem::Zfs),
130 _ if s.eq_ignore_ascii_case("hfs") => Ok(FileSystem::Hfs),
131 _ if s.eq_ignore_ascii_case("reiserfs") => Ok(FileSystem::Reiser3),
132 _ if s.eq_ignore_ascii_case("reiser4") => Ok(FileSystem::Reiser4),
133 _ if s.eq_ignore_ascii_case("exfat") => Ok(FileSystem::ExFat),
134 _ if s.eq_ignore_ascii_case("f2fs") => Ok(FileSystem::F2fs),
135 _ if s.eq_ignore_ascii_case("hfsplus") => Ok(FileSystem::HfsPlus),
136 _ if s.eq_ignore_ascii_case("jfs") => Ok(FileSystem::Jfs),
137 _ if s.eq_ignore_ascii_case("btrfs") => Ok(FileSystem::Btrfs),
138 _ if s.eq_ignore_ascii_case("minix") => Ok(FileSystem::Minix),
139 _ if s.eq_ignore_ascii_case("nilfs") => Ok(FileSystem::Nilfs),
140 _ if s.eq_ignore_ascii_case("xfs") => Ok(FileSystem::Xfs),
141 _ if s.eq_ignore_ascii_case("apfs") => Ok(FileSystem::Apfs),
142
143 _ if s.eq_ignore_ascii_case("fuseblk") => Ok(FileSystem::FuseBlk),
144 _ => Ok(FileSystem::Other(s.to_string())),
145 }
146 }
147}