1
0
mirror of https://github.com/actix/examples synced 2024-11-24 06:43:00 +01:00

explicit Error for middlewares

This commit is contained in:
Nikolay Kim 2019-04-25 11:19:21 -07:00
parent 0445615e59
commit d571ee5abb
2 changed files with 10 additions and 12 deletions

View File

@ -1,6 +1,6 @@
use actix_service::{Service, Transform}; use actix_service::{Service, Transform};
use actix_web::dev::{ServiceRequest, ServiceResponse}; use actix_web::dev::{ServiceRequest, ServiceResponse};
use actix_web::{http, HttpResponse}; use actix_web::{http, Error, HttpResponse};
use futures::future::{ok, Either, FutureResult}; use futures::future::{ok, Either, FutureResult};
use futures::Poll; use futures::Poll;
@ -8,12 +8,12 @@ pub struct CheckLogin;
impl<S, B> Transform<S> for CheckLogin impl<S, B> Transform<S> for CheckLogin
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>>, S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
{ {
type Request = ServiceRequest; type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = S::Error; type Error = Error;
type InitError = (); type InitError = ();
type Transform = CheckLoginMiddleware<S>; type Transform = CheckLoginMiddleware<S>;
type Future = FutureResult<Self::Transform, Self::InitError>; type Future = FutureResult<Self::Transform, Self::InitError>;
@ -28,12 +28,12 @@ pub struct CheckLoginMiddleware<S> {
impl<S, B> Service for CheckLoginMiddleware<S> impl<S, B> Service for CheckLoginMiddleware<S>
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>>, S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
{ {
type Request = ServiceRequest; type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = S::Error; type Error = Error;
type Future = Either<S::Future, FutureResult<Self::Response, Self::Error>>; type Future = Either<S::Future, FutureResult<Self::Response, Self::Error>>;
fn poll_ready(&mut self) -> Poll<(), Self::Error> { fn poll_ready(&mut self) -> Poll<(), Self::Error> {

View File

@ -1,5 +1,5 @@
use actix_service::{Service, Transform}; use actix_service::{Service, Transform};
use actix_web::dev::{ServiceRequest, ServiceResponse}; use actix_web::{dev::ServiceRequest, dev::ServiceResponse, Error};
use futures::future::{ok, FutureResult}; use futures::future::{ok, FutureResult};
use futures::{Future, Poll}; use futures::{Future, Poll};
@ -14,14 +14,13 @@ pub struct SayHi;
// `B` - type of response's body // `B` - type of response's body
impl<S, B> Transform<S> for SayHi impl<S, B> Transform<S> for SayHi
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>>, S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
S::Error: 'static,
B: 'static, B: 'static,
{ {
type Request = ServiceRequest; type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = S::Error; type Error = Error;
type InitError = (); type InitError = ();
type Transform = SayHiMiddleware<S>; type Transform = SayHiMiddleware<S>;
type Future = FutureResult<Self::Transform, Self::InitError>; type Future = FutureResult<Self::Transform, Self::InitError>;
@ -37,14 +36,13 @@ pub struct SayHiMiddleware<S> {
impl<S, B> Service for SayHiMiddleware<S> impl<S, B> Service for SayHiMiddleware<S>
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>>, S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
S::Error: 'static,
B: 'static, B: 'static,
{ {
type Request = ServiceRequest; type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = S::Error; type Error = Error;
type Future = Box<Future<Item = Self::Response, Error = Self::Error>>; type Future = Box<Future<Item = Self::Response, Error = Self::Error>>;
fn poll_ready(&mut self) -> Poll<(), Self::Error> { fn poll_ready(&mut self) -> Poll<(), Self::Error> {