use crate::file_space_info::FileSpaceStrategy;
use crate::libver::LibVer;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[doc(alias = "fcpl")]
pub struct FileCreateProperties {
userblock: u64,
libver_bounds: Option<(LibVer, LibVer)>,
file_space_strategy: Option<(FileSpaceStrategy, bool, u64)>,
file_space_page_size: Option<u64>,
}
#[deprecated(
since = "0.26.0",
note = "renamed to `FileCreateProperties`: a type standing in for a whole HDF5 property list now carries the `Properties` suffix"
)]
pub type FileCreateOptions = FileCreateProperties;
impl FileCreateProperties {
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 FileCreateProperties {
fn default() -> Self {
Self::new()
}
}