http_error/
any_http_error.rs1use std::ops::Deref;
2use std::{error, fmt};
3
4use crate::HttpError;
5
6#[derive(Debug)]
7pub struct AnyHttpError(Box<dyn HttpError + Send + 'static>);
8
9impl fmt::Display for AnyHttpError {
10 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
11 self.0.fmt(f)
12 }
13}
14
15impl error::Error for AnyHttpError {
16 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
17 self.0.source()
18 }
19}
20
21impl From<AnyHttpError> for Box<dyn HttpError + Send + 'static> {
22 fn from(err: AnyHttpError) -> Self {
23 err.0
24 }
25}
26
27impl<E> From<E> for AnyHttpError
28where
29 E: HttpError + Send + 'static,
30{
31 fn from(err: E) -> Self {
32 Self(Box::new(err))
33 }
34}
35
36impl From<Box<dyn HttpError + Send + 'static>> for AnyHttpError {
37 fn from(err: Box<dyn HttpError + Send + 'static>) -> Self {
38 Self(err)
39 }
40}
41
42impl Deref for AnyHttpError {
43 type Target = dyn HttpError + Send + 'static;
44
45 fn deref(&self) -> &Self::Target {
46 self.0.as_ref()
47 }
48}
49
50impl AsRef<dyn HttpError + Send + 'static> for AnyHttpError {
51 fn as_ref(&self) -> &(dyn HttpError + Send + 'static) {
52 self.0.as_ref()
53 }
54}