use std::sync::{Mutex, Once, OnceLock};
use ctor::ctor;
use crate::ruweb::webrouter::RouteContainer;
pub static ROUTE_CONTAINER: OnceLock<Mutex<RouteContainer>> = OnceLock::new();
pub static INIT_ONCE: Once = Once::new();
pub fn init_container() -> &'static Mutex<RouteContainer> {
INIT_ONCE.call_once(|| {
let container = RouteContainer::new();
ROUTE_CONTAINER.set(Mutex::new(container)) ;
println!("✅ Route Container initialized");
});
ROUTE_CONTAINER.get().unwrap()
}
pub fn with_container_mut<F, R>(f: F) -> R
where
F: FnOnce(&mut RouteContainer) -> R,
{
let mut guard = init_container().lock().unwrap();
f(&mut guard)
}
pub fn with_container<F, R>(f: F) -> R
where
F: FnOnce(&RouteContainer) -> R,
{
let guard = init_container().lock().unwrap();
f(&guard)
}
#[ctor(unsafe)]
fn init_container_ctor() {
init_container();
}
pub fn list_routes_items() {
init_container().lock().unwrap() .list_routes_items();
}