use std::marker::PhantomData;
use crate::probe::Probe;
#[derive(Debug)]
pub struct Topology<'a> {
pub(super) ptr: libblkid::blkid_topology,
_marker: PhantomData<&'a Probe>,
}
impl<'a> Topology<'a> {
pub(super) fn new(_: &'a Probe, topology: libblkid::blkid_topology) -> Topology<'a> {
log::debug!("Topology::new creating a new `Topology` instance");
Self {
ptr: topology,
_marker: PhantomData,
}
}
pub fn alignment_offset_in_bytes(&self) -> u64 {
let offset = unsafe { libblkid::blkid_topology_get_alignment_offset(self.ptr) };
log::debug!("Topology::alignment_offset_in_bytes offset {:?}", offset);
offset
}
pub fn supports_dax(&self) -> bool {
let dax = unsafe { libblkid::blkid_topology_get_dax(self.ptr) == 1 };
log::debug!(
"Topology::supports_dax supports storage direct access: {:?}",
dax
);
dax
}
pub fn minimum_io_size(&self) -> u64 {
let min_io = unsafe { libblkid::blkid_topology_get_minimum_io_size(self.ptr) };
log::debug!("Topology::minimum_io_size minimum I/O size: {:?}", min_io);
min_io
}
pub fn optimal_io_size(&self) -> u64 {
let opt_io = unsafe { libblkid::blkid_topology_get_optimal_io_size(self.ptr) };
log::debug!("Topology::optimal_io_size optimal I/O size: {:?}", opt_io);
opt_io
}
pub fn logical_block_size(&self) -> u64 {
let size = unsafe { libblkid::blkid_topology_get_logical_sector_size(self.ptr) };
log::debug!(
"Topology::logical_block_size logical block size: {:?}",
size
);
size
}
pub fn physical_block_size(&self) -> u64 {
let phys_size = unsafe { libblkid::blkid_topology_get_physical_sector_size(self.ptr) };
log::debug!(
"Topology::physical_block_size physical block size: {:?}",
phys_size
);
phys_size
}
}