diff --git a/.travis.yml b/.travis.yml index d994a80d..1d3c227a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,6 @@ before_script: script: - cargo clean - - cargo check - cargo test -- --nocapture # Upload docs diff --git a/src/app.rs b/src/app.rs index 2a2380b2..c9c23d9c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -188,13 +188,13 @@ where > where M: NewTransform< - AppService<P>, + AppRouting<P>, Request = ServiceRequest<P>, Response = ServiceResponse<B>, Error = (), InitError = (), >, - F: IntoNewTransform<M, AppService<P>>, + F: IntoNewTransform<M, AppRouting<P>>, { let fref = Rc::new(RefCell::new(None)); let endpoint = ApplyNewService::new(mw, AppEntry::new(fref.clone())); @@ -253,7 +253,7 @@ pub struct AppRouter<C, P, B, T> { default: Option<Rc<HttpNewService<P>>>, defaults: Vec<Rc<RefCell<Option<Rc<HttpNewService<P>>>>>>, endpoint: T, - factory_ref: Rc<RefCell<Option<AppFactory<P>>>>, + factory_ref: Rc<RefCell<Option<AppRoutingFactory<P>>>>, extensions: Extensions, state: Vec<Box<StateFactory>>, _t: PhantomData<(P, B)>, @@ -465,7 +465,7 @@ where } // set factory - *self.factory_ref.borrow_mut() = Some(AppFactory { + *self.factory_ref.borrow_mut() = Some(AppRoutingFactory { services: Rc::new(self.services), }); @@ -478,25 +478,25 @@ where } } -pub struct AppFactory<P> { +pub struct AppRoutingFactory<P> { services: Rc<Vec<(ResourceDef, HttpNewService<P>)>>, } -impl<P: 'static> NewService for AppFactory<P> { +impl<P: 'static> NewService for AppRoutingFactory<P> { type Request = ServiceRequest<P>; type Response = ServiceResponse; type Error = (); type InitError = (); - type Service = AppService<P>; - type Future = CreateAppService<P>; + type Service = AppRouting<P>; + type Future = AppRoutingFactoryResponse<P>; fn new_service(&self, _: &()) -> Self::Future { - CreateAppService { + AppRoutingFactoryResponse { fut: self .services .iter() .map(|(path, service)| { - CreateAppServiceItem::Future( + CreateAppRoutingItem::Future( Some(path.clone()), service.new_service(&()), ) @@ -510,17 +510,17 @@ type HttpServiceFut<P> = Box<Future<Item = HttpService<P>, Error = ()>>; /// Create app service #[doc(hidden)] -pub struct CreateAppService<P> { - fut: Vec<CreateAppServiceItem<P>>, +pub struct AppRoutingFactoryResponse<P> { + fut: Vec<CreateAppRoutingItem<P>>, } -enum CreateAppServiceItem<P> { +enum CreateAppRoutingItem<P> { Future(Option<ResourceDef>, HttpServiceFut<P>), Service(ResourceDef, HttpService<P>), } -impl<P> Future for CreateAppService<P> { - type Item = AppService<P>; +impl<P> Future for AppRoutingFactoryResponse<P> { + type Item = AppRouting<P>; type Error = (); fn poll(&mut self) -> Poll<Self::Item, Self::Error> { @@ -529,7 +529,7 @@ impl<P> Future for CreateAppService<P> { // poll http services for item in &mut self.fut { let res = match item { - CreateAppServiceItem::Future(ref mut path, ref mut fut) => { + CreateAppRoutingItem::Future(ref mut path, ref mut fut) => { match fut.poll()? { Async::Ready(service) => Some((path.take().unwrap(), service)), Async::NotReady => { @@ -538,11 +538,11 @@ impl<P> Future for CreateAppService<P> { } } } - CreateAppServiceItem::Service(_, _) => continue, + CreateAppRoutingItem::Service(_, _) => continue, }; if let Some((path, service)) = res { - *item = CreateAppServiceItem::Service(path, service); + *item = CreateAppRoutingItem::Service(path, service); } } @@ -552,14 +552,14 @@ impl<P> Future for CreateAppService<P> { .drain(..) .fold(Router::build(), |mut router, item| { match item { - CreateAppServiceItem::Service(path, service) => { + CreateAppRoutingItem::Service(path, service) => { router.rdef(path, service) } - CreateAppServiceItem::Future(_, _) => unreachable!(), + CreateAppRoutingItem::Future(_, _) => unreachable!(), } router }); - Ok(Async::Ready(AppService { + Ok(Async::Ready(AppRouting { router: router.finish(), ready: None, })) @@ -569,12 +569,12 @@ impl<P> Future for CreateAppService<P> { } } -pub struct AppService<P> { +pub struct AppRouting<P> { router: Router<HttpService<P>>, ready: Option<(ServiceRequest<P>, ResourceInfo)>, } -impl<P> Service for AppService<P> { +impl<P> Service for AppRouting<P> { type Request = ServiceRequest<P>; type Response = ServiceResponse; type Error = (); @@ -599,12 +599,13 @@ impl<P> Service for AppService<P> { } #[doc(hidden)] +/// Wrapper service for routing pub struct AppEntry<P> { - factory: Rc<RefCell<Option<AppFactory<P>>>>, + factory: Rc<RefCell<Option<AppRoutingFactory<P>>>>, } impl<P> AppEntry<P> { - fn new(factory: Rc<RefCell<Option<AppFactory<P>>>>) -> Self { + fn new(factory: Rc<RefCell<Option<AppRoutingFactory<P>>>>) -> Self { AppEntry { factory } } } @@ -614,8 +615,8 @@ impl<P: 'static> NewService for AppEntry<P> { type Response = ServiceResponse; type Error = (); type InitError = (); - type Service = AppService<P>; - type Future = CreateAppService<P>; + type Service = AppRouting<P>; + type Future = AppRoutingFactoryResponse<P>; fn new_service(&self, _: &()) -> Self::Future { self.factory.borrow_mut().as_mut().unwrap().new_service(&()) @@ -644,16 +645,19 @@ impl Service for AppChain { type Error = (); type Future = FutureResult<Self::Response, Self::Error>; + #[inline] fn poll_ready(&mut self) -> Poll<(), Self::Error> { Ok(Async::Ready(())) } + #[inline] fn call(&mut self, req: Self::Request) -> Self::Future { ok(req) } } -/// Service factory to convert `Request` to a `ServiceRequest<S>` +/// Service factory to convert `Request` to a `ServiceRequest<S>`. +/// It also executes state factories. pub struct AppInit<C, P> where C: NewService<Request = ServiceRequest<PayloadStream>, Response = ServiceRequest<P>>,