update
This commit is contained in:
parent
6be8a879f9
commit
f78cf419fc
4 changed files with 26 additions and 11 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1369,7 +1369,6 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"mio",
|
"mio",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
"parking_lot",
|
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"signal-hook-registry",
|
"signal-hook-registry",
|
||||||
"socket2 0.5.7",
|
"socket2 0.5.7",
|
||||||
|
|
|
@ -10,6 +10,6 @@ mongodb = "2.8.0"
|
||||||
regex = "1.10.5"
|
regex = "1.10.5"
|
||||||
serde = { version = "1.0.195", features = ["derive"] }
|
serde = { version = "1.0.195", features = ["derive"] }
|
||||||
serde_json = "1.0.111"
|
serde_json = "1.0.111"
|
||||||
tokio = { version = "1.35.1", features = ["full"] }
|
tokio = { version = "1.35.1", features = ["sync"], default-features = false }
|
||||||
uuid = { version = "1.8.0", features = ["v4"] }
|
uuid = { version = "1.8.0", features = ["v4"] }
|
||||||
mongod_derive = { path = "./mongod_derive" }
|
mongod_derive = { path = "./mongod_derive" }
|
||||||
|
|
16
src/lib.rs
16
src/lib.rs
|
@ -6,13 +6,23 @@ pub use model::Model;
|
||||||
pub use mongod_derive as derive;
|
pub use mongod_derive as derive;
|
||||||
pub use mongodb;
|
pub use mongodb;
|
||||||
|
|
||||||
|
use tokio::sync::OnceCell;
|
||||||
|
|
||||||
|
pub static MONGO_CLIENT: OnceCell<mongodb::Client> = OnceCell::const_new();
|
||||||
|
|
||||||
/// Get a `MongoDB` Client from the environment
|
/// Get a `MongoDB` Client from the environment
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! get_mongo {
|
macro_rules! get_mongo {
|
||||||
() => {
|
() => {
|
||||||
mongodb::Client::with_uri_str(std::env::var("DB_URI").unwrap())
|
if let Some(client) = crate::MONGO_CLIENT.get() {
|
||||||
.await
|
client
|
||||||
.unwrap()
|
} else {
|
||||||
|
let client = mongodb::Client::with_uri_str(&std::env::var("DB_URI").unwrap())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
crate::MONGO_CLIENT.set(client).unwrap();
|
||||||
|
crate::MONGO_CLIENT.get().unwrap()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,9 +80,15 @@ impl Validate for Reference {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Into<serde_json::Value> for Reference {
|
impl From<Reference> for serde_json::Value {
|
||||||
fn into(self) -> serde_json::Value {
|
fn from(value: Reference) -> Self {
|
||||||
serde_json::Value::String(self.0)
|
Self::String(value.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Reference> for mongodb::bson::Bson {
|
||||||
|
fn from(value: Reference) -> Self {
|
||||||
|
mongodb::bson::to_bson(&value.0).unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,12 +118,12 @@ pub trait Referencable {
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! reference_of {
|
macro_rules! reference_of {
|
||||||
($model:ident, $id:ident) => {{
|
($model:ident, $id:ident) => {{
|
||||||
$model::get_partial($id, &serde_json::json!({}))
|
$model::get_partial($id, serde_json::json!({}))
|
||||||
.await
|
.await
|
||||||
.map(|x| x.reference())
|
.map(|x| x.reference())
|
||||||
}};
|
}};
|
||||||
($model:ident, $id:literal) => {{
|
($model:ident, $id:literal) => {{
|
||||||
$model::get_partial($id, &serde_json::json!({}))
|
$model::get_partial($id, serde_json::json!({}))
|
||||||
.await
|
.await
|
||||||
.map(|x| x.reference())
|
.map(|x| x.reference())
|
||||||
}};
|
}};
|
||||||
|
|
Loading…
Reference in a new issue