http_json_stream/
error.rs1use std::fmt;
2use std::string::FromUtf8Error;
3
4pub type Result<T, E = Error> = std::result::Result<T, E>;
6
7#[derive(Debug)]
9pub enum Error {
10 Conn(Box<dyn std::error::Error + 'static>),
11 Body(Box<dyn std::error::Error + 'static>),
12 Json(serde_json::Error, Result<String, FromUtf8Error>),
13 Http(http::StatusCode, Result<String, FromUtf8Error>),
14 Io(std::io::Error),
15}
16
17impl std::error::Error for Error {
18 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
19 match self {
20 Error::Conn(err) => Some(&**err),
21 Error::Body(err) => Some(&**err),
22 Error::Json(err, _) => Some(err),
23 Error::Http(_, _) => None,
24 Error::Io(err) => Some(err),
25 }
26 }
27}
28
29impl fmt::Display for Error {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 match self {
32 Error::Conn(err) => write!(f, "Conn: {err}"),
33 Error::Body(err) => write!(f, "Body: {err}"),
34 Error::Json(err, buf) => match buf {
35 Ok(json) => write!(f, "Json: {err}: {json}"),
36 Err(utf8) => write!(f, "Json: {err}: {utf8}"),
37 },
38 Error::Http(status, body) => match body {
39 Ok(text) => write!(f, "HTTP {status}: {text}"),
40 Err(utf8) => write!(f, "HTTP {status}: {utf8}"),
41 },
42 Error::Io(err) => write!(f, "IO: {err}"),
43 }
44 }
45}
46
47impl From<std::io::Error> for Error {
48 fn from(error: std::io::Error) -> Self {
49 Self::Io(error)
50 }
51}