mongodb/gridfs/
options.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
use std::time::Duration;

use macro_magic::export_tokens;
use serde::Deserialize;
use typed_builder::TypedBuilder;

use crate::{
    bson::Document,
    options::{FindOneOptions, FindOptions, ReadConcern, SelectionCriteria, WriteConcern},
};

/// Contains the options for creating a [`GridFsBucket`](crate::gridfs::GridFsBucket).
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
pub struct GridFsBucketOptions {
    /// The bucket name. Defaults to 'fs'.
    pub bucket_name: Option<String>,

    /// The chunk size in bytes used to break the user file into chunks. Defaults to 255 KiB.
    pub chunk_size_bytes: Option<u32>,

    /// The write concern. Defaults to the write concern of the database.
    pub write_concern: Option<WriteConcern>,

    /// The read concern. Defaults to the read concern of the database.
    pub read_concern: Option<ReadConcern>,

    /// The selection criteria. Defaults to the selection criteria of the database.
    pub selection_criteria: Option<SelectionCriteria>,
}

/// Contains the options for uploading a file to a [`GridFsBucket`](crate::gridfs::GridFsBucket).
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsUploadOptions {
    /// The number of bytes per chunk of this file. Defaults to the `chunk_size_bytes` specified
    /// in the [`GridFsBucketOptions`](crate::options::GridFsBucketOptions).
    pub chunk_size_bytes: Option<u32>,

    /// User data for the 'metadata' field of the files collection document.
    pub metadata: Option<Document>,
}

/// Contains the options for downloading a file from a [`GridFsBucket`](crate::gridfs::GridFsBucket)
/// by name.
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsDownloadByNameOptions {
    /// Which revision (documents with the same filename and different `upload_date`s)
    /// of the file to retrieve. Defaults to -1 (the most recent revision).
    ///
    /// Revision numbers are defined as follows:
    /// 0 = the original stored file
    /// 1 = the first revision
    /// 2 = the second revision
    /// etc...
    /// -2 = the second most recent revision
    /// -1 = the most recent revision
    pub revision: Option<i32>,
}

/// Contains the options for finding
/// [`FilesCollectionDocument`](crate::gridfs::FilesCollectionDocument)s in a
/// [`GridFsBucket`](crate::gridfs::GridFsBucket).
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsFindOptions {
    /// Enables writing to temporary files on the server. When set to true, the
    /// server can write temporary data to disk while executing the find operation
    /// on the files collection.
    pub allow_disk_use: Option<bool>,

    /// The number of documents to return per batch.
    pub batch_size: Option<u32>,

    /// The maximum number of documents to return.
    pub limit: Option<i64>,

    /// The maximum amount of time to allow the query to run.
    pub max_time: Option<Duration>,

    /// The number of documents to skip before returning.
    pub skip: Option<u64>,

    /// The order by which to sort results. Defaults to not sorting.
    pub sort: Option<Document>,
}

impl From<GridFsFindOptions> for FindOptions {
    fn from(options: GridFsFindOptions) -> Self {
        Self {
            allow_disk_use: options.allow_disk_use,
            batch_size: options.batch_size,
            limit: options.limit,
            max_time: options.max_time,
            skip: options.skip,
            sort: options.sort,
            ..Default::default()
        }
    }
}

/// Contains the options for finding a single
/// [`FilesCollectionDocument`](crate::gridfs::FilesCollectionDocument) in a
/// [`GridFsBucket`](crate::gridfs::GridFsBucket).
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsFindOneOptions {
    /// The maximum amount of time to allow the query to run.
    pub max_time: Option<Duration>,

    /// The number of documents to skip before returning.
    pub skip: Option<u64>,

    /// The order by which to sort results. Defaults to not sorting.
    pub sort: Option<Document>,
}

impl From<GridFsFindOneOptions> for FindOneOptions {
    fn from(options: GridFsFindOneOptions) -> Self {
        Self {
            max_time: options.max_time,
            skip: options.skip,
            sort: options.sort,
            ..Default::default()
        }
    }
}