1mod aggregate;
4mod bulk_write;
5mod client_options;
6mod count;
7mod create_collection;
8mod create_index;
9#[cfg(feature = "in-use-encryption")]
10pub mod csfle;
11mod delete;
12mod distinct;
13mod drop;
14mod drop_index;
15mod find;
16mod find_and_modify;
17pub mod gridfs;
18mod insert_many;
19mod insert_one;
20mod list_collections;
21mod list_databases;
22mod list_indexes;
23mod perf;
24mod replace_one;
25mod run_command;
26mod search_index;
27mod session;
28mod shutdown;
29pub(crate) mod transaction;
30mod update;
31mod watch;
32
33use std::{future::IntoFuture, marker::PhantomData, ops::Deref};
34
35use crate::bson::Document;
36
37pub use aggregate::Aggregate;
38pub use bulk_write::BulkWrite;
39pub use client_options::ParseConnectionString;
40pub use count::{CountDocuments, EstimatedDocumentCount};
41pub use create_collection::CreateCollection;
42pub use create_index::CreateIndex;
43pub use delete::Delete;
44pub use distinct::Distinct;
45pub use drop::{DropCollection, DropDatabase};
46pub use drop_index::DropIndex;
47pub use find::{Find, FindOne};
48pub use find_and_modify::{FindOneAndDelete, FindOneAndReplace, FindOneAndUpdate};
49pub use insert_many::InsertMany;
50pub use insert_one::InsertOne;
51pub use list_collections::ListCollections;
52pub use list_databases::ListDatabases;
53pub use list_indexes::ListIndexes;
54pub use perf::WarmConnectionPool;
55pub use replace_one::ReplaceOne;
56pub use run_command::{RunCommand, RunCursorCommand};
57pub use search_index::{CreateSearchIndex, DropSearchIndex, ListSearchIndexes, UpdateSearchIndex};
58pub use session::StartSession;
59pub use shutdown::Shutdown;
60pub use transaction::{AbortTransaction, CommitTransaction, StartTransaction};
61pub use update::Update;
62pub use watch::Watch;
63
64#[allow(missing_docs)]
65pub struct ListSpecifications;
66#[allow(missing_docs)]
67pub struct ListNames;
68
69#[allow(missing_docs)]
70pub struct ImplicitSession;
71#[allow(missing_docs)]
72pub struct ExplicitSession<'a>(&'a mut crate::ClientSession);
73
74#[doc(hidden)]
75pub trait ActionSession<'a> {
76 fn into_opt_session(self) -> Option<&'a mut crate::ClientSession>;
77}
78
79impl<'a> ActionSession<'a> for ImplicitSession {
80 fn into_opt_session(self) -> Option<&'a mut crate::ClientSession> {
81 None
82 }
83}
84
85impl<'a> ActionSession<'a> for ExplicitSession<'a> {
86 fn into_opt_session(self) -> Option<&'a mut crate::ClientSession> {
87 Some(self.0)
88 }
89}
90
91#[allow(missing_docs)]
92pub struct Single;
93#[allow(missing_docs)]
94pub struct Multiple;
95
96use mongodb_internal_macros::{export_doc, option_setters, options_doc};
97
98pub(crate) mod private {
99 pub trait Sealed {}
100}
101
102pub trait Action: private::Sealed + IntoFuture {
105 fn optional<Value>(self, value: Option<Value>, f: impl FnOnce(Self, Value) -> Self) -> Self
118 where
119 Self: Sized,
120 {
121 match value {
122 Some(value) => f(self, value),
123 None => self,
124 }
125 }
126}
127
128pub(crate) use mongodb_internal_macros::{action_impl, deeplink};
129
130use crate::Collection;
131
132pub(crate) struct CollRef<'a> {
133 inner: Collection<Document>,
134 _ref: PhantomData<&'a ()>,
135}
136
137impl<'a> CollRef<'a> {
138 fn new<T: Send + Sync>(coll: &'a Collection<T>) -> Self {
139 Self {
140 inner: coll.clone_with_type(),
141 _ref: PhantomData,
142 }
143 }
144
145 pub(crate) fn inner(&self) -> &Collection<Document> {
146 &self.inner
147 }
148}
149
150impl Deref for CollRef<'_> {
151 type Target = Collection<Document>;
152
153 fn deref(&self) -> &Self::Target {
154 &self.inner
155 }
156}