parallel_disk_usage/
get_size.rsuse super::size::Bytes;
use std::fs::Metadata;
#[cfg(unix)]
use super::size::Blocks;
#[cfg(unix)]
use std::os::unix::prelude::MetadataExt;
pub trait GetSize {
type Size;
fn get_size(&self, metadata: &Metadata) -> Self::Size;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GetApparentSize;
impl GetSize for GetApparentSize {
type Size = Bytes;
fn get_size(&self, metadata: &Metadata) -> Self::Size {
metadata.len().into()
}
}
#[cfg(unix)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GetBlockSize;
#[cfg(unix)]
impl GetSize for GetBlockSize {
type Size = Bytes;
fn get_size(&self, metadata: &Metadata) -> Self::Size {
(metadata.blocks() * 512).into()
}
}
#[cfg(unix)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GetBlockCount;
#[cfg(unix)]
impl GetSize for GetBlockCount {
type Size = Blocks;
fn get_size(&self, metadata: &Metadata) -> Self::Size {
metadata.blocks().into()
}
}