1use response::error::ConnectError;
2
3pub(crate) mod common;
4pub mod metadata;
5pub mod request;
6pub mod response;
7pub mod stream;
8
9#[cfg(feature = "reqwest")]
10pub mod reqwest;
11
12pub(crate) type BoxError = Box<dyn std::error::Error + Send + Sync>;
13
14#[non_exhaustive]
15#[derive(Debug, thiserror::Error)]
16pub enum Error {
17 #[error("base64 decode error: {0}")]
18 Base64DecodeError(#[from] base64::DecodeError),
19 #[error("body error: {0}")]
20 BodyError(#[source] BoxError),
21 #[error("{0}")]
22 ConnectError(ConnectError),
23 #[error("invalid request: {0}")]
24 InvalidRequest(String),
25 #[error("invalid response: {0}")]
26 InvalidResponse(String),
27 #[error("invalid metadata: {0}")]
28 InvalidMetadata(&'static str),
29 #[error("invalid header name: {0}")]
30 InvalidHeaderName(#[from] http::header::InvalidHeaderName),
31 #[error("invalid header value: {0}")]
32 InvalidHeaderValue(#[from] http::header::InvalidHeaderValue),
33 #[error("invalid URI: {0}")]
34 InvalidUri(#[from] http::uri::InvalidUri),
35 #[error("invalid URI: {0}")]
36 InvalidUriParts(#[from] http::uri::InvalidUriParts),
37 #[error("unacceptable encoding {0:?}")]
38 UnacceptableEncoding(String),
39 #[error("unexpected message codec {0:?}")]
40 UnexpectedMessageCodec(String),
41
42 #[cfg(feature = "reqwest")]
43 #[error("reqwest error: {0}")]
44 ReqwestError(#[source] ::reqwest::Error),
45}
46
47impl Error {
48 pub(crate) fn body(err: impl Into<BoxError>) -> Self {
49 Self::BodyError(err.into())
50 }
51
52 pub(crate) fn invalid_request(msg: impl std::fmt::Display) -> Self {
53 Self::InvalidRequest(msg.to_string())
54 }
55}