use win_shared_os_owned_handle::SharedHandle;
use durable_ioring::FlushDomain;
use durable_ioring::{Capabilities, Geometry, IoTarget, WarrantyClass};
#[derive(Clone, Debug)]
pub struct Win32FileTarget {
handle: SharedHandle,
domains: Vec<FlushDomain>,
warranty: WarrantyClass,
geometry: Geometry,
capabilities: Capabilities,
}
impl Win32FileTarget {
#[must_use]
pub fn new(handle: SharedHandle) -> Self {
Self {
handle,
domains: Vec::new(),
warranty: WarrantyClass::BestEffort,
geometry: Geometry::UNALIGNED,
capabilities: Capabilities::NONE,
}
}
#[must_use]
pub fn with_domains(mut self, domains: impl IntoIterator<Item = FlushDomain>) -> Self {
self.domains = domains.into_iter().collect();
self
}
#[must_use]
pub fn with_warranty(mut self, warranty: WarrantyClass) -> Self {
self.warranty = warranty;
self
}
#[must_use]
pub fn with_geometry(mut self, geometry: Geometry) -> Self {
self.geometry = geometry;
self
}
#[must_use]
pub fn with_capabilities(mut self, capabilities: Capabilities) -> Self {
self.capabilities = capabilities;
self
}
#[must_use]
pub fn handle(&self) -> &SharedHandle {
&self.handle
}
}
impl IoTarget for Win32FileTarget {
fn flush_domains(&self) -> &[FlushDomain] {
&self.domains
}
fn warranty(&self) -> WarrantyClass {
self.warranty
}
fn geometry(&self) -> Geometry {
self.geometry
}
fn capabilities(&self) -> Capabilities {
self.capabilities
}
}