#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Limits {
max_toc_entries: usize,
max_string_bytes: usize,
max_dependencies_per_entry: usize,
max_metadata_string_bytes: usize,
max_metadata_dependencies: usize,
max_metadata_index_bytes: usize,
max_row_bytes: usize,
max_fields_per_row: usize,
}
impl Limits {
const DEFAULT_MAX_TOC_ENTRIES: usize = 100_000;
const DEFAULT_MAX_STRING_BYTES: usize = 16 * 1024 * 1024;
const DEFAULT_MAX_DEPENDENCIES_PER_ENTRY: usize = 100_000;
const DEFAULT_MAX_METADATA_STRING_BYTES: usize = 256 * 1024 * 1024;
const DEFAULT_MAX_METADATA_DEPENDENCIES: usize = 1_000_000;
const DEFAULT_MAX_METADATA_INDEX_BYTES: usize = 64 * 1024 * 1024;
const DEFAULT_MAX_ROW_BYTES: usize = 16 * 1024 * 1024;
const DEFAULT_MAX_FIELDS_PER_ROW: usize = 4 * 1024;
pub const fn default_compatible() -> Self {
Self {
max_toc_entries: Self::DEFAULT_MAX_TOC_ENTRIES,
max_string_bytes: Self::DEFAULT_MAX_STRING_BYTES,
max_dependencies_per_entry: Self::DEFAULT_MAX_DEPENDENCIES_PER_ENTRY,
max_metadata_string_bytes: Self::DEFAULT_MAX_METADATA_STRING_BYTES,
max_metadata_dependencies: Self::DEFAULT_MAX_METADATA_DEPENDENCIES,
max_metadata_index_bytes: Self::DEFAULT_MAX_METADATA_INDEX_BYTES,
max_row_bytes: Self::DEFAULT_MAX_ROW_BYTES,
max_fields_per_row: Self::DEFAULT_MAX_FIELDS_PER_ROW,
}
}
pub const fn max_toc_entries(self) -> usize {
self.max_toc_entries
}
pub const fn max_string_bytes(self) -> usize {
self.max_string_bytes
}
pub const fn max_dependencies_per_entry(self) -> usize {
self.max_dependencies_per_entry
}
pub const fn max_metadata_string_bytes(self) -> usize {
self.max_metadata_string_bytes
}
pub const fn max_metadata_dependencies(self) -> usize {
self.max_metadata_dependencies
}
pub const fn max_metadata_index_bytes(self) -> usize {
self.max_metadata_index_bytes
}
pub const fn max_row_bytes(self) -> usize {
self.max_row_bytes
}
pub const fn max_fields_per_row(self) -> usize {
self.max_fields_per_row
}
#[must_use]
pub const fn with_max_toc_entries(mut self, value: usize) -> Self {
self.max_toc_entries = value;
self
}
#[must_use]
pub const fn with_max_string_bytes(mut self, value: usize) -> Self {
self.max_string_bytes = value;
self
}
#[must_use]
pub const fn with_max_dependencies_per_entry(mut self, value: usize) -> Self {
self.max_dependencies_per_entry = value;
self
}
#[must_use]
pub const fn with_max_metadata_string_bytes(mut self, value: usize) -> Self {
self.max_metadata_string_bytes = value;
self
}
#[must_use]
pub const fn with_max_metadata_dependencies(mut self, value: usize) -> Self {
self.max_metadata_dependencies = value;
self
}
#[must_use]
pub const fn with_max_metadata_index_bytes(mut self, value: usize) -> Self {
self.max_metadata_index_bytes = value;
self
}
#[must_use]
pub const fn with_max_row_bytes(mut self, value: usize) -> Self {
self.max_row_bytes = value;
self
}
#[must_use]
pub const fn with_max_fields_per_row(mut self, value: usize) -> Self {
self.max_fields_per_row = value;
self
}
}
impl Default for Limits {
fn default() -> Self {
Self::default_compatible()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ScanLimits {
max_rows: Option<u64>,
max_decompressed_bytes: Option<u64>,
}
impl ScanLimits {
pub const fn unlimited() -> Self {
Self {
max_rows: None,
max_decompressed_bytes: None,
}
}
pub const fn max_rows(self) -> Option<u64> {
self.max_rows
}
pub const fn max_decompressed_bytes(self) -> Option<u64> {
self.max_decompressed_bytes
}
#[must_use]
pub const fn with_max_rows(mut self, value: u64) -> Self {
self.max_rows = Some(value);
self
}
#[must_use]
pub const fn with_max_decompressed_bytes(mut self, value: u64) -> Self {
self.max_decompressed_bytes = Some(value);
self
}
}
impl Default for ScanLimits {
fn default() -> Self {
Self::unlimited()
}
}