summaryrefslogtreecommitdiffstats
path: root/src/filesize.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/filesize.rs')
-rw-r--r--src/filesize.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/filesize.rs b/src/filesize.rs
new file mode 100644
index 0000000..0ac4c7e
--- /dev/null
+++ b/src/filesize.rs
@@ -0,0 +1,23 @@
+#[derive(Debug, Clone, Copy)]
+pub enum FilesizeType {
+ DiskUsage,
+ ApparentSize,
+}
+
+impl FilesizeType {
+ #[cfg(not(windows))]
+ pub fn size(self, metadata: &std::fs::Metadata) -> u64 {
+ use std::os::unix::fs::MetadataExt;
+
+ match self {
+ Self::ApparentSize => metadata.len(),
+ // block size is always 512 byte, see stat(2) manpage
+ Self::DiskUsage => metadata.blocks() * 512,
+ }
+ }
+
+ #[cfg(windows)]
+ pub fn size(self, metadata: &std::fs::Metadata) -> u64 {
+ metadata.len()
+ }
+}