pub struct Error(/* private fields */);
Expand description
type erased error object. can be used for dynamic access to error’s debug/display info. it also support upcasting and downcasting.
§Examples:
use std::{convert::Infallible, error, fmt};
use xitca_web::{error::Error, http::WebResponse, service::Service, WebContext};
// concrete error type
#[derive(Debug)]
struct Foo;
// implement debug and display format.
impl fmt::Display for Foo {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("Foo")
}
}
// implement Error trait
impl error::Error for Foo {}
// implement Service trait for http response generating.
impl<'r, C> Service<WebContext<'r, C>> for Foo {
type Response = WebResponse;
type Error = Infallible;
async fn call(&self, _: WebContext<'r, C>) -> Result<Self::Response, Self::Error> {
Ok(WebResponse::default())
}
}
async fn handle_error<C>(ctx: WebContext<'_, C>) where C: 'static {
// construct error object.
let e = Error::from_service(Foo);
// format and display error
println!("{e:?}");
println!("{e}");
// generate http response.
let res = Service::call(&e, ctx).await.unwrap();
assert_eq!(res.status().as_u16(), 200);
// upcast error to trait object of std::error::Error
let e = e.upcast();
// downcast error object to concrete type again
assert!(e.downcast_ref::<Foo>().is_some());
}
Implementations§
Source§impl Error
impl Error
pub fn from_service<S>(s: S) -> Selfwhere
S: for<'r> Service<WebContext<'r, Request<'r>>, Response = WebResponse, Error = Infallible> + Error + Send + Sync + 'static,
Sourcepub fn upcast(&self) -> &(dyn Error + 'static)
pub fn upcast(&self) -> &(dyn Error + 'static)
upcast Error to trait object for advanced error handling. See std::error::Error for usage
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
Source§fn provide<'a>(&'a self, request: &mut Request<'a>)
fn provide<'a>(&'a self, request: &mut Request<'a>)
🔬This is a nightly-only experimental API. (
error_generic_member_access
)Provides type-based access to context intended for error reports. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§impl From<BodyOverFlow> for Error
impl From<BodyOverFlow> for Error
Source§fn from(e: BodyOverFlow) -> Self
fn from(e: BodyOverFlow) -> Self
Converts to this type from the input type.
Source§impl From<EncodingError> for Error
impl From<EncodingError> for Error
Source§fn from(e: EncodingError) -> Self
fn from(e: EncodingError) -> Self
Converts to this type from the input type.
Source§impl From<ErrorStatus> for Error
impl From<ErrorStatus> for Error
Source§fn from(e: ErrorStatus) -> Self
fn from(e: ErrorStatus) -> Self
Converts to this type from the input type.
Source§impl From<ExtensionNotFound> for Error
impl From<ExtensionNotFound> for Error
Source§fn from(e: ExtensionNotFound) -> Self
fn from(e: ExtensionNotFound) -> Self
Converts to this type from the input type.
Source§impl From<HeaderNotFound> for Error
impl From<HeaderNotFound> for Error
Source§fn from(e: HeaderNotFound) -> Self
fn from(e: HeaderNotFound) -> Self
Converts to this type from the input type.
Source§impl From<Infallible> for Error
impl From<Infallible> for Error
Source§fn from(e: Infallible) -> Self
fn from(e: Infallible) -> Self
Converts to this type from the input type.
Source§impl From<InvalidHeaderValue> for Error
impl From<InvalidHeaderValue> for Error
Source§fn from(e: InvalidHeaderValue) -> Self
fn from(e: InvalidHeaderValue) -> Self
Converts to this type from the input type.
Source§impl From<MatchError> for Error
impl From<MatchError> for Error
Source§fn from(e: MatchError) -> Self
fn from(e: MatchError) -> Self
Converts to this type from the input type.
Source§impl From<MethodNotAllowed> for Error
impl From<MethodNotAllowed> for Error
Source§fn from(e: MethodNotAllowed) -> Self
fn from(e: MethodNotAllowed) -> Self
Converts to this type from the input type.
Source§impl From<ParseError> for Error
impl From<ParseError> for Error
Source§fn from(e: ParseError) -> Self
fn from(e: ParseError) -> Self
Converts to this type from the input type.
Source§impl<E> From<Pipeline<Box<dyn Any + Send>, E>> for Error
impl<E> From<Pipeline<Box<dyn Any + Send>, E>> for Error
Source§fn from(e: CatchUnwindError<E>) -> Self
fn from(e: CatchUnwindError<E>) -> Self
Converts to this type from the input type.
Source§impl<E> From<RouterError<E>> for Errorwhere
E: Into<Self>,
impl<E> From<RouterError<E>> for Errorwhere
E: Into<Self>,
Source§fn from(e: RouterError<E>) -> Self
fn from(e: RouterError<E>) -> Self
Converts to this type from the input type.
Source§impl From<StatusCode> for Error
impl From<StatusCode> for Error
Source§fn from(e: StatusCode) -> Self
fn from(e: StatusCode) -> Self
Converts to this type from the input type.
Source§impl From<ThreadJoinError> for Error
impl From<ThreadJoinError> for Error
Source§fn from(e: ThreadJoinError) -> Self
fn from(e: ThreadJoinError) -> Self
Converts to this type from the input type.
Source§impl From<ToStrError> for Error
impl From<ToStrError> for Error
Source§fn from(e: ToStrError) -> Self
fn from(e: ToStrError) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<S, Arg> ServiceExt<Arg> for Swhere
S: Service<Arg>,
impl<S, Arg> ServiceExt<Arg> for Swhere
S: Service<Arg>,
Source§fn enclosed<T>(self, build: T) -> Pipeline<Self, T, BuildEnclosed>
fn enclosed<T>(self, build: T) -> Pipeline<Self, T, BuildEnclosed>
Enclose Self with given
T as Service<<Self as Service<_>>::Response>>
. In other word T
would take Self’s Service::Response
type as it’s generic argument of Service<_>
impl.Source§fn enclosed_fn<T, Req, O>(
self,
func: T,
) -> Pipeline<Self, AsyncFn<T>, BuildEnclosed>
fn enclosed_fn<T, Req, O>( self, func: T, ) -> Pipeline<Self, AsyncFn<T>, BuildEnclosed>
Function version of Self::enclosed method.
Source§fn map<F, Res, ResMap>(self, mapper: F) -> Pipeline<Self, Map<F>, BuildEnclosed>
fn map<F, Res, ResMap>(self, mapper: F) -> Pipeline<Self, Map<F>, BuildEnclosed>
Mutate
<<Self::Response as Service<Req>>::Future as Future>::Output
type with given
closure.