ruwebframe 0.1.6

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::{webdto, 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>>>,
    items: Mutex<Vec<webdto::WebRoute>>,
}

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

    // 添加单个路由配置函数
    pub fn add<F>(&self, config_fn: F,path: &str) -> &Self
    where
        F: Fn(&mut web::ServiceConfig) + Send + Sync + 'static,
    {
        let mut guard = self.configs.lock().unwrap();
        guard.push(Box::new(config_fn));
        //webdto::reg_route(path, path, "ident_to_string($method)", "$handler");
        let mut item=webdto::WebRoute::default();
        item.name=path.to_string();
        item.path=path.to_string();
        item.method="ident_to_string($method)".to_string();
        item.handler="$handler".to_string();
        let mut items = self.items.lock().unwrap();
        items.push(item);
        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 clear_items (&self ) {
       self.configs.lock().unwrap() .clear();

    }
    // 应用所有配置
    pub fn apply_routes(&self, cfg: &mut web::ServiceConfig) {

        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 list_routes_items(&self ) {

        let mut guard  = self.items.lock().unwrap();
        for item in guard .iter() {
           // println!("注册路由:{}",  item .path.clone());
            rulog::info2("注册路由:",  item .path.clone());
        }
    }
    // 获取配置数量
}

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

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

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

pub fn clear_route_items (  )  {

    with_container_mut(|container| {
        container. configs= Mutex::new(Vec::new())
    });
}