brokerage-db 0.2.7

Database management for trader brokerage data with a MongoDB backend.
Documentation
use anyhow::Result;
use mongodb::{ClientSession, Database};
use serde::Serialize;
use std::{any::type_name, fmt::Debug, sync::Arc};
use tokio::sync::Mutex;

pub async fn insert<T>(
    t: &T,
    db: &Database,
    collection_name: &str,
    session: Option<Arc<Mutex<ClientSession>>>,
) -> Result<()>
where
    T: Serialize + Send + Sync + Debug,
{
    let collection = db.collection::<T>(collection_name);

    let result = if session.is_some() {
        let session_am = session.unwrap();
        collection
            .insert_one(t)
            .session(&mut *session_am.lock().await)
            .await?
    } else {
        collection.insert_one(t).await?
    };

    tracing::info!(
        "inserted {} {:?}, _id: {}",
        type_name::<T>(),
        t,
        result.inserted_id
    );
    Ok(())
}