summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClement Tsang <34804052+ClementTsang@users.noreply.github.com>2023-11-15 04:13:19 -0500
committerGitHub <noreply@github.com>2023-11-15 04:13:19 -0500
commit8b9328e29ec051a8922d6cde1dc42447a2d74df8 (patch)
tree4e7075f2c6b996a7b70dfd145bacbe9dd8e186e6
parent5eb4fbde5d7e41cd39dcb7c95e1bbf542e706cb0 (diff)
refactor: comment on convoluted `Filesystem::from_str` code (#1315)
* refactor: use a less convoluted match for filesystem type conversion * revert, just use comment * just use if statements instead * test * inline
-rw-r--r--src/app/data_harvester/disks/unix/file_systems.rs94
-rw-r--r--src/app/data_harvester/disks/unix/linux/partition.rs7
2 files changed, 68 insertions, 33 deletions
diff --git a/src/app/data_harvester/disks/unix/file_systems.rs b/src/app/data_harvester/disks/unix/file_systems.rs
index e54e0bc0..ba6c5689 100644
--- a/src/app/data_harvester/disks/unix/file_systems.rs
+++ b/src/app/data_harvester/disks/unix/file_systems.rs
@@ -1,6 +1,7 @@
use std::str::FromStr;
-/// Known filesystems. From [heim](https://github.com/heim-rs/heim/blob/master/heim-disk/src/filesystem.rs).
+/// Known filesystems. Original list from
+/// [heim](https://github.com/heim-rs/heim/blob/master/heim-disk/src/filesystem.rs).
///
/// All physical filesystems should have their own enum element and all virtual filesystems will go into
/// the [`FileSystem::Other`] element.
@@ -82,7 +83,8 @@ impl FileSystem {
}
#[allow(dead_code)]
- /// Returns a string identifying this filesystem.
+ #[inline]
+ /// Returns a string literal identifying this filesystem.
pub fn as_str(&self) -> &str {
match self {
FileSystem::Ext2 => "ext2",
@@ -112,30 +114,70 @@ impl FileSystem {
impl FromStr for FileSystem {
type Err = anyhow::Error;
+ #[inline]
+
fn from_str(s: &str) -> anyhow::Result<Self> {
- match () {
- _ if s.eq_ignore_ascii_case("ext2") => Ok(FileSystem::Ext2),
- _ if s.eq_ignore_ascii_case("ext3") => Ok(FileSystem::Ext3),
- _ if s.eq_ignore_ascii_case("ext4") => Ok(FileSystem::Ext4),
- _ if s.eq_ignore_ascii_case("msdos") || s.eq_ignore_ascii_case("vfat") => {
- Ok(FileSystem::VFat)
- }
- _ if s == "ntfs3" || s.eq_ignore_ascii_case("ntfs") => Ok(FileSystem::Ntfs),
- _ if s.eq_ignore_ascii_case("zfs") => Ok(FileSystem::Zfs),
- _ if s.eq_ignore_ascii_case("hfs") => Ok(FileSystem::Hfs),
- _ if s.eq_ignore_ascii_case("reiserfs") => Ok(FileSystem::Reiser3),
- _ if s.eq_ignore_ascii_case("reiser4") => Ok(FileSystem::Reiser4),
- _ if s.eq_ignore_ascii_case("exfat") => Ok(FileSystem::ExFat),
- _ if s.eq_ignore_ascii_case("f2fs") => Ok(FileSystem::F2fs),
- _ if s.eq_ignore_ascii_case("hfsplus") => Ok(FileSystem::HfsPlus),
- _ if s.eq_ignore_ascii_case("jfs") => Ok(FileSystem::Jfs),
- _ if s.eq_ignore_ascii_case("btrfs") => Ok(FileSystem::Btrfs),
- _ if s.eq_ignore_ascii_case("minix") => Ok(FileSystem::Minix),
- _ if s.eq_ignore_ascii_case("nilfs") => Ok(FileSystem::Nilfs),
- _ if s.eq_ignore_ascii_case("xfs") => Ok(FileSystem::Xfs),
- _ if s.eq_ignore_ascii_case("apfs") => Ok(FileSystem::Apfs),
- _ if s.eq_ignore_ascii_case("fuseblk") => Ok(FileSystem::FuseBlk),
- _ => Ok(FileSystem::Other(s.to_string())),
- }
+ // Done like this as `eq_ignore_ascii_case` avoids a string allocation.
+ Ok(if s.eq_ignore_ascii_case("ext2") {
+ FileSystem::Ext2
+ } else if s.eq_ignore_ascii_case("ext3") {
+ FileSystem::Ext3
+ } else if s.eq_ignore_ascii_case("ext4") {
+ FileSystem::Ext4
+ } else if s.eq_ignore_ascii_case("msdos") || s.eq_ignore_ascii_case("vfat") {
+ FileSystem::VFat
+ } else if s.eq_ignore_ascii_case("ntfs3") || s.eq_ignore_ascii_case("ntfs") {
+ FileSystem::Ntfs
+ } else if s.eq_ignore_ascii_case("zfs") {
+ FileSystem::Zfs
+ } else if s.eq_ignore_ascii_case("hfs") {
+ FileSystem::Hfs
+ } else if s.eq_ignore_ascii_case("reiserfs") {
+ FileSystem::Reiser3
+ } else if s.eq_ignore_ascii_case("reiser4") {
+ FileSystem::Reiser4
+ } else if s.eq_ignore_ascii_case("exfat") {
+ FileSystem::ExFat
+ } else if s.eq_ignore_ascii_case("f2fs") {
+ FileSystem::F2fs
+ } else if s.eq_ignore_ascii_case("hfsplus") {
+ FileSystem::HfsPlus
+ } else if s.eq_ignore_ascii_case("jfs") {
+ FileSystem::Jfs
+ } else if s.eq_ignore_ascii_case("btrfs") {
+ FileSystem::Btrfs
+ } else if s.eq_ignore_ascii_case("minix") {
+ FileSystem::Minix
+ } else if s.eq_ignore_ascii_case("nilfs") {
+ FileSystem::Nilfs
+ } else if s.eq_ignore_ascii_case("xfs") {
+ FileSystem::Xfs
+ } else if s.eq_ignore_ascii_case("apfs") {
+ FileSystem::Apfs
+ } else if s.eq_ignore_ascii_case("fuseblk") {
+ FileSystem::FuseBlk
+ } else {
+ FileSystem::Other(s.to_string())
+ })
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::FileSystem;
+ use std::str::FromStr;
+
+ #[test]
+ fn file_system_from_str() {
+ // Something supported
+ assert_eq!(FileSystem::from_str("ext4").unwrap(), FileSystem::Ext4);
+ assert_eq!(FileSystem::from_str("msdos").unwrap(), FileSystem::VFat);
+ assert_eq!(FileSystem::from_str("vfat").unwrap(), FileSystem::VFat);
+
+ // Something unsupported
+ assert_eq!(
+ FileSystem::from_str("this does not exist").unwrap(),
+ FileSystem::Other("this does not exist".to_owned())
+ );
}
}
diff --git a/src/app/data_harvester/disks/unix/linux/partition.rs b/src/app/data_harvester/disks/unix/linux/partition.rs
index 94cdf113..6f81965a 100644
--- a/src/app/data_harvester/disks/unix/linux/partition.rs
+++ b/src/app/data_harvester/disks/unix/linux/partition.rs
@@ -129,13 +129,6 @@ impl FromStr for Partition {
}
};
- // let options = match parts.next() {
- // Some(opts) => opts.to_string(),
- // None => {
- // bail!("missing options");
- // }
- // };
-
Ok(Partition {
device,
mount_point,