use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Limits {
pub field_name_size: Option<usize>,
pub field_size: Option<usize>,
pub fields: Option<usize>,
pub file_size: Option<usize>,
pub files: Option<usize>,
pub parts: Option<usize>,
pub stream_size: Option<u64>,
pub buffer_size: usize,
}
impl Default for Limits {
fn default() -> Self {
Self {
field_name_size: Some(Self::DEFAULT_FIELD_NAME_SIZE),
field_size: Some(Self::DEFAULT_FIELD_SIZE),
fields: None,
file_size: Some(Self::DEFAULT_FILE_SIZE),
files: None,
parts: None,
stream_size: Some(Self::DEFAULT_STREAM_SIZE),
buffer_size: Self::DEFAULT_BUFFER_SIZE,
}
}
}
impl Limits {
pub const DEFAULT_FIELD_NAME_SIZE: usize = 100;
pub const DEFAULT_FIELD_SIZE: usize = 100 * 1024;
pub const DEFAULT_FILE_SIZE: usize = 10 * 1024 * 1024;
pub const DEFAULT_STREAM_SIZE: u64 = 200 * 1024 * 1024;
pub const DEFAULT_BUFFER_SIZE: usize = 8 * 1024;
#[must_use]
pub fn field_name_size(mut self, max: usize) -> Self {
self.field_name_size.replace(max);
self
}
#[must_use]
pub fn field_size(mut self, max: usize) -> Self {
self.field_size.replace(max);
self
}
#[must_use]
pub fn fields(mut self, max: usize) -> Self {
self.fields.replace(max);
self
}
#[must_use]
pub fn file_size(mut self, max: usize) -> Self {
self.file_size.replace(max);
self
}
#[must_use]
pub fn files(mut self, max: usize) -> Self {
self.files.replace(max);
self
}
#[must_use]
pub fn parts(mut self, max: usize) -> Self {
self.parts.replace(max);
self
}
#[must_use]
pub fn buffer_size(mut self, max: usize) -> Self {
assert!(
max >= Self::DEFAULT_BUFFER_SIZE,
"The max_buffer_size cannot be smaller than {}.",
Self::DEFAULT_BUFFER_SIZE,
);
self.buffer_size = max;
self
}
#[must_use]
pub fn stream_size(mut self, max: u64) -> Self {
self.stream_size.replace(max);
self
}
#[must_use]
pub fn checked_parts(&self, rhs: usize) -> Option<usize> {
self.parts.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_fields(&self, rhs: usize) -> Option<usize> {
self.fields.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_files(&self, rhs: usize) -> Option<usize> {
self.files.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_stream_size(&self, rhs: u64) -> Option<u64> {
self.stream_size.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_file_size(&self, rhs: usize) -> Option<usize> {
self.file_size.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_field_size(&self, rhs: usize) -> Option<usize> {
self.field_size.filter(|max| rhs > *max)
}
#[must_use]
pub fn checked_field_name_size(&self, rhs: usize) -> Option<usize> {
self.field_name_size.filter(|max| rhs > *max)
}
}