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},
};
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
pub struct GridFsBucketOptions {
pub bucket_name: Option<String>,
pub chunk_size_bytes: Option<u32>,
pub write_concern: Option<WriteConcern>,
pub read_concern: Option<ReadConcern>,
pub selection_criteria: Option<SelectionCriteria>,
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsUploadOptions {
pub chunk_size_bytes: Option<u32>,
pub metadata: Option<Document>,
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsDownloadByNameOptions {
pub revision: Option<i32>,
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsFindOptions {
pub allow_disk_use: Option<bool>,
pub batch_size: Option<u32>,
pub limit: Option<i64>,
pub max_time: Option<Duration>,
pub skip: Option<u64>,
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()
}
}
}
#[derive(Clone, Debug, Default, Deserialize, TypedBuilder)]
#[builder(field_defaults(default, setter(into)))]
#[non_exhaustive]
#[export_tokens]
pub struct GridFsFindOneOptions {
pub max_time: Option<Duration>,
pub skip: Option<u64>,
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()
}
}
}