ruwebframe 0.1.5

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation

use crate::rubase::BaseEntitySingle;
use std::sync::{  Mutex  };
use actix_web::web;
use crate::rulog;
use crate::ruweb::webrouter;
use crate::ruweb::webrouter::route_factroy::with_container_mut;

// 路由配置函数类型别名
pub type RouteConfigFn = dyn Fn(&mut web::ServiceConfig) + Send + Sync + 'static;

#[derive()]
pub struct RouteContainer {
    configs: Mutex<Vec<Box<RouteConfigFn>>>,

}

impl BaseEntitySingle for RouteContainer {}
impl RouteContainer {
    pub fn new() -> Self {
        Self {
            configs: Mutex::new(Vec::new()),
        }
    }

    // 添加单个路由配置函数
    pub fn add<F>(&self, config_fn: F) -> &Self
    where
        F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
    {
        let mut guard = self.configs.lock().unwrap();
        guard.push(Box::new(config_fn));
        self
    }

    // 批量添加路由配置函数
    pub fn add_all<F>(&self, config_fns: Vec<F>) -> &Self
    where
        F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
    {
        let mut guard = self.configs.lock().unwrap();
        for config_fn in config_fns {
            guard.push(Box::new(config_fn));
        }
        self
    }

    // 应用所有配置
    pub fn apply_routes(&self, cfg: &mut web::ServiceConfig) {
        self.list_routes();
        let mut guard = self.configs.lock().unwrap();

        for config_fn in guard.iter_mut() {
            config_fn(cfg);
        }
    }
    pub fn list_routes(&self ) {
        let mut guard = self.configs.lock().unwrap();
        for item in guard.iter() {
            let ptr = item as *const Box<dyn Fn(&mut web::ServiceConfig) + Send + Sync>;

            rulog::info2("执行路由:", format!("{:p}", ptr).to_string());
        }
    }
    // 获取配置数量
}

pub fn register_route<F>(config_api_route: F) -> ()
where
    F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
{
        with_container_mut(|container| {
            container.add(config_api_route);
            println!("✅ API routes registered");
        });

}
pub fn register_route_all<F>(config_api_routes: Vec<F>) -> ()
where
    F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
{

    // container
    with_container_mut(|container| {
        container.add_all(config_api_routes);
        println!("✅ API routes registered");
    });
}

pub fn register_route_path<F>(config_api_route: F) -> ()
where
    F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
{
    webrouter::register_route::<F>(config_api_route);

}