ruwebframe 0.1.6

a simple webframe for rust actix-web, based on rudi and rbatis.
Documentation
use crate::rubase::BaseEntitySingle;
use crate::rulog;
use crate::ruweb::webdto;
use crate::ruweb::webdto::web_route::WebRoute;
use std::sync::{Arc, Mutex, Once, OnceLock};

#[derive(Default, Clone, Debug)]
pub struct WebRouteList {
    items: Arc<Vec<WebRoute>>,
}

impl BaseEntitySingle for WebRouteList {}
impl WebRouteList {
    pub fn new() -> Self {
        Self {
            items: Arc::new(Vec::<WebRoute>::new()),
        }
    }

    pub fn add_item(&mut self, item: WebRoute) {
        let mut data_mut = Arc::make_mut(&mut self.items); // 这会克隆数据如果引用计数>1
        data_mut.push(item);
    }

    pub fn find_item(&self, name: &str) -> &WebRoute {
        for item in self.items.iter() {
            if item.name.as_str() == name {
                return item;
            }
        }
        &self.items[0]
    }

    pub fn list_items(&self) {
        self.items.iter().for_each(|item| {
            rulog::info2("route:", item);
        })
    }

    pub fn push(arc: &mut Arc<WebRouteList>, item: WebRoute) {
        let this = Arc::make_mut(arc);
        let data_mut = Arc::make_mut(&mut this.items);
        data_mut.push(item);
    }
}

pub fn reg_route(name: &str, path: &str, method: &str, handler: &str) {
    let mut list = webdto::find_bean_web_route_list().unwrap();
    let mut w = WebRoute::default();
    w.name = name.to_string();
    w.path = path.to_string();
    w.method = method.to_string();
    w.handler = handler.to_string();
    webdto::init_container().lock().unwrap().add_item(w);
}
pub static ROUTE_CONTAINER: OnceLock<Mutex<WebRouteList>> = OnceLock::new();
pub static INIT_ONCE: Once = Once::new();

pub fn init_container() -> &'static Mutex<WebRouteList> {
    INIT_ONCE.call_once(|| {
        let container = WebRouteList::new();
        ROUTE_CONTAINER.set(Mutex::new(container));
        println!("✅ Route Container initialized");
    });
    ROUTE_CONTAINER.get().unwrap()
}
pub fn list_items() {

    webdto::init_container().lock().unwrap().list_items();
    
}