1use std::fmt;
4
5#[derive(Debug)]
7#[non_exhaustive]
8pub enum Error {
9 BadRequest(&'static str),
12 TooLarge(&'static str),
14 Io(std::io::Error),
16 Tls(String),
19 Compress(String),
22 Config(String),
24 Acme(String),
26}
27
28impl fmt::Display for Error {
29 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30 match self {
31 Error::BadRequest(why) => write!(f, "bad request: {why}"),
32 Error::TooLarge(what) => write!(f, "request too large: {what}"),
33 Error::Io(e) => write!(f, "io error: {e}"),
34 Error::Tls(e) => write!(f, "tls error: {e}"),
35 Error::Compress(e) => write!(f, "compression error: {e}"),
36 Error::Config(e) => write!(f, "config error: {e}"),
37 Error::Acme(e) => write!(f, "acme error: {e}"),
38 }
39 }
40}
41
42impl std::error::Error for Error {
43 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
44 match self {
45 Error::Io(e) => Some(e),
46 _ => None,
47 }
48 }
49}
50
51impl From<std::io::Error> for Error {
52 fn from(e: std::io::Error) -> Self {
53 Error::Io(e)
54 }
55}
56
57pub type Result<T> = std::result::Result<T, Error>;