zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
// use mongodb::{
//     bson::{doc, extjson::de::Error, oid::ObjectId},
//     results::{DeleteResult, InsertOneResult, UpdateResult},
//     Client, Collection,
// };

// https://docs.rs/bb8-mongodb/latest/bb8_mongodb/
use mongodb::options::Acknowledgment;
use mongodb::options::WriteConcern;

use crate::core::error2::Error;
use crate::core::error2::Result;

pub async fn make_mongo(settings: &super::MongoSettings) -> Result<mongodb::Client> {
    // 创建客户端选项
    let mut client_options = match mongodb::options::ClientOptions::parse(settings.server()).await {
        Ok(client) => client,
        Err(e) => {
            log::error!(
                "mongodb_initialize_failed: server={}, error={:?}",
                settings,
                e
            );
            return Err(Error::UnexpectedError(anyhow::anyhow!(e)));
        }
    };

    // 写关注(write concern)通常用于指定写入操作的确认级别和等待时间
    let wc = WriteConcern::builder()
        .w(Acknowledgment::Majority)
        .journal(true)
        .build();

    // 设置连接池的最小和最大大小
    client_options.min_pool_size = Some(5);
    client_options.max_pool_size = Some(10);
    client_options.write_concern = Some(wc);

    // 创建客户端
    match mongodb::Client::with_options(client_options) {
        Ok(client) => {
            log::info!("mongodb_connect_successful: server={}", settings);
            Ok(client)
        }
        Err(e) => {
            log::error!("mongodb_connect_failed: server={}, error={:?}", settings, e);
            Err(Error::UnexpectedError(anyhow::anyhow!(e)))
        }
    }

    // match mongodb::Client::with_uri_str(settings.server()).await {
    //     Ok(client) => {
    //         log::info!("mongodb_initialize_successful: server={}", settings);
    //         Ok(client)
    //     }
    //     Err(e) => {
    //         log::error!(
    //             "mongodb_initialize_faile: server={}, error={:?}",
    //             settings,
    //             e
    //         );
    //         Err(crate::errors::ThrowError::RedisError(e.to_string()))
    //     }
    // }
}