mongodb_gridfs/
options.rs1use bson::Document;
2use mongodb::options::{ReadConcern, ReadPreference, WriteConcern};
3use std::{sync::Arc, time::Duration};
4use typed_builder::TypedBuilder;
5
6pub trait ProgressUpdate {
9 fn update(&self, position: usize);
10}
11
12#[derive(Clone, Default, TypedBuilder)]
14pub struct GridFSUploadOptions {
15 #[builder(default = None)]
20 pub(crate) chunk_size_bytes: Option<u32>,
21
22 #[builder(default = None)]
28 pub(crate) metadata: Option<Document>,
29
30 #[allow(dead_code)]
38 #[builder(default = None)]
39 content_type: Option<String>,
40
41 #[allow(dead_code)]
49 #[builder(default = None)]
50 aliases: Option<Vec<String>>,
51
52 #[builder(default = None)]
57 pub(crate) progress_tick: Option<Arc<dyn ProgressUpdate + Send + Sync>>, }
59
60#[derive(Clone, Debug, TypedBuilder)]
62pub struct GridFSBucketOptions {
63 #[builder(default = "fs".into())]
67 pub bucket_name: String,
68
69 #[builder(default = 255 * 1024)]
73 pub chunk_size_bytes: u32,
74
75 #[builder(default)]
79 pub write_concern: Option<WriteConcern>,
80
81 #[builder(default)]
85 pub read_concern: Option<ReadConcern>,
86
87 #[builder(default)]
91 pub read_preference: Option<ReadPreference>,
92
93 #[builder(default = false)]
101 pub disable_md5: bool,
102}
103
104impl Default for GridFSBucketOptions {
105 fn default() -> Self {
106 GridFSBucketOptions {
107 bucket_name: "fs".into(),
108 chunk_size_bytes: 255 * 1024,
109 write_concern: None,
110 read_concern: None,
111 read_preference: None,
112 disable_md5: false,
113 }
114 }
115}
116
117#[derive(Clone, Debug, Default, TypedBuilder)]
119pub struct GridFSFindOptions {
120 #[builder(default)]
131 pub allow_disk_use: Option<bool>,
132
133 #[builder(default)]
137 pub batch_size: Option<u32>,
138
139 #[builder(default)]
143 pub limit: Option<i64>,
144
145 #[builder(default)]
149 pub max_time: Option<Duration>,
150
151 #[builder(default)]
156 pub no_cursor_timeout: Option<bool>,
157
158 #[builder(default)]
162 pub skip: u64,
163
164 #[builder(default)]
168 pub sort: Option<Document>,
169}
170
171#[cfg(test)]
172mod tests {
173 use super::{GridFSBucketOptions, GridFSFindOptions};
174
175 #[test]
176 fn grid_fs_bucket_options_default() {
177 let options = GridFSBucketOptions::default();
178 assert_eq!(options.bucket_name, "fs");
179 assert_eq!(options.chunk_size_bytes, 255 * 1024);
180 assert_eq!(options.disable_md5, false);
181 }
182 #[test]
183 fn grid_fs_bucket_options_builder_default() {
184 let options = GridFSBucketOptions::builder().build();
185 assert_eq!(options.bucket_name, "fs");
186 assert_eq!(options.chunk_size_bytes, 255 * 1024);
187 assert_eq!(options.disable_md5, false);
188 }
189 #[test]
190 fn grid_fs_bucket_options_bucket_name() {
191 let options = GridFSBucketOptions::builder()
192 .bucket_name("newfs".into())
193 .build();
194 assert_eq!(options.bucket_name, "newfs");
195 }
196 #[test]
197 fn grid_fs_bucket_options_chunk_size_bytes() {
198 let options = GridFSBucketOptions::builder()
199 .chunk_size_bytes(1023)
200 .build();
201 assert_eq!(options.chunk_size_bytes, 1023);
202 }
203 #[test]
204 fn grid_fs_bucket_options_builder_chain() {
205 let options = GridFSBucketOptions::builder()
206 .bucket_name("newfs".into())
207 .chunk_size_bytes(1023)
208 .build();
209 assert_eq!(options.bucket_name, "newfs");
210 assert_eq!(options.chunk_size_bytes, 1023);
211 }
212
213 #[test]
214 fn grid_fs_find_options_builder_chain() {
215 let options = GridFSFindOptions::builder().skip(4).build();
216 assert_eq!(options.skip, 4);
217 }
218 #[test]
219 fn grid_fs_find_options_builder_default() {
220 let options = GridFSFindOptions::builder().build();
221 assert_eq!(options.allow_disk_use, None);
222 assert_eq!(options.batch_size, None);
223 assert_eq!(options.limit, None);
224 assert_eq!(options.max_time, None);
225 assert_eq!(options.no_cursor_timeout, None);
226 assert_eq!(options.skip, 0);
227 assert_eq!(options.sort, None);
228 }
229 #[test]
230 fn grid_fs_find_options_default() {
231 let options = GridFSFindOptions::default();
232 assert_eq!(options.allow_disk_use, None);
233 assert_eq!(options.batch_size, None);
234 assert_eq!(options.limit, None);
235 assert_eq!(options.max_time, None);
236 assert_eq!(options.no_cursor_timeout, None);
237 assert_eq!(options.skip, 0);
238 assert_eq!(options.sort, None);
239 }
240}