1
0
mirror of https://github.com/fafhrd91/actix-web synced 2025-08-19 12:25:37 +02:00

refactor router

This commit is contained in:
Nikolay Kim
2018-07-15 15:12:21 +06:00
parent cf976d296f
commit da915972c0
11 changed files with 635 additions and 655 deletions

View File

@@ -1,4 +1,4 @@
use std::marker::PhantomData;
use std::ops::Deref;
use std::rc::Rc;
use futures::Future;
@@ -12,6 +12,7 @@ use httpresponse::HttpResponse;
use middleware::Middleware;
use pred;
use route::Route;
use router::ResourceDef;
#[derive(Copy, Clone)]
pub(crate) struct RouteId(usize);
@@ -37,40 +38,34 @@ pub(crate) struct RouteId(usize);
/// .finish();
/// }
pub struct Resource<S = ()> {
name: String,
state: PhantomData<S>,
rdef: ResourceDef,
routes: SmallVec<[Route<S>; 3]>,
middlewares: Rc<Vec<Box<Middleware<S>>>>,
}
impl<S> Default for Resource<S> {
fn default() -> Self {
impl<S> Resource<S> {
/// Create new resource with specified resource definition
pub fn new(rdef: ResourceDef) -> Self {
Resource {
name: String::new(),
state: PhantomData,
rdef,
routes: SmallVec::new(),
middlewares: Rc::new(Vec::new()),
}
}
}
impl<S> Resource<S> {
pub(crate) fn default_not_found() -> Self {
Resource {
name: String::new(),
state: PhantomData,
routes: SmallVec::new(),
middlewares: Rc::new(Vec::new()),
}
/// Name of the resource
pub(crate) fn get_name(&self) -> &str {
self.rdef.name()
}
/// Set resource name
pub fn name<T: Into<String>>(&mut self, name: T) {
self.name = name.into();
pub fn name(&mut self, name: &str) {
self.rdef.set_name(name);
}
pub(crate) fn get_name(&self) -> &str {
&self.name
/// Resource definition
pub fn rdef(&self) -> &ResourceDef {
&self.rdef
}
}
@@ -303,3 +298,26 @@ impl<S: 'static> Resource<S> {
}
}
}
/// Default resource
pub struct DefaultResource<S>(Rc<Resource<S>>);
impl<S> Deref for DefaultResource<S> {
type Target = Resource<S>;
fn deref(&self) -> &Resource<S> {
self.0.as_ref()
}
}
impl<S> Clone for DefaultResource<S> {
fn clone(&self) -> Self {
DefaultResource(self.0.clone())
}
}
impl<S> From<Resource<S>> for DefaultResource<S> {
fn from(res: Resource<S>) -> Self {
DefaultResource(Rc::new(res))
}
}