use crate::file_space_info::FileSpaceStrategy;
use crate::libver::LibVer;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[doc(alias = "fcpl")]
#[doc(alias = "H5Pcreate")]
pub struct FileCreateOptions {
userblock: u64,
libver_bounds: Option<(LibVer, LibVer)>,
file_space_strategy: Option<(FileSpaceStrategy, bool, u64)>,
file_space_page_size: Option<u64>,
}
impl FileCreateOptions {
pub const fn new() -> Self {
Self {
userblock: 0,
libver_bounds: None,
file_space_strategy: None,
file_space_page_size: None,
}
}
#[doc(alias = "H5Pset_userblock")]
pub const fn with_userblock(mut self, size: u64) -> Self {
self.userblock = size;
self
}
#[doc(alias = "H5Pset_libver_bounds")]
pub const fn with_libver_bounds(mut self, low: LibVer, high: LibVer) -> Self {
self.libver_bounds = Some((low, high));
self
}
#[doc(alias = "H5Pset_file_space_strategy")]
pub const fn with_file_space_strategy(
mut self,
strategy: FileSpaceStrategy,
persist: bool,
threshold: u64,
) -> Self {
self.file_space_strategy = Some((strategy, persist, threshold));
self
}
#[doc(alias = "H5Pset_file_space_page_size")]
pub const fn with_file_space_page_size(mut self, page_size: u64) -> Self {
self.file_space_page_size = Some(page_size);
self
}
pub const fn userblock(&self) -> u64 {
self.userblock
}
pub const fn libver_bounds(&self) -> Option<(LibVer, LibVer)> {
self.libver_bounds
}
pub const fn file_space_strategy(&self) -> Option<(FileSpaceStrategy, bool, u64)> {
self.file_space_strategy
}
pub const fn file_space_page_size(&self) -> Option<u64> {
self.file_space_page_size
}
}
impl Default for FileCreateOptions {
fn default() -> Self {
Self::new()
}
}