use std::{ cell::Cell, rc::Rc };
pub use salvo::prelude::*;
use crate::dyn_mod::manifest::Manifest;
pub trait Depends {
fn depends(&self) -> Vec<Manifest>;
}
#[derive(Clone)]
pub struct DmRouter {
inner: Rc<Cell<Router>>,
}
impl DmRouter {
pub fn new() -> Self {
Self { inner: Rc::new(Cell::new(Router::new())) }
}
pub fn push(&self, router_part: Router) -> Self {
self.inner.set(self.inner.take().push(router_part));
self.clone()
}
pub fn append(&self, routers: &mut Vec<Router>) -> Self {
self.inner.set(self.inner.take().append(routers));
self.clone()
}
pub fn hoop<H: Handler>(self, hoop: H) -> Self {
self.inner.set(self.inner.take().hoop(hoop));
self
}
pub fn router(self) -> Router {
self.inner.take()
}
}