1use tokio_rustls::rustls;
4
5#[cfg(feature = "hickory")]
6use hickory_client::{
7 error::ClientError as HickoryClientError, proto::error::ProtoError as HickoryProtoError,
8};
9
10#[derive(Debug)]
12pub enum LibError {
13 IoError(std::io::Error),
16 InvalidUrlError(InvalidUrl),
18 HostLookupError,
21 RustlsError(rustls::Error),
24 StatusOutOfRange(u8),
26 DataNotUtf8(std::string::FromUtf8Error),
29 InvalidMime(mime::FromStrError),
31 #[cfg(feature = "hickory")]
33 DnsClientError(HickoryClientError),
34}
35
36impl From<std::io::Error> for LibError {
37 #[inline]
38 fn from(err: std::io::Error) -> Self {
39 Self::IoError(err)
40 }
41}
42
43impl From<url::ParseError> for LibError {
44 #[inline]
45 fn from(err: url::ParseError) -> Self {
46 Self::InvalidUrlError(InvalidUrl::ParseError(err))
47 }
48}
49
50impl From<InvalidUrl> for LibError {
51 #[inline]
52 fn from(err: InvalidUrl) -> Self {
53 Self::InvalidUrlError(err)
54 }
55}
56
57impl From<rustls::Error> for LibError {
58 #[inline]
59 fn from(err: rustls::Error) -> Self {
60 Self::RustlsError(err)
61 }
62}
63
64impl From<rustls::CertificateError> for LibError {
65 #[inline]
66 fn from(err: rustls::CertificateError) -> Self {
67 Self::RustlsError(err.into())
68 }
69}
70
71impl LibError {
72 #[inline]
73 pub fn status_out_of_range(num: u8) -> Self {
74 Self::StatusOutOfRange(num)
75 }
76}
77
78impl From<std::string::FromUtf8Error> for LibError {
79 #[inline]
80 fn from(err: std::string::FromUtf8Error) -> Self {
81 Self::DataNotUtf8(err)
82 }
83}
84
85impl From<mime::FromStrError> for LibError {
86 #[inline]
87 fn from(err: mime::FromStrError) -> Self {
88 Self::InvalidMime(err)
89 }
90}
91
92#[cfg(feature = "hickory")]
93impl From<HickoryClientError> for LibError {
94 #[inline]
95 fn from(err: HickoryClientError) -> Self {
96 Self::DnsClientError(err)
97 }
98}
99
100#[cfg(feature = "hickory")]
101impl From<HickoryProtoError> for LibError {
102 #[inline]
103 fn from(err: HickoryProtoError) -> Self {
104 Self::DnsClientError(err.into())
105 }
106}
107
108#[derive(Debug)]
110pub enum InvalidUrl {
111 ParseError(url::ParseError),
113 SchemeNotGemini,
115 UserinfoPresent,
118 ConvertError,
121}