diff options
Diffstat (limited to 'src/filesize.rs')
-rw-r--r-- | src/filesize.rs | 23 |
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() + } +} |