1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Deserialize, Serialize)]
5pub struct Limits {
6 pub field_name_size: Option<usize>,
8 pub field_size: Option<usize>,
10 pub fields: Option<usize>,
12 pub file_size: Option<usize>,
14 pub files: Option<usize>,
16 pub parts: Option<usize>,
18 pub stream_size: Option<u64>,
20 pub buffer_size: usize,
22}
23
24impl Default for Limits {
25 fn default() -> Self {
26 Self {
27 field_name_size: Some(Self::DEFAULT_FIELD_NAME_SIZE),
28 field_size: Some(Self::DEFAULT_FIELD_SIZE),
29 fields: None,
30 file_size: Some(Self::DEFAULT_FILE_SIZE),
31 files: None,
32 parts: None,
33 stream_size: Some(Self::DEFAULT_STREAM_SIZE),
34 buffer_size: Self::DEFAULT_BUFFER_SIZE,
35 }
36 }
37}
38
39impl Limits {
40 pub const DEFAULT_FIELD_NAME_SIZE: usize = 100;
42
43 pub const DEFAULT_FIELD_SIZE: usize = 100 * 1024;
45
46 pub const DEFAULT_FILE_SIZE: usize = 10 * 1024 * 1024;
48
49 pub const DEFAULT_STREAM_SIZE: u64 = 200 * 1024 * 1024;
51
52 pub const DEFAULT_BUFFER_SIZE: usize = 8 * 1024;
54
55 #[must_use]
57 pub fn field_name_size(mut self, max: usize) -> Self {
58 self.field_name_size.replace(max);
59 self
60 }
61
62 #[must_use]
64 pub fn field_size(mut self, max: usize) -> Self {
65 self.field_size.replace(max);
66 self
67 }
68
69 #[must_use]
71 pub fn fields(mut self, max: usize) -> Self {
72 self.fields.replace(max);
73 self
74 }
75
76 #[must_use]
78 pub fn file_size(mut self, max: usize) -> Self {
79 self.file_size.replace(max);
80 self
81 }
82
83 #[must_use]
85 pub fn files(mut self, max: usize) -> Self {
86 self.files.replace(max);
87 self
88 }
89
90 #[must_use]
92 pub fn parts(mut self, max: usize) -> Self {
93 self.parts.replace(max);
94 self
95 }
96
97 #[must_use]
103 pub fn buffer_size(mut self, max: usize) -> Self {
104 assert!(
105 max >= Self::DEFAULT_BUFFER_SIZE,
106 "The max_buffer_size cannot be smaller than {}.",
107 Self::DEFAULT_BUFFER_SIZE,
108 );
109
110 self.buffer_size = max;
111 self
112 }
113
114 #[must_use]
116 pub fn stream_size(mut self, max: u64) -> Self {
117 self.stream_size.replace(max);
118 self
119 }
120
121 #[must_use]
123 pub fn checked_parts(&self, rhs: usize) -> Option<usize> {
124 self.parts.filter(|max| rhs > *max)
125 }
126
127 #[must_use]
129 pub fn checked_fields(&self, rhs: usize) -> Option<usize> {
130 self.fields.filter(|max| rhs > *max)
131 }
132
133 #[must_use]
135 pub fn checked_files(&self, rhs: usize) -> Option<usize> {
136 self.files.filter(|max| rhs > *max)
137 }
138
139 #[must_use]
141 pub fn checked_stream_size(&self, rhs: u64) -> Option<u64> {
142 self.stream_size.filter(|max| rhs > *max)
143 }
144
145 #[must_use]
147 pub fn checked_file_size(&self, rhs: usize) -> Option<usize> {
148 self.file_size.filter(|max| rhs > *max)
149 }
150
151 #[must_use]
153 pub fn checked_field_size(&self, rhs: usize) -> Option<usize> {
154 self.field_size.filter(|max| rhs > *max)
155 }
156
157 #[must_use]
159 pub fn checked_field_name_size(&self, rhs: usize) -> Option<usize> {
160 self.field_name_size.filter(|max| rhs > *max)
161 }
162}