via 2.0.0-gm.12

An async multi-threaded web framework for people who appreciate simplicity.
mod allow;
mod route;

pub use allow::*;
pub use route::Route;

pub(crate) use allow::MethodNotAllowed;

use std::sync::Arc;
use via_router::{Router as Tree, Traverse};

use crate::middleware::Middleware;

pub(crate) struct Router<T> {
    tree: Tree<Arc<dyn Middleware<T>>>,
}

impl<T> Router<T> {
    pub fn new() -> Self {
        Default::default()
    }

    pub fn route(&mut self, path: &'static str) -> Route<'_, T> {
        Route {
            entry: self.tree.route(path),
        }
    }

    pub fn traverse<'b>(&self, path: &'b str) -> Traverse<'_, 'b, Arc<dyn Middleware<T>>> {
        self.tree.traverse(path)
    }
}

impl<T> Default for Router<T> {
    fn default() -> Self {
        Self {
            tree: Default::default(),
        }
    }
}