// sql/mod.rs /* 定义了数据库具有的特征和方法 */ mod postgresql; use std::collections::HashMap; use crate::config; use async_trait::async_trait; use std::error::Error; use std::sync::Arc; #[async_trait] pub trait DatabaseTrait: Send + Sync { // 连接数据库 async fn connect(database: config::DbConfig) -> Result> where Self: Sized; // 执行查询 async fn query<'a>(&'a self, query: String) -> Result>, Box>; } #[derive(Clone)] pub struct Database { // 数据库实例 pub db: Arc>, } impl Database { // 获取当前数据库实例 pub fn get_db(&self) -> &Box { &self.db } // 初始化数据库 pub async fn init(database: config::DbConfig) -> Result> { let db = match database.db_type.as_str() { "postgresql" => postgresql::Postgresql::connect(database).await?, _ => return Err("unknown database type".into()), }; Ok(Self { db: Arc::new(Box::new(db)) }) } }