mirror of https://github.com/fafhrd91/actix-web
impl response error for moved dispatcher
This commit is contained in:
parent
af5218f78c
commit
09747bcbe3
|
@ -1,3 +1,3 @@
|
||||||
[alias]
|
[alias]
|
||||||
chk = "hack check --workspace --tests --examples"
|
chk = "hack check --workspace --all-features --tests --examples"
|
||||||
lint = "hack --clean-per-run clippy --workspace --tests --examples"
|
lint = "hack --clean-per-run clippy --workspace --tests --examples"
|
||||||
|
|
|
@ -9,8 +9,12 @@
|
||||||
### Changed
|
### Changed
|
||||||
* `client::Connector` type now only have one generic type for `actix_service::Service`. [#2063]
|
* `client::Connector` type now only have one generic type for `actix_service::Service`. [#2063]
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* `ResponseError` impl for `actix_utils::timeout::TimeoutError`. [#2127]
|
||||||
|
|
||||||
[#2063]: https://github.com/actix/actix-web/pull/2063
|
[#2063]: https://github.com/actix/actix-web/pull/2063
|
||||||
[#2081]: https://github.com/actix/actix-web/pull/2081
|
[#2081]: https://github.com/actix/actix-web/pull/2081
|
||||||
|
[#2127]: https://github.com/actix/actix-web/pull/2127
|
||||||
|
|
||||||
|
|
||||||
## 3.0.0-beta.4 - 2021-03-08
|
## 3.0.0-beta.4 - 2021-03-08
|
||||||
|
|
|
@ -6,9 +6,6 @@ use std::str::Utf8Error;
|
||||||
use std::string::FromUtf8Error;
|
use std::string::FromUtf8Error;
|
||||||
use std::{fmt, io, result};
|
use std::{fmt, io, result};
|
||||||
|
|
||||||
use actix_codec::{Decoder, Encoder};
|
|
||||||
use actix_utils::dispatcher::DispatcherError as FramedDispatcherError;
|
|
||||||
use actix_utils::timeout::TimeoutError;
|
|
||||||
use bytes::BytesMut;
|
use bytes::BytesMut;
|
||||||
use derive_more::{Display, From};
|
use derive_more::{Display, From};
|
||||||
use http::uri::InvalidUri;
|
use http::uri::InvalidUri;
|
||||||
|
@ -148,19 +145,6 @@ impl From<ResponseBuilder> for Error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inspects the underlying enum and returns an appropriate status code.
|
|
||||||
///
|
|
||||||
/// If the variant is [`TimeoutError::Service`], the error code of the service is returned.
|
|
||||||
/// Otherwise, [`StatusCode::GATEWAY_TIMEOUT`] is returned.
|
|
||||||
impl<E: ResponseError> ResponseError for TimeoutError<E> {
|
|
||||||
fn status_code(&self) -> StatusCode {
|
|
||||||
match self {
|
|
||||||
TimeoutError::Service(e) => e.status_code(),
|
|
||||||
TimeoutError::Timeout => StatusCode::GATEWAY_TIMEOUT,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Display)]
|
#[derive(Debug, Display)]
|
||||||
#[display(fmt = "UnknownError")]
|
#[display(fmt = "UnknownError")]
|
||||||
struct UnitError;
|
struct UnitError;
|
||||||
|
@ -469,14 +453,6 @@ impl ResponseError for ContentTypeError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E, U: Encoder<I> + Decoder, I> ResponseError for FramedDispatcherError<E, U, I>
|
|
||||||
where
|
|
||||||
E: fmt::Debug + fmt::Display,
|
|
||||||
<U as Encoder<I>>::Error: fmt::Debug,
|
|
||||||
<U as Decoder>::Error: fmt::Debug,
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper type that can wrap any error and generate custom response.
|
/// Helper type that can wrap any error and generate custom response.
|
||||||
///
|
///
|
||||||
/// In following example any `io::Error` will be converted into "BAD REQUEST"
|
/// In following example any `io::Error` will be converted into "BAD REQUEST"
|
||||||
|
|
|
@ -72,8 +72,13 @@ mod inner {
|
||||||
|
|
||||||
use actix_codec::{AsyncRead, AsyncWrite, Decoder, Encoder, Framed};
|
use actix_codec::{AsyncRead, AsyncWrite, Decoder, Encoder, Framed};
|
||||||
|
|
||||||
|
use crate::ResponseError;
|
||||||
|
|
||||||
/// Framed transport errors
|
/// Framed transport errors
|
||||||
pub enum DispatcherError<E, U: Encoder<I> + Decoder, I> {
|
pub enum DispatcherError<E, U, I>
|
||||||
|
where
|
||||||
|
U: Encoder<I> + Decoder,
|
||||||
|
{
|
||||||
/// Inner service error.
|
/// Inner service error.
|
||||||
Service(E),
|
Service(E),
|
||||||
|
|
||||||
|
@ -84,15 +89,19 @@ mod inner {
|
||||||
Decoder(<U as Decoder>::Error),
|
Decoder(<U as Decoder>::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E, U: Encoder<I> + Decoder, I> From<E> for DispatcherError<E, U, I> {
|
impl<E, U, I> From<E> for DispatcherError<E, U, I>
|
||||||
|
where
|
||||||
|
U: Encoder<I> + Decoder,
|
||||||
|
{
|
||||||
fn from(err: E) -> Self {
|
fn from(err: E) -> Self {
|
||||||
DispatcherError::Service(err)
|
DispatcherError::Service(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E, U: Encoder<I> + Decoder, I> fmt::Debug for DispatcherError<E, U, I>
|
impl<E, U, I> fmt::Debug for DispatcherError<E, U, I>
|
||||||
where
|
where
|
||||||
E: fmt::Debug,
|
E: fmt::Debug,
|
||||||
|
U: Encoder<I> + Decoder,
|
||||||
<U as Encoder<I>>::Error: fmt::Debug,
|
<U as Encoder<I>>::Error: fmt::Debug,
|
||||||
<U as Decoder>::Error: fmt::Debug,
|
<U as Decoder>::Error: fmt::Debug,
|
||||||
{
|
{
|
||||||
|
@ -111,9 +120,10 @@ mod inner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<E, U: Encoder<I> + Decoder, I> fmt::Display for DispatcherError<E, U, I>
|
impl<E, U, I> fmt::Display for DispatcherError<E, U, I>
|
||||||
where
|
where
|
||||||
E: fmt::Display,
|
E: fmt::Display,
|
||||||
|
U: Encoder<I> + Decoder,
|
||||||
<U as Encoder<I>>::Error: fmt::Debug,
|
<U as Encoder<I>>::Error: fmt::Debug,
|
||||||
<U as Decoder>::Error: fmt::Debug,
|
<U as Decoder>::Error: fmt::Debug,
|
||||||
{
|
{
|
||||||
|
@ -126,6 +136,15 @@ mod inner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<E, U, I> ResponseError for DispatcherError<E, U, I>
|
||||||
|
where
|
||||||
|
E: fmt::Debug + fmt::Display,
|
||||||
|
U: Encoder<I> + Decoder,
|
||||||
|
<U as Encoder<I>>::Error: fmt::Debug,
|
||||||
|
<U as Decoder>::Error: fmt::Debug,
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// Message type wrapper for signalling end of message stream.
|
/// Message type wrapper for signalling end of message stream.
|
||||||
pub enum Message<T> {
|
pub enum Message<T> {
|
||||||
/// Message item.
|
/// Message item.
|
||||||
|
|
|
@ -9,11 +9,12 @@ use actix_codec::{AsyncRead, AsyncWrite, Framed};
|
||||||
use actix_http::{body, h1, ws, Error, HttpService, Request, Response};
|
use actix_http::{body, h1, ws, Error, HttpService, Request, Response};
|
||||||
use actix_http_test::test_server;
|
use actix_http_test::test_server;
|
||||||
use actix_service::{fn_factory, Service};
|
use actix_service::{fn_factory, Service};
|
||||||
use actix_utils::dispatcher::Dispatcher;
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use futures_util::future;
|
use futures_util::future;
|
||||||
use futures_util::{SinkExt as _, StreamExt as _};
|
use futures_util::{SinkExt as _, StreamExt as _};
|
||||||
|
|
||||||
|
use crate::ws::Dispatcher;
|
||||||
|
|
||||||
struct WsService<T>(Arc<Mutex<(PhantomData<T>, Cell<bool>)>>);
|
struct WsService<T>(Arc<Mutex<(PhantomData<T>, Cell<bool>)>>);
|
||||||
|
|
||||||
impl<T> WsService<T> {
|
impl<T> WsService<T> {
|
||||||
|
@ -58,7 +59,7 @@ where
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
Dispatcher::new(framed.replace_codec(ws::Codec::new()), service)
|
Dispatcher::with(framed.replace_codec(ws::Codec::new()), service)
|
||||||
.await
|
.await
|
||||||
.map_err(|_| panic!())
|
.map_err(|_| panic!())
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue